跳到正文

Apps 与 ONNX 源码发布包装配

scripts/package-release.ps1 是源码交付工具,不构建也不收录预构建产物。它按项目类别 生成彼此独立的 Apps 包和 ONNX 包;只选择一类项目时生成一个包,混合选择或选择 all 时生成两个包。

运行约束

  • 不要求 Git 工作区 clean,也不校验打包期间的 Git 状态;未提交修改会按磁盘上的当前内容 进入归档。位于 Git 仓库时 commit 只用于版本标识,非 Git 目录使用 nogit
  • 输出目录默认为当前用户的 Downloads/Temp,可用 -OutputDir 覆盖。
  • zip 是默认格式;仅 -Format targz 需要 PATH 中存在 tar
  • 项目、共享资产或必需文件缺失时立即失败。选择 all 时还会核对 apps/*/package.json,任何未登记到 Catalog 的新应用都会阻止打包。

常用示例:

powershell
./scripts/package-release.ps1 -Projects all -NoModels -NoThirdParty
./scripts/package-release.ps1 -Projects callflow-esl,asr,tts
./scripts/package-release.ps1 -Projects asr -Format targz
./scripts/package-release.ps1 -Projects callout-webpage

接口保持为:-Projects 选择项目,-OutputDir 指定输出目录,-Format zip|targz 选择 格式,-NoModels / -NoThirdParty 控制 ONNX 大型资产,-KeepStaging 保留暂存和解包 验证目录用于调试。

Apps 包资产映射

Apps 包始终包含完整根 docs/、仓库根运行文件和所选的 apps/<项目>。部署资产按项目 精确加入:

所选项目额外资产
callflow-esldeploy/config/callflow-esl.config.json、完整 deploy/freeswitch/
callflow-serverdeploy/config/callflow-server.config.json、完整 FreeSWITCH 树、deploy/coturn/、软电话 ICE/TURN 指南
callflow-webpagedeploy/coturn/、软电话 ICE/TURN 指南、完整 deploy/softphone-test/(排除 chrome-user-data/)、apps/docs-site/public/downloads/ 演示工具
callout-serverdeploy/config/callout-server.config.json、完整 FreeSWITCH 树、deploy/coturn/、软电话 ICE/TURN 指南
callout-webpagedeploy/coturn/、软电话 ICE/TURN 指南、完整 deploy/softphone-test/(排除 chrome-user-data/)、apps/docs-site/public/downloads/ 演示工具
llm-nlu-serverdeploy/config/llm-nlu-server.config.json
llm-chat-serverdeploy/config/llm-chat-server.config.json
两个云语音网关当前没有对应 deploy/config 文件,不额外加入部署配置

只要加入任一 deploy/ 资产,包内也会包含 deploy/README.md。多个项目选择产生的资产会 去重,不会顺带加入未选择的 Apps 项目。

deploy/softphone-test/.gitignore 会随网页项目进入归档,便于部署后直接运行测试工具; deploy/softphone-test/chrome-user-data/ 是固定排除目录,本地 Chrome 会话、缓存和凭据不会进入发布包。 apps/docs-site/public/downloads/ 同时带入文档站可下载的 PowerShell 脚本和预配置 MicroSIP 演示包;软件包 只用于公网演示环境,不应作为生产 SIP 配置使用。

完整 FreeSWITCH 树会原样保留 deploy/freeswitch/tls/dtls-srtp.pemwss.pem。 这两份 PEM 只是样例证书,用于保留参考树的完整结构,禁止在生产环境直接复用;部署时必须 换成目标环境自行签发或受信 CA 签发的证书,并保护私钥权限。

ONNX 包资产映射

ONNX 包只包含所选本地 AI 服务及公共源码资产,不包含 Apps 项目或仓库根文件。选择任一 ONNX 服务都会加入:

  • common/README.mdrun-server.mjs.gitignore
  • Dockerfile.ubuntu22Dockerfile.debian12Dockerfile.debian13
  • 默认加入 models/;使用 -NoModels 时排除;
  • 默认加入 onnxruntime/sherpa-onnx/;使用 -NoThirdParty 时排除。

ONNX 包不会自动加入 sherpa-demo、稳定性测试、构建目录或未选择的服务。

包名与目录结构

单项目和组合包名保持以下形式:

text
ai-voice-platform-apps-<项目>-<时间>-<commit>.zip
ai-voice-platform-onnx-<项目>-<时间>-<commit>.zip
ai-voice-platform-apps-custom-<数量>projects-<时间>-<commit>.zip
ai-voice-platform-onnx-custom-<数量>projects-<时间>-<commit>.zip

使用 -Format targz 时扩展名为 .tar.gz,顶层结构不变。Apps 包的唯一顶层目录使用不带 时间与 commit 的包名;ONNX 包的唯一顶层目录固定为 onnx-platform/

text
ai-voice-platform-apps-callflow-esl/
├── apps/callflow-esl/
├── deploy/
├── docs/
├── package.json
├── PACKAGE-ASSEMBLY.md
├── PACKAGE-INFO.txt
└── PACKAGE-CONTENTS.sha256

onnx-platform/
├── sherpa-asr-online-server/       # 仅选择 asr 时
├── sherpa-tts-server/              # 仅选择 tts 时
├── emotion-analysis-server/        # 仅选择 emotion 时
├── common/
├── models/                         # -NoModels 时不存在
├── onnxruntime/                    # -NoThirdParty 时不存在
├── sherpa-onnx/                    # -NoThirdParty 时不存在
├── Dockerfile.ubuntu22
├── Dockerfile.debian12
├── Dockerfile.debian13
├── PACKAGE-INFO.txt
└── PACKAGE-CONTENTS.sha256

完整性与排除项

每个包同时生成三类可核验信息:

  • PACKAGE-INFO.txt:所选项目、可用时的 commit、包含和排除项、模型/SDK 状态、样例 证书风险;
  • PACKAGE-CONTENTS.sha256:包内除该清单自身外,每个文件的 SHA-256;
  • <archive>.sha256:与归档同目录,记录归档文件本身的 SHA-256。

压缩完成后脚本会重新解包,验证唯一顶层目录、所选项目、共享资产、三份包内清单、禁止 路径和逐文件哈希。固定排除 node_modulesbuildtargetdist.quasarout、 日志、缓存、Git/IDE 元数据、环境文件,以及 public/wavrecordings 等运行生成音频。

可在交付端复核外部哈希:

powershell
Get-FileHash ./ai-voice-platform-apps-callflow-esl-*.zip -Algorithm SHA256

Linux 可在解压后的顶层目录复核逐文件清单:

bash
sha256sum -c PACKAGE-CONTENTS.sha256

装配步骤

  1. 先解压 Apps 包,进入其唯一顶层目录。
  2. 将 ONNX 包直接解压到这个目录,不要预先创建 onnx-platform,也不要移动包内文件。
  3. 确认项目根目录下存在 apps/package.json 和装配得到的 onnx-platform/
  4. 阅读两个包的 PACKAGE-INFO.txt,并复核包内、包外 SHA-256。

如果只交付 Apps 或只交付 ONNX 服务,可以单独使用对应包。

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