feat: add customer portal and RTC voice diagnostics

This commit is contained in:
Codex Local
2026-08-27 21:02:37 +08:00
parent 5ff1961d79
commit d97bbf7cf5
18 changed files with 4045 additions and 169 deletions
+4 -1
View File
@@ -11,12 +11,15 @@ services:
worker:
environment:
VOICE_PROVIDER: volcengine
# StartVoiceChat must use the same real RTC AppId as the API token issuer.
RTC_APP_ID: ${RTC_APP_ID}
VOLC_ACCESS_KEY_ID: ""
VOLC_ACCESS_KEY_ID_FILE: /run/secrets/local-rtc/volc-access-key-id
VOLC_SECRET_ACCESS_KEY: ""
VOLC_SECRET_ACCESS_KEY_FILE: /run/secrets/local-rtc/volc-secret-access-key
VOLC_RTC_REGION: cn-north-1
VOLC_RTC_API_VERSION: 2024-12-01
# Quote date-shaped API versions so YAML does not coerce them into timestamps.
VOLC_RTC_API_VERSION: "2024-12-01"
VOLC_VOICE_CHAT_TEMPLATE_FILE: /run/secrets/local-rtc/voice-chat-template.json
volumes:
- ./deploy/local-rtc/runtime/volc-access-key-id:/run/secrets/local-rtc/volc-access-key-id:ro
+4 -1
View File
@@ -32,7 +32,10 @@ server {
add_header X-Frame-Options "DENY" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), geolocation=(), microphone=()" always;
add_header Content-Security-Policy "default-src 'self'; connect-src 'self' https: http://localhost:*; img-src 'self' data: blob: https:; media-src 'self' blob: https: http://localhost:*; style-src 'self'; script-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self' https: http://localhost:*" always;
# Ant Design v6 generates component styles at runtime and also relies on
# safe element-level layout styles. Scripts remain restricted to self;
# only CSS is allowed inline.
add_header Content-Security-Policy "default-src 'self'; connect-src 'self' https: http://localhost:*; img-src 'self' data: blob: https:; media-src 'self' blob: https: http://localhost:*; style-src 'self' 'unsafe-inline'; script-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self' https: http://localhost:*" always;
}
location = /runtime-config.js {