services: db: image: postgres:16-alpine environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: openccb ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data studio: build: context: . dockerfile: web/studio/Dockerfile ports: - "3000:3000" - "3001:3001" environment: DATABASE_URL: postgresql://user:password@db:5432/openccb_cms JWT_SECRET: openccb_secret_key_2025_production NEXT_PUBLIC_CMS_API_URL: http://localhost:3001 LMS_INTERNAL_URL: http://experience:3002 LOCAL_WHISPER_URL: http://whisper:8000 volumes: - uploads_data:/app/uploads env_file: .env extra_hosts: - "host.docker.internal:host-gateway" depends_on: - db experience: build: context: . dockerfile: web/experience/Dockerfile ports: - "3003:3003" - "3002:3002" environment: DATABASE_URL: postgresql://user:password@db:5432/openccb_lms JWT_SECRET: openccb_secret_key_2025_production NEXT_PUBLIC_LMS_API_URL: http://localhost:3002 env_file: .env depends_on: - db whisper: image: ${WHISPER_IMAGE:-fedirz/faster-whisper-server:latest-cpu} ports: - "8000:8000" volumes: - whisper_cache:/root/.cache/huggingface environment: - DEVICE=${WHISPER_DEVICE:-cpu} # GPU support for RTX 2070 Super deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [ gpu ] e2e: build: context: ./e2e environment: - STUDIO_URL=http://studio:3000 - EXPERIENCE_URL=http://experience:3003 depends_on: - studio - experience volumes: - ./e2e/tests:/e2e/tests - ./e2e/playwright-report:/e2e/playwright-report profiles: [ "test" ] volumes: postgres_data: uploads_data: whisper_cache: