103 lines
2.7 KiB
YAML
103 lines
2.7 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_APP=backend.app:create_app
|
|
- 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_APP=backend.app:create_app
|
|
- 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:
|