services: # LiveKit WebRTC Server livekit-server: image: livekit/livekit-server:latest container_name: voicecoach-livekit restart: unless-stopped command: - --config - /etc/livekit/livekit.yaml - --keys - "${LIVEKIT_API_KEY}: ${LIVEKIT_API_SECRET}" ports: - "7880:7880" - "7881:7881" - "50000-50100:50000-50100/udp" volumes: - ./livekit/livekit.yaml:/etc/livekit/livekit.yaml:ro networks: - voicecoach mem_limit: 512M labels: - "com.centurylinklabs.watchtower.enable=false" logging: driver: "json-file" options: max-size: "50m" max-file: "3" # SpeechBrain Emotion Analysis (internal only) speechbrain-service: build: context: ./speechbrain-service image: voicecoach-speechbrain:latest container_name: voicecoach-speechbrain restart: unless-stopped volumes: - /mnt/docker-data/configs/voicecoach/speechbrain-models:/app/models environment: - MODEL_DIR=/app/models networks: - voicecoach mem_limit: 3G memswap_limit: 3G labels: - "com.centurylinklabs.watchtower.enable=false" logging: driver: "json-file" options: max-size: "50m" max-file: "3" # Piper TTS (internal only) piper-tts: build: context: ./piper-service image: voicecoach-piper:latest container_name: voicecoach-piper restart: unless-stopped environment: - PIPER_MODEL=/app/models/en_US-lessac-medium.onnx networks: - voicecoach mem_limit: 512M labels: - "com.centurylinklabs.watchtower.enable=false" logging: driver: "json-file" options: max-size: "50m" max-file: "3" # Pipecat Voice Pipeline Agent pipecat-agent: build: context: ./pipecat-agent image: voicecoach-pipecat:latest container_name: voicecoach-pipecat restart: unless-stopped env_file: - .env environment: - LIVEKIT_URL=ws://livekit-server:7880 - SPEECHBRAIN_SERVICE_URL=http://speechbrain-service:8001 - PIPER_SERVICE_URL=http://piper-tts:8003 - WHISPER_MODEL=medium - LIVEKIT_PUBLIC_URL=wss://voice.hobbs.farm depends_on: - livekit-server - speechbrain-service - piper-tts networks: - voicecoach mem_limit: 3G memswap_limit: 3G labels: - "com.centurylinklabs.watchtower.enable=false" logging: driver: "json-file" options: max-size: "50m" max-file: "3" # Web Client (phone interface) voicecoach-web: build: context: ./web-client image: voicecoach-web:latest container_name: voicecoach-web restart: unless-stopped ports: - "8085:80" depends_on: - pipecat-agent networks: - voicecoach mem_limit: 128M labels: - "com.centurylinklabs.watchtower.enable=false" logging: driver: "json-file" options: max-size: "10m" max-file: "3" networks: voicecoach: driver: bridge