外观
deploy 部署参考与测试工具说明
deploy/ 保存可供部署时参考和复制的配置,以及部署后测试工具,不是一体化部署包。
text
deploy/
├── config/ # 自研服务部署配置样例
├── coturn/ # 公网 TURN 配置参考(不含真实 shared secret)
├── docs-site/ # VitePress 文档站 Nginx、HTTPS、发布与回滚说明
├── freeswitch/ # FreeSWITCH 配置树
├── softphone-test/ # 浏览器软电话部署后测试工具
└── softphone-webrtc-ice-turn-guide.md # 5G 软电话媒体穿透手册仓库不在此目录提供容器镜像、Dockerfile、Docker Compose 编排、部署产物、依赖安装、 数据库初始化、一键启停、进程守护、升级或回滚脚本。
docs-site
docs-site/README.md 说明如何将 apps/docs-site 构建为静态文件,按 版本目录发布到 Nginx,并把 ai-voice.wangijun.com 加入现有 HTTPS 证书。文档站不需要 常驻 Bun/Node 进程,也不与应用服务或 ONNX 服务共用启停流程。
config
config/ 当前包含:
callflow-esl.config.jsoncallflow-server.config.jsoncallout-server.config.jsonllm-nlu-server.config.jsonllm-chat-server.config.jsonsherpa-asr-online-server.config.jsonsherpa-tts-server.config.jsonemotion-analysis-server.config.json
这些文件是部署配置样例。使用时应复制到对应服务实际读取的位置,并根据目标环境校准:
- 监听地址和端口;
- 服务间 HTTP / WebSocket 地址和 FreeSWITCH
callbackHost; - PostgreSQL、Redis、Ollama 和 FreeSWITCH ESL 连接;
- 模型、日志、录音、缓存和媒体文件路径;
- TTS
publicBaseUrl、录音与情绪音频公开地址; callflow-esl的businessConfig["kb-audio-chat-business"].endpoint指向 llm-chat-server 的/api/v1/conversation,strategy设为已注册的策略 key(样例为kb-mock),token与 llm-chat-server 的内部鉴权 token 一致;callflow-esl的必填businessConfig["ollama-chat-business"]中endpoint / model / requestTimeoutMs;endpoint 必须是目标主机可达的完整/api/chat地址,模型必须已在该 Ollama 实例准备好;callflow-esl的callout.calloutServer / nlu / chat三组baseUrl / token / requestTimeoutMs;baseUrl 只配置服务基址,API 路径由代码固定追加;- 鉴权 token、数据库密码和其他敏感值。
callflow-server/callout-server的turn公网地址、realm 与凭据 TTL;生产 shared secret 通过CALLFLOW_SERVER_TURN_SHARED_SECRET、CALLOUT_TURN_SHARED_SECRET或服务器私有配置注入,不写入仓库样例。
样例中的相对路径和地址可能只适合原部署目录,不保证复制后直接可用。callflow-esl 的 callout token 当前保存在 JSON;生产部署必须替换示例值并限制配置文件权限。其他生产凭据 优先通过环境变量或运维密钥系统注入,不要写回仓库。
freeswitch
freeswitch/ 是 FreeSWITCH 配置参考树,包括 autoload_configs/、dialplan/、directory/、 sip_profiles/、会议、语言和 TLS 等配置。
部署前先备份目标 FreeSWITCH 的 conf_dir,再按现场需求逐项合并。尤其要复核 SIP 网关与分机、 公网地址、RTP 范围、ESL 密码与 ACL、outbound socket 地址以及 TLS 证书;不要直接覆盖生产环境 已有配置。tls/dtls-srtp.pem 与 tls/wss.pem 会在源码交付包中原样保留,但两者仅为样例 证书,禁止在生产环境直接复用;必须替换为目标环境自行签发或受信 CA 签发的证书,并保护 私钥文件权限。
sip-ip / rtp-ip 必须绑定主机内网地址,ext-sip-ip / ext-rtp-ip 才填写 SDP 广告的公网地址。当前参考值分别为 192.168.2.198 和 123.57.205.60,FreeSWITCH RTP 使用 30000–30199/UDP。
coturn
coturn/README.md 给出 Debian 12 公网主机的安装、权限、防火墙、启动、 鉴权验收和回滚步骤。coturn/turnserver.conf.example 用于 直接部署在公网主机 aliyun:监听 3478/TCP+UDP,relay 使用 31000–31040/UDP。TURN 不经过 FRP;FRP 只承载 SIP WebSocket 与 FreeSWITCH RTP 映射。复制样例后必须替换 static-auth-secret,并确保它与 两个应用后端的 shared secret 完全一致。
5G 软电话的跨组件拓扑、FreeSWITCH/FRP 配置,以及从 ICE 协商失败、接通无声到双向音频 恢复的排查方法见 softphone-webrtc-ice-turn-guide.md。
softphone-test
softphone-test/start-chrome-softphone.ps1 使用独立 Chrome 用户目录打开 callflow 与 callout 软电话页,适合公网演示和部署后联调。从仓库或发布包根目录运行:
powershell
./deploy/softphone-test/start-chrome-softphone.ps1也可通过 -PublicHost、-CallflowWebPort、-CalloutWebPort 指向目标环境。脚本首次运行会 创建同目录下的 chrome-user-data/;该目录仅保存本机浏览器状态,已被局部 .gitignore 忽略,源码发布包也会固定排除。完整用法与安全注意事项见 ../docs/demo.md。
完整部署检查项见 ../docs/deployment-debian12.md,本地启动和 健康检查见 ../docs/setup-deployment.md。