230 lines
5.6 KiB
YAML
230 lines
5.6 KiB
YAML
version: '3.8'
|
|
|
|
services:
|
|
# Core processing services
|
|
recorder:
|
|
build:
|
|
context: ./services/recorder
|
|
dockerfile: Dockerfile
|
|
container_name: voice-recorder
|
|
restart: unless-stopped
|
|
environment:
|
|
- DISCORD_TOKEN=${DISCORD_TOKEN}
|
|
- CLIENT_ID=${CLIENT_ID}
|
|
- GUILD_ID=${GUILD_ID}
|
|
- POSTGRES_URL=${POSTGRES_URL}
|
|
- REDIS_URL=redis://redis:6379
|
|
volumes:
|
|
- ./data/audio/raw:/app/audio/raw
|
|
- ./data/logs:/app/logs
|
|
depends_on:
|
|
- postgres
|
|
- redis
|
|
networks:
|
|
- voice-translator
|
|
|
|
audio-processor:
|
|
build:
|
|
context: ./services/audio-processor
|
|
dockerfile: Dockerfile
|
|
container_name: voice-audio-processor
|
|
restart: unless-stopped
|
|
environment:
|
|
- REDIS_URL=redis://redis:6379
|
|
- POSTGRES_URL=${POSTGRES_URL}
|
|
volumes:
|
|
- ./data/audio/raw:/app/audio/raw
|
|
- ./data/audio/processed:/app/audio/processed
|
|
- ./data/logs:/app/logs
|
|
depends_on:
|
|
- redis
|
|
- postgres
|
|
networks:
|
|
- voice-translator
|
|
|
|
whisper-service:
|
|
build:
|
|
context: ./services/whisper-service
|
|
dockerfile: Dockerfile
|
|
container_name: voice-whisper
|
|
restart: unless-stopped
|
|
runtime: nvidia
|
|
environment:
|
|
- NVIDIA_VISIBLE_DEVICES=all
|
|
- REDIS_URL=redis://redis:6379
|
|
- POSTGRES_URL=${POSTGRES_URL}
|
|
- WHISPER_MODEL=${WHISPER_MODEL:-large-v2}
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
count: 1
|
|
capabilities: [gpu]
|
|
volumes:
|
|
- ./data/audio/processed:/app/audio/processed
|
|
- ./data/models:/app/models
|
|
- ./data/logs:/app/logs
|
|
ports:
|
|
- "8001:8000" # No conflict - available
|
|
depends_on:
|
|
- redis
|
|
- postgres
|
|
networks:
|
|
- voice-translator
|
|
|
|
translator:
|
|
build:
|
|
context: ./services/translator
|
|
dockerfile: Dockerfile
|
|
container_name: voice-translator
|
|
restart: unless-stopped
|
|
environment:
|
|
- REDIS_URL=redis://redis:6379
|
|
- POSTGRES_URL=${POSTGRES_URL}
|
|
- GOOGLE_TRANSLATE_API_KEY=${GOOGLE_TRANSLATE_API_KEY}
|
|
- DEEPL_API_KEY=${DEEPL_API_KEY}
|
|
- AZURE_TRANSLATOR_KEY=${AZURE_TRANSLATOR_KEY}
|
|
- AZURE_TRANSLATOR_REGION=${AZURE_TRANSLATOR_REGION}
|
|
volumes:
|
|
- ./data/logs:/app/logs
|
|
ports:
|
|
- "8002:8000" # No conflict - available
|
|
depends_on:
|
|
- redis
|
|
- postgres
|
|
networks:
|
|
- voice-translator
|
|
|
|
transcriber:
|
|
build:
|
|
context: ./services/transcriber
|
|
dockerfile: Dockerfile
|
|
container_name: voice-transcriber
|
|
restart: unless-stopped
|
|
environment:
|
|
- DISCORD_TOKEN=${DISCORD_TOKEN}
|
|
- REDIS_URL=redis://redis:6379
|
|
- POSTGRES_URL=${POSTGRES_URL}
|
|
- WHISPER_SERVICE_URL=http://whisper-service:8000
|
|
- TRANSLATOR_SERVICE_URL=http://translator:8000
|
|
volumes:
|
|
- ./data/logs:/app/logs
|
|
depends_on:
|
|
- postgres
|
|
- redis
|
|
- whisper-service
|
|
- translator
|
|
networks:
|
|
- voice-translator
|
|
|
|
dashboard:
|
|
build:
|
|
context: ./services/dashboard
|
|
dockerfile: Dockerfile
|
|
container_name: voice-dashboard
|
|
restart: unless-stopped
|
|
environment:
|
|
- POSTGRES_URL=${POSTGRES_URL}
|
|
- REDIS_URL=redis://redis:6379
|
|
- NODE_ENV=production
|
|
volumes:
|
|
- ./data/logs:/app/logs
|
|
ports:
|
|
- "3010:3000" # Changed from 3000 to avoid Gitea conflict
|
|
depends_on:
|
|
- postgres
|
|
- redis
|
|
networks:
|
|
- voice-translator
|
|
|
|
# Data services
|
|
postgres:
|
|
image: postgres:15-alpine
|
|
container_name: voice-postgres
|
|
restart: unless-stopped
|
|
environment:
|
|
- POSTGRES_DB=${POSTGRES_DB:-voice_translator}
|
|
- POSTGRES_USER=${POSTGRES_USER:-postgres}
|
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
|
volumes:
|
|
- ./data/database:/var/lib/postgresql/data
|
|
- ./infrastructure/database/init.sql:/docker-entrypoint-initdb.d/init.sql
|
|
ports:
|
|
- "5434:5432" # Changed from 5432 to avoid Excalidraw conflict
|
|
networks:
|
|
- voice-translator
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: voice-redis
|
|
restart: unless-stopped
|
|
command: redis-server --appendonly yes
|
|
volumes:
|
|
- ./data/redis:/data
|
|
- ./infrastructure/redis/redis.conf:/usr/local/etc/redis/redis.conf
|
|
ports:
|
|
- "6379:6379" # No conflict - available
|
|
networks:
|
|
- voice-translator
|
|
|
|
# Optional management services
|
|
nginx:
|
|
image: nginx:alpine
|
|
container_name: voice-nginx
|
|
restart: unless-stopped
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
volumes:
|
|
- ./infrastructure/nginx/nginx.conf:/etc/nginx/nginx.conf
|
|
- ./infrastructure/nginx/ssl:/etc/nginx/ssl
|
|
depends_on:
|
|
- dashboard
|
|
networks:
|
|
- voice-translator
|
|
profiles:
|
|
- proxy
|
|
|
|
# Optional admin interfaces
|
|
pgadmin:
|
|
image: dpage/pgadmin4:latest
|
|
container_name: voice-pgadmin
|
|
restart: unless-stopped
|
|
environment:
|
|
- PGADMIN_DEFAULT_EMAIL=${PGADMIN_EMAIL:-admin@example.com}
|
|
- PGADMIN_DEFAULT_PASSWORD=${PGADMIN_PASSWORD}
|
|
ports:
|
|
- "8085:80" # Changed from 8080 to avoid Owncast conflict
|
|
depends_on:
|
|
- postgres
|
|
networks:
|
|
- voice-translator
|
|
profiles:
|
|
- admin
|
|
|
|
redis-commander:
|
|
image: rediscommander/redis-commander:latest
|
|
container_name: voice-redis-commander
|
|
restart: unless-stopped
|
|
environment:
|
|
- REDIS_HOSTS=local:redis:6379
|
|
ports:
|
|
- "8086:8081" # Changed from 8081 to avoid Restreamer conflict
|
|
depends_on:
|
|
- redis
|
|
networks:
|
|
- voice-translator
|
|
profiles:
|
|
- admin
|
|
|
|
networks:
|
|
voice-translator:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
postgres_data:
|
|
redis_data:
|
|
audio_data:
|
|
model_cache:
|