Files
triviathang/docker-compose.production.yml
2026-01-12 21:23:08 -05:00

101 lines
2.6 KiB
YAML

services:
redis:
image: redis:7-alpine
restart: unless-stopped
networks:
- trivia-network
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 5
backend:
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
ports:
- "${PORT:-5001}:5001"
environment:
- FLASK_ENV=production
- PORT=5001
- DATABASE_URI=sqlite:////app/backend/instance/trivia.db
- CORS_ORIGINS=${CORS_ORIGINS:-*}
- CELERY_BROKER_URL=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/0
# OIDC/Authelia configuration
- OIDC_ISSUER=${OIDC_ISSUER}
- OIDC_CLIENT_ID=${OIDC_CLIENT_ID:-trivia-app}
- OIDC_CLIENT_SECRET=${OIDC_CLIENT_SECRET}
- OIDC_REDIRECT_URI=${OIDC_REDIRECT_URI}
- FRONTEND_URL=${FRONTEND_URL}
- SESSION_COOKIE_SECURE=${SESSION_COOKIE_SECURE:-true}
volumes:
# Persist database
- trivia-db:/app/backend/instance
# Persist uploaded images
- trivia-images:/app/backend/static/images
# Persist audio files
- trivia-audio:/app/backend/static/audio
depends_on:
redis:
condition: service_healthy
networks:
- trivia-network
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:5001/api/health')"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
celery-worker:
build:
context: .
dockerfile: Dockerfile
command: uv run celery -A backend.celery_app worker --loglevel=info
restart: unless-stopped
environment:
- FLASK_ENV=production
- CELERY_BROKER_URL=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/0
- DATABASE_URI=sqlite:////app/backend/instance/trivia.db
volumes:
- trivia-db:/app/backend/instance
- trivia-audio:/app/backend/static/audio
depends_on:
redis:
condition: service_healthy
networks:
- trivia-network
celery-flower:
build:
context: .
dockerfile: Dockerfile
command: uv run celery -A backend.celery_app flower --port=5555
restart: unless-stopped
ports:
- "5555:5555"
environment:
- CELERY_BROKER_URL=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/0
depends_on:
- redis
- celery-worker
networks:
- trivia-network
networks:
trivia-network:
driver: bridge
volumes:
redis-data:
trivia-db:
trivia-images:
trivia-audio: