68c3731c65
Adds a lightweight HTTP token server (port 8080) alongside the voice pipeline so web clients can obtain LiveKit access tokens without a separate service. Adds fastapi and uvicorn to requirements. Adds LIVEKIT_PUBLIC_URL env var (wss://voice.hobbs.farm) to docker-compose so tokens carry the correct public WebSocket URL for browser clients. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
129 lines
3.0 KiB
YAML
Executable File
129 lines
3.0 KiB
YAML
Executable File
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
|