services: db: image: postgres:16-alpine container_name: anime-quiz-db environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: - postgres_data:/var/lib/postgresql/data ports: - "${DB_PORT}:5432" restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] interval: 10s timeout: 5s retries: 5 backend: build: context: ./backend dockerfile: Dockerfile container_name: anime-quiz-backend volumes: - ./output:/app/output env_file: - .env environment: - DATABASE_URL=${DATABASE_URL} - S3_ENDPOINT=${S3_ENDPOINT} - S3_ACCESS_KEY=${S3_ACCESS_KEY} - S3_SECRET_KEY=${S3_SECRET_KEY} - S3_REGION=${S3_REGION} - S3_BUCKET=${S3_BUCKET} - OUTPUT_PATH=${OUTPUT_PATH} - TEMP_PATH=${TEMP_PATH} - CACHE_PATH=${CACHE_PATH} depends_on: db: condition: service_healthy restart: unless-stopped healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"] interval: 30s timeout: 10s retries: 3 start_period: 10s frontend: build: context: ./frontend dockerfile: Dockerfile container_name: anime-quiz-frontend ports: - "${APP_PORT}:80" volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - backend restart: unless-stopped volumes: output: postgres_data: