services: caddy: image: caddy/caddy:2-alpine restart: unless-stopped ports: - "8550:8550" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro,Z - caddy-data:/data - ./public:/var/www/share:ro,Z environment: - PASTE_DOMAIN=${PASTE_DOMAIN} - FILES_DOMAIN=${FILES_DOMAIN} - SHORT_DOMAIN=${SHORT_DOMAIN} - HOME_DOMAIN=${HOME_DOMAIN} - INITIAL_API_KEY=${INITIAL_API_KEY} networks: - proxy privatebin: image: privatebin/nginx-fpm-alpine:stable restart: unless-stopped volumes: - ./privatebin.conf.php:/srv/cfg/conf.php:ro,Z - privatebin-data:/srv/data environment: - SHORT_DOMAIN=${SHORT_DOMAIN} 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 restart: unless-stopped 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=500000000 - WEBROOT=/ # served at / - DISABLE_MAIL_SENDING=1 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 restart: unless-stopped 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 restart: unless-stopped 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: