Files
sharing/docker-compose.yml
T
2025-08-25 21:54:37 -04:00

117 lines
3.4 KiB
YAML

services:
caddy:
image: caddy/caddy:2-alpine
restart: unless-stopped
ports:
- "8550:8550"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro,Z
- caddy-data:/data
environment:
- PASTE_DOMAIN=${PASTE_DOMAIN}
- FILES_DOMAIN=${FILES_DOMAIN}
- SHORT_DOMAIN=${SHORT_DOMAIN}
- INITIAL_API_KEY=${INITIAL_API_KEY}
networks:
- proxy
privatebin:
image: privatebin/nginx-fpm-alpine:stable
volumes:
- ./privatebin.conf.php:/srv/cfg/conf.php
- privatebin-data:/srv/data
labels:
- traefik.enable=true
- traefik.http.routers.privatebin.rule=Host(`${PASTE_DOMAIN}`)
- traefik.http.routers.privatebin.entrypoints=websecure
- traefik.http.routers.privatebin.tls.certresolver=le
networks:
- proxy
lufi:
image: xataz/lufi:latest
environment:
- UID=1000
- GID=1000
- CONTACT=${ADMIN_EMAIL}
- SECRET=${LUFI_SECRET} # 32+ rand chars
- DEFAULT_DELAY=7 # days until deletion
- MAX_DELAY=30 # max days a user can choose
- MAX_FILE_SIZE=250000000 # ~238 MiB; adjust as needed
- WEBROOT=/ # served at /
volumes:
- lufi-data:/usr/lufi/data
- lufi-files:/usr/lufi/files
labels:
- traefik.enable=true
- traefik.http.routers.lufi.rule=Host(`${FILES_DOMAIN}`)
- traefik.http.routers.lufi.entrypoints=websecure
- traefik.http.routers.lufi.tls.certresolver=le
networks:
- proxy
shlink-db:
image: postgres:16-alpine
environment:
- POSTGRES_DB=shlink
- POSTGRES_USER=shlink
- POSTGRES_PASSWORD=${SHLINK_DB_PASSWORD}
volumes:
- shlink-db:/var/lib/postgresql/data
networks:
- proxy
healthcheck:
test:
[
"CMD-SHELL",
"pg_isready -U shlink -d shlink -h 127.0.0.1 || exit 1",
]
interval: 5s
timeout: 5s
retries: 12
start_period: 10s
shlink:
image: shlinkio/shlink:stable
environment:
- DEFAULT_DOMAIN=${SHORT_DOMAIN}
- IS_HTTPS_ENABLED=true
- DB_DRIVER=postgres
- DB_HOST=shlink-db
- DB_NAME=shlink
- DB_USER=shlink
- DB_PASSWORD=${SHLINK_DB_PASSWORD}
- INITIAL_API_KEY=${SHLINK_API_KEY}
- SHELL_VERBOSITY=3
labels:
- traefik.enable=true
- traefik.http.services.shlink.loadbalancer.server.port=8080
- traefik.http.routers.shlink.rule=Host(`${SHORT_DOMAIN}`)
- traefik.http.routers.shlink.entrypoints=websecure
- traefik.http.routers.shlink.tls.certresolver=le
networks:
- proxy
depends_on:
shlink-db:
condition: service_healthy
shlink-adapter:
build: ./shlink-adapter
restart: unless-stopped
environment:
SHLINK_BASE: "http://shlink:8080"
SHLINK_API_KEY: "${SHLINK_API_KEY}"
networks:
- proxy
networks:
proxy:
driver: bridge
volumes:
privatebin-data:
lufi-data:
lufi-files:
shlink-db:
caddy-data: