version: '3.8' services: postgres: image: pgvector/pgvector:pg16 container_name: audio_classifier_db environment: POSTGRES_USER: ${POSTGRES_USER:-audio_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-audio_password} POSTGRES_DB: ${POSTGRES_DB:-audio_classifier} ports: - "5433:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./backend/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-audio_user}"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped backend: build: ./backend container_name: audio_classifier_api depends_on: postgres: condition: service_healthy environment: DATABASE_URL: postgresql://${POSTGRES_USER:-audio_user}:${POSTGRES_PASSWORD:-audio_password}@postgres:5432/${POSTGRES_DB:-audio_classifier} CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:3000} ANALYSIS_USE_CLAP: ${ANALYSIS_USE_CLAP:-false} ANALYSIS_NUM_WORKERS: ${ANALYSIS_NUM_WORKERS:-4} ESSENTIA_MODELS_PATH: /app/models ports: - "8001:8000" volumes: # Mount your audio library (read-only) - ${AUDIO_LIBRARY_PATH:-./audio_samples}:/audio:ro # Mount models directory - ./backend/models:/app/models restart: unless-stopped # Frontend (development mode - for production use static build) # frontend: # build: ./frontend # container_name: audio_classifier_ui # environment: # NEXT_PUBLIC_API_URL: http://localhost:8000 # ports: # - "3000:3000" # depends_on: # - backend # restart: unless-stopped volumes: postgres_data: driver: local