fix: use host networking for voice services to eliminate docker-proxy overhead
Bridge mode created 600+ docker-proxy processes for LiveKit's UDP port-range mappings (30000-30100, 50000-50200). Switch livekit-server, voice-agent, and voice-service to network_mode: host for zero-overhead networking. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
186234bae2
commit
68ee2516d5
|
|
@ -312,17 +312,15 @@ services:
|
||||||
- it0-network
|
- it0-network
|
||||||
|
|
||||||
# ===== LiveKit Infrastructure =====
|
# ===== LiveKit Infrastructure =====
|
||||||
|
# NOTE: livekit-server, voice-agent, voice-service use host networking
|
||||||
|
# to eliminate docker-proxy overhead for real-time audio (WebRTC UDP).
|
||||||
|
# Bridge mode created 600+ docker-proxy processes for port-range mappings.
|
||||||
livekit-server:
|
livekit-server:
|
||||||
image: livekit/livekit-server:latest
|
image: livekit/livekit-server:latest
|
||||||
container_name: it0-livekit-server
|
container_name: it0-livekit-server
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
network_mode: host
|
||||||
command: --config /etc/livekit.yaml
|
command: --config /etc/livekit.yaml
|
||||||
ports:
|
|
||||||
- "17880:7880"
|
|
||||||
- "17881:7881"
|
|
||||||
- "3478:3478/udp"
|
|
||||||
- "30000-30100:30000-30100/udp"
|
|
||||||
- "50000-50200:50000-50200/udp"
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./livekit.yaml:/etc/livekit.yaml:ro
|
- ./livekit.yaml:/etc/livekit.yaml:ro
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|
@ -330,22 +328,21 @@ services:
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 3
|
retries: 3
|
||||||
networks:
|
|
||||||
- it0-network
|
|
||||||
|
|
||||||
voice-agent:
|
voice-agent:
|
||||||
build:
|
build:
|
||||||
context: ../../packages/services/voice-agent
|
context: ../../packages/services/voice-agent
|
||||||
container_name: it0-voice-agent
|
container_name: it0-voice-agent
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
network_mode: host
|
||||||
volumes:
|
volumes:
|
||||||
- ../../data/voice-models/huggingface:/root/.cache/huggingface
|
- ../../data/voice-models/huggingface:/root/.cache/huggingface
|
||||||
- ../../data/voice-models/torch-hub:/root/.cache/torch/hub
|
- ../../data/voice-models/torch-hub:/root/.cache/torch/hub
|
||||||
environment:
|
environment:
|
||||||
- LIVEKIT_URL=ws://livekit-server:7880
|
- LIVEKIT_URL=ws://127.0.0.1:7880
|
||||||
- LIVEKIT_API_KEY=devkey
|
- LIVEKIT_API_KEY=devkey
|
||||||
- LIVEKIT_API_SECRET=devsecret
|
- LIVEKIT_API_SECRET=devsecret
|
||||||
- AGENT_SERVICE_URL=http://agent-service:3002
|
- AGENT_SERVICE_URL=http://127.0.0.1:13002
|
||||||
- STT_PROVIDER=${STT_PROVIDER:-local}
|
- STT_PROVIDER=${STT_PROVIDER:-local}
|
||||||
- TTS_PROVIDER=${TTS_PROVIDER:-local}
|
- TTS_PROVIDER=${TTS_PROVIDER:-local}
|
||||||
- WHISPER_MODEL=${WHISPER_MODEL:-base}
|
- WHISPER_MODEL=${WHISPER_MODEL:-base}
|
||||||
|
|
@ -362,24 +359,21 @@ services:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
agent-service:
|
agent-service:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
networks:
|
|
||||||
- it0-network
|
|
||||||
|
|
||||||
# ===== Voice Service (legacy WebSocket + Twilio) =====
|
# ===== Voice Service (LiveKit token + Twilio) =====
|
||||||
voice-service:
|
voice-service:
|
||||||
build:
|
build:
|
||||||
context: ../../packages/services/voice-service
|
context: ../../packages/services/voice-service
|
||||||
container_name: it0-voice-service
|
container_name: it0-voice-service
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
network_mode: host
|
||||||
- "13008:3008"
|
|
||||||
volumes:
|
volumes:
|
||||||
- ../../data/voice-models/huggingface:/root/.cache/huggingface
|
- ../../data/voice-models/huggingface:/root/.cache/huggingface
|
||||||
- ../../data/voice-models/torch-hub:/root/.cache/torch/hub
|
- ../../data/voice-models/torch-hub:/root/.cache/torch/hub
|
||||||
environment:
|
environment:
|
||||||
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
|
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
|
||||||
- ANTHROPIC_BASE_URL=${ANTHROPIC_BASE_URL}
|
- ANTHROPIC_BASE_URL=${ANTHROPIC_BASE_URL}
|
||||||
- AGENT_SERVICE_URL=http://agent-service:3002
|
- AGENT_SERVICE_URL=http://127.0.0.1:13002
|
||||||
- WHISPER_MODEL=${WHISPER_MODEL:-base}
|
- WHISPER_MODEL=${WHISPER_MODEL:-base}
|
||||||
- KOKORO_MODEL=${KOKORO_MODEL:-kokoro-82m}
|
- KOKORO_MODEL=${KOKORO_MODEL:-kokoro-82m}
|
||||||
- KOKORO_VOICE=${KOKORO_VOICE:-zf_xiaoxiao}
|
- KOKORO_VOICE=${KOKORO_VOICE:-zf_xiaoxiao}
|
||||||
|
|
@ -393,7 +387,7 @@ services:
|
||||||
- OPENAI_TTS_VOICE=${OPENAI_TTS_VOICE:-coral}
|
- OPENAI_TTS_VOICE=${OPENAI_TTS_VOICE:-coral}
|
||||||
- LIVEKIT_API_KEY=devkey
|
- LIVEKIT_API_KEY=devkey
|
||||||
- LIVEKIT_API_SECRET=devsecret
|
- LIVEKIT_API_SECRET=devsecret
|
||||||
- LIVEKIT_WS_URL=ws://154.84.135.121:17880
|
- LIVEKIT_WS_URL=ws://154.84.135.121:7880
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "python3 -c \"import urllib.request; urllib.request.urlopen('http://localhost:3008/docs')\""]
|
test: ["CMD-SHELL", "python3 -c \"import urllib.request; urllib.request.urlopen('http://localhost:3008/docs')\""]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
|
|
@ -402,8 +396,6 @@ services:
|
||||||
start_period: 120s
|
start_period: 120s
|
||||||
depends_on:
|
depends_on:
|
||||||
- agent-service
|
- agent-service
|
||||||
networks:
|
|
||||||
- it0-network
|
|
||||||
|
|
||||||
# ===== Frontend =====
|
# ===== Frontend =====
|
||||||
web-admin:
|
web-admin:
|
||||||
|
|
|
||||||
|
|
@ -16,14 +16,14 @@ class AppConfig {
|
||||||
factory AppConfig.development() => const AppConfig(
|
factory AppConfig.development() => const AppConfig(
|
||||||
apiBaseUrl: 'http://10.0.2.2:18000',
|
apiBaseUrl: 'http://10.0.2.2:18000',
|
||||||
wsBaseUrl: 'ws://10.0.2.2:18000',
|
wsBaseUrl: 'ws://10.0.2.2:18000',
|
||||||
livekitUrl: 'ws://10.0.2.2:17880',
|
livekitUrl: 'ws://10.0.2.2:7880',
|
||||||
environment: 'development',
|
environment: 'development',
|
||||||
);
|
);
|
||||||
|
|
||||||
factory AppConfig.production() => const AppConfig(
|
factory AppConfig.production() => const AppConfig(
|
||||||
apiBaseUrl: 'http://154.84.135.121:18000',
|
apiBaseUrl: 'http://154.84.135.121:18000',
|
||||||
wsBaseUrl: 'ws://154.84.135.121:18000',
|
wsBaseUrl: 'ws://154.84.135.121:18000',
|
||||||
livekitUrl: 'ws://154.84.135.121:17880',
|
livekitUrl: 'ws://154.84.135.121:7880',
|
||||||
environment: 'production',
|
environment: 'production',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue