# Local / staging-on-laptop overlay (Traefik + published data ports + mild limits). # Usage: see compose.yaml header or scripts/compose-dev.sh services: postgres: ports: - "127.0.0.1:5432:5432" deploy: resources: limits: memory: 512M redis: ports: - "127.0.0.1:6379:6379" deploy: resources: limits: memory: 256M rustfs: environment: RUSTFS_CONSOLE_ENABLE: "true" ports: - "127.0.0.1:9000:9000" - "127.0.0.1:9001:9001" deploy: resources: limits: memory: 512M backend: environment: DEV_MODE: ${DEV_MODE:-false} SEED_CURRICULUM: ${SEED_CURRICULUM:-false} CAPTCHA_EXPOSE_ANSWER: ${CAPTCHA_EXPOSE_ANSWER:-false} deploy: resources: limits: memory: 512M frontend: deploy: resources: limits: memory: 512M traefik: # v3.6.1+ required for Docker Engine 29+ API negotiation image: traefik@sha256:24841fe2de7304c149343d877d2923b4c8800a38ba015dea9174c23b20e344a0 restart: unless-stopped security_opt: - no-new-privileges:true command: - --providers.docker=true - --providers.docker.exposedbydefault=false - --providers.docker.network=pargar_pargar - --providers.file.directory=/etc/traefik/dynamic - --providers.file.watch=true - --entrypoints.web.address=:80 - --entrypoints.websecure.address=:443 - --entrypoints.web.http.redirections.entrypoint.to=websecure - --entrypoints.web.http.redirections.entrypoint.scheme=https - --entrypoints.web.http.redirections.entrypoint.permanent=true - --entrypoints.web.http.aliasHeadersStrategy=delete - --entrypoints.websecure.http.aliasHeadersStrategy=delete # Allow slow, large uploads (admin video ≤ 200MB); default is 60s. - --entrypoints.web.transport.respondingTimeouts.readTimeout=3600 - --entrypoints.websecure.transport.respondingTimeouts.readTimeout=3600 # Disable HTTP/2 so WebSocket upgrades work from Chromium (RFC 8441 not enabled). - --entrypoints.websecure.http2.maxConcurrentStreams=0 # Dev: Traefik default certificate (browser warning expected on localhost). - --api.dashboard=true - --api.insecure=true - --log.level=INFO - --accesslog=true - --ping=true - --global.checkNewVersion=false ports: - "80:80" - "443:443" # Dashboard only on loopback - "127.0.0.1:8088:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ../traefik/dynamic:/etc/traefik/dynamic:ro depends_on: backend: condition: service_healthy frontend: condition: service_healthy healthcheck: test: ["CMD", "traefik", "healthcheck", "--ping"] interval: 10s timeout: 3s retries: 10 deploy: resources: limits: memory: 256M networks: - pargar