2026-10-07 19:40:26 +03:30
|
|
|
# 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}
|
2026-10-20 17:51:23 +03:30
|
|
|
CAPTCHA_EXPOSE_ANSWER: ${CAPTCHA_EXPOSE_ANSWER:-false}
|
2026-10-07 19:40:26 +03:30
|
|
|
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
|
2026-10-16 09:44:23 +03:30
|
|
|
# Allow slow, large uploads (admin video ≤ 200MB); default is 60s.
|
|
|
|
|
- --entrypoints.web.transport.respondingTimeouts.readTimeout=3600
|
|
|
|
|
- --entrypoints.websecure.transport.respondingTimeouts.readTimeout=3600
|
2026-10-20 17:51:23 +03:30
|
|
|
# Disable HTTP/2 so WebSocket upgrades work from Chromium (RFC 8441 not enabled).
|
|
|
|
|
- --entrypoints.websecure.http2.maxConcurrentStreams=0
|
2026-10-07 19:40:26 +03:30
|
|
|
# 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
|