跳到正文

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.json
  • callflow-server.config.json
  • callout-server.config.json
  • llm-nlu-server.config.json
  • llm-chat-server.config.json
  • sherpa-asr-online-server.config.json
  • sherpa-tts-server.config.json
  • emotion-analysis-server.config.json

这些文件是部署配置样例。使用时应复制到对应服务实际读取的位置,并根据目标环境校准:

  • 监听地址和端口;
  • 服务间 HTTP / WebSocket 地址和 FreeSWITCH callbackHost
  • PostgreSQL、Redis、Ollama 和 FreeSWITCH ESL 连接;
  • 模型、日志、录音、缓存和媒体文件路径;
  • TTS publicBaseUrl、录音与情绪音频公开地址;
  • callflow-eslbusinessConfig["kb-audio-chat-business"].endpoint 指向 llm-chat-server 的 /api/v1/conversationstrategy 设为已注册的策略 key(样例为 kb-mock), token 与 llm-chat-server 的内部鉴权 token 一致;
  • callflow-esl 的必填 businessConfig["ollama-chat-business"]endpoint / model / requestTimeoutMs;endpoint 必须是目标主机可达的完整 /api/chat 地址,模型必须已在该 Ollama 实例准备好;
  • callflow-eslcallout.calloutServer / nlu / chat 三组 baseUrl / token / requestTimeoutMs;baseUrl 只配置服务基址,API 路径由代码固定追加;
  • 鉴权 token、数据库密码和其他敏感值。
  • callflow-server / callout-serverturn 公网地址、realm 与凭据 TTL;生产 shared secret 通过 CALLFLOW_SERVER_TURN_SHARED_SECRETCALLOUT_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.pemtls/wss.pem 会在源码交付包中原样保留,但两者仅为样例 证书,禁止在生产环境直接复用;必须替换为目标环境自行签发或受信 CA 签发的证书,并保护 私钥文件权限。

sip-ip / rtp-ip 必须绑定主机内网地址,ext-sip-ip / ext-rtp-ip 才填写 SDP 广告的公网地址。当前参考值分别为 192.168.2.198123.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

文档与代码在同一仓库维护,现有 Markdown 是唯一内容源。