Spaces:
Sleeping
Sleeping
| # VoiceForge Production Docker Compose | |
| # Scalable, secure production setup | |
| version: '3.8' | |
| services: | |
| # PostgreSQL Database | |
| db: | |
| image: postgres:15-alpine | |
| container_name: voiceforge-db | |
| restart: always | |
| environment: | |
| POSTGRES_USER: ${POSTGRES_USER:-postgres} | |
| POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} | |
| POSTGRES_DB: ${POSTGRES_DB:-voiceforge} | |
| volumes: | |
| - postgres_data:/var/lib/postgresql/data | |
| healthcheck: | |
| test: [ "CMD-SHELL", "pg_isready -U postgres" ] | |
| interval: 10s | |
| timeout: 5s | |
| retries: 5 | |
| # Redis Cache & Broker | |
| redis: | |
| image: redis:7-alpine | |
| container_name: voiceforge-redis | |
| restart: always | |
| command: redis-server --save 60 1 --loglevel warning | |
| volumes: | |
| - redis_data:/data | |
| healthcheck: | |
| test: [ "CMD", "redis-cli", "ping" ] | |
| interval: 10s | |
| timeout: 5s | |
| retries: 5 | |
| # FastAPI Backend | |
| backend: | |
| build: | |
| context: ../../backend | |
| dockerfile: ../deploy/docker/Dockerfile.backend | |
| container_name: voiceforge-backend | |
| restart: always | |
| environment: | |
| - DATABASE_URL=postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@db:5432/${POSTGRES_DB:-voiceforge} | |
| - REDIS_URL=redis://redis:6379/0 | |
| - GOOGLE_APPLICATION_CREDENTIALS=/app/credentials/google-cloud-key.json | |
| - API_HOST=0.0.0.0 | |
| - API_PORT=8000 | |
| volumes: | |
| - ../../credentials:/app/credentials:ro | |
| - uploads_data:/app/uploads | |
| ports: | |
| - "8000:8000" | |
| depends_on: | |
| db: | |
| condition: service_healthy | |
| redis: | |
| condition: service_healthy | |
| # Production: Use Gunicorn with Uvicorn workers | |
| command: gunicorn app.main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000 | |
| # Celery Worker | |
| worker: | |
| build: | |
| context: ../../backend | |
| dockerfile: ../deploy/docker/Dockerfile.backend | |
| container_name: voiceforge-worker | |
| restart: always | |
| environment: | |
| - DATABASE_URL=postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@db:5432/${POSTGRES_DB:-voiceforge} | |
| - REDIS_URL=redis://redis:6379/0 | |
| - GOOGLE_APPLICATION_CREDENTIALS=/app/credentials/google-cloud-key.json | |
| volumes: | |
| - ../../credentials:/app/credentials:ro | |
| - uploads_data:/app/uploads | |
| depends_on: | |
| backend: | |
| condition: service_started | |
| redis: | |
| condition: service_healthy | |
| command: celery -A app.workers.celery_app worker --loglevel=warning --concurrency=2 | |
| # Streamlit Frontend | |
| frontend: | |
| build: | |
| context: ../../frontend | |
| dockerfile: ../deploy/docker/Dockerfile.frontend | |
| container_name: voiceforge-frontend | |
| restart: always | |
| environment: | |
| - API_BASE_URL=http://backend:8000 | |
| ports: | |
| - "8501:8501" | |
| depends_on: | |
| - backend | |
| volumes: | |
| postgres_data: | |
| redis_data: | |
| uploads_data: | |
| networks: | |
| default: | |
| name: voiceforge-network | |