services: queue: build: . image: queue:latest restart: unless-stopped volumes: - ./data:/data environment: # Full public URL used to generate the QR code. # Must match the hostname in the Traefik rule below. - APP_URL=https://${QUEUE_HOSTNAME:-queue.example.com} - DB_PATH=/data/queues.db networks: - traefik labels: - "traefik.enable=true" # ---- routing ---- - "traefik.http.routers.queue.rule=Host(`${QUEUE_HOSTNAME:-queue.example.com}`)" - "traefik.http.routers.queue.entrypoints=websecure" - "traefik.http.routers.queue.tls=true" - "traefik.http.routers.queue.tls.certresolver=letsencrypt" # ---- backend ---- - "traefik.http.services.queue.loadbalancer.server.port=8080" # WebSocket connections use the same router — Traefik v2+ passes # Upgrade/Connection headers through by default, no extra middleware needed. networks: # Must already exist: docker network create traefik backend: external: true