跳到正文

WSL /data/ai-voice 部署与运行手册 ​

该目录保存 AI Voice 平台在 WSL Ubuntu 宿主机 /data/ai-voice 目录下的 ONNX 语音服务、两个应用服务端(callflow-server、callout-server,其中 callout-server 原生内嵌 AI 策略中台)、基础数据服务及 FRPC 反向穿透的完整部署与运行说明。这里描述的是运行产物与部署资产的构建、分发和编排。

1. 架构定位与目录布局 ​

在 WSL + 阿里云双主机混合部署架构中:

  • WSL 本地部署目录:/data/ai-voice
    • ONNX 语音计算域:sherpa-asr-server (统一 Rust 流式+离线 ASR 服务,端口 20096 / 10096 与 20095 / 10095)、sherpa-tts-server (端口 29080 / 9080)、emotion-analysis-server (端口 29090 / 9090) 及 models/ 运行时模型库。
    • 两个应用服务端:callflow-server (端口 29913 / 9913)、callout-server (端口 29920 / 9920,原生内嵌 NLU / Chat SSE / Script 仿真等 AI 策略中台能力)。
    • 数据基础底座:Docker 容器运行 PostgreSQL 15 (5432)、Redis 7.2 (6379)、MySQL 8.0 (3306)、MinIO (1280/1281)。
    • FRP 客户端 (frpc):建立至阿里云公网服务器 (123.57.205.60:7000) 的加密隧道,将本地服务映射到阿里云本地回环 12000~12004 与 12008~12012 端口。
  • 阿里云公网主机 (ssh aliyun):托管 Web 前端静态站点 (callflow-webpage 与 callout-webpage),运行 callflow-esl 业务编排服务、Nginx (HTTPS/WSS 终结与反代)、coTURN (3478) 及已有的 FreeSWITCH 软交换中心。

目录结构 (/data/ai-voice) ​

text
/data/ai-voice/
├── Dockerfile                      # 基础运行环境镜像定义 (ai-voice-runtime:latest)
├── build-image.sh                  # 镜像构建脚本
├── docker-compose.yml              # 5 个业务与语音容器 + 1 个 FRPC 容器编排
├── frpc.toml                       # FRP 穿透客户端配置
├── models/                         # 运行时模型资产挂载目录
│   ├── sherpa-onnx-streaming-zipformer-zh/
│   ├── sherpa-onnx-sense-voice/
│   ├── matcha-icefall-zh-en/
│   ├── silero-vad/
│   ├── emotion-text/
│   └── emotion-audio/
├── callflow-server/                # callflow-server 二进制与 config.toml
├── callout-server/                 # callout-server 二进制与 config.toml
├── sherpa-asr-server/              # sherpa-asr-server (Rust) 二进制与 config.toml
├── sherpa-tts-server/              # sherpa-tts-server 二进制与 config.toml
└── emotion-analysis-server/        # emotion-analysis-server 二进制与 config.toml

2. 构建与部署产物分发 ​

2.1 构建 Linux x64 二进制产物 ​

从代码仓库根目录分别构建应用与 ONNX 服务:

bash
# 1. 构建两个 Bun 服务端 Linux x64 独立可执行文件
bun run --cwd apps/callflow-server build:linux
bun run --cwd apps/callout-server build:linux

# 2. 在 Docker 跨环境编译链中构建全部 ONNX Rust 语音服务 (与 debian:trixie 运行时严格对齐)
# Windows 宿主机:
pwsh onnx-platform/build-linux-docker.ps1
# 或 Linux / WSL 宿主机:
bash onnx-platform/build-linux-docker.sh
# 或在根目录执行快捷命令:
bun run onnx:build:linux:docker

# 说明:
# 构建容器基于 debian:trixie(onnx-platform/Dockerfile.builder),内置 Rust 工具链并挂载 Cargo 具名卷缓存;
# 全量编译并自动将产物与运行依赖装配至各服务的 dist/linux_x64/,从根源杜绝宿主机 glibc 符号飘移问题。

2.2 同步产物与配置至 /data/ai-voice ​

bash
# 创建目录层级
mkdir -p /data/ai-voice/{callflow-server,callout-server,sherpa-asr-server,sherpa-tts-server,emotion-analysis-server,models}

# 复制服务端 Linux x64 交付目录(包含可执行文件与随包配置)
cp -a apps/callflow-server/dist/linux_x64/. /data/ai-voice/callflow-server/
cp deploy/wsl-docker/configs/callflow-server.toml /data/ai-voice/callflow-server/config.toml

cp -a apps/callout-server/dist/linux_x64/. /data/ai-voice/callout-server/
cp deploy/wsl-docker/configs/callout-server.toml /data/ai-voice/callout-server/config.toml

# 复制 ONNX 服务自包含 Linux x64 交付目录,再用部署配置覆盖随包默认配置
# Compose 将这些宿主目录完整挂载为各容器的工作目录;ASR/TTS/Emotion 另挂载共享 models/。
cp -a onnx-platform/sherpa-asr-server/dist/linux_x64/. /data/ai-voice/sherpa-asr-server/
cp deploy/wsl-docker/configs/sherpa-asr-server.toml /data/ai-voice/sherpa-asr-server/config.toml

cp -a onnx-platform/sherpa-tts-server/dist/linux_x64/. /data/ai-voice/sherpa-tts-server/
cp deploy/wsl-docker/configs/sherpa-tts-server.toml /data/ai-voice/sherpa-tts-server/config.toml

cp -a onnx-platform/emotion-analysis-server/dist/linux_x64/. /data/ai-voice/emotion-analysis-server/
cp deploy/wsl-docker/configs/emotion-analysis-server.toml /data/ai-voice/emotion-analysis-server/config.toml


# 同步模型资产(方式 1:从本地工作区复制)
cp -r onnx-platform/models/* /data/ai-voice/models/
# 或通过 uv 直接从 ModelScope 高速拉取(方式 2:推荐服务器部署环境):
# uv run --directory onnx-platform/models/model-down download.py --model-id wlf213/ai-voice-platform-models --target-dir /data/ai-voice/models

# 部署 Dockerfile、Compose 与 FRPC 配置
cp deploy/wsl-docker/Dockerfile /data/ai-voice/
cp deploy/wsl-docker/build-image.sh /data/ai-voice/
cp deploy/wsl-docker/docker-compose.yml /data/ai-voice/
cp deploy/wsl-docker/frpc/frpc.toml /data/ai-voice/

注意(Clash Verge / Mihomo 用户):若宿主机开启了 TUN 模式,需在 Clash Verge 的 TUN 配置中增加 route-exclude-address: [123.57.205.60/32],将阿里云服务器 IP 排除在 TUN 接管之外,确保 WSL 镜像网络直连阿里云 FRPS,无需任何特殊路由脚本。


3. 运行与验证 ​

3.1 构建基础镜像并启动集群 ​

bash
cd /data/ai-voice

# 首次或 Dockerfile 变更时构建镜像
chmod +x build-image.sh
./build-image.sh

# 启动微服务集群与 FRPC
docker compose up -d

# 检查容器运行状态
docker compose ps

3.2 FRP 穿透隧道映射清单 (WSL ➔ 阿里云) ​

隧道名称本地端口阿里云回环端口目标服务说明
mysql127.0.0.1:330612000MySQL 数据库
redis127.0.0.1:637912001Redis 缓存与分布式锁
minio-api127.0.0.1:128012002MinIO 对象存储 API
minio-console127.0.0.1:128112003MinIO 管理控制台
postgres127.0.0.1:543212004PostgreSQL 核心数据库
tts127.0.0.1:2908012008Sherpa TTS 语音合成服务
emotion127.0.0.1:2909012009情绪分析 API
asr127.0.0.1:2009612010Sherpa ASR 流式识别 WebSocket
callflow-api127.0.0.1:2991312011callflow-server 业务 API
callout-api127.0.0.1:2992012012callout-server 业务 API (含内嵌 AI 策略中台)

3.3 健康状态验证 ​

bash
# 验证 FRPC 穿透日志
docker logs aivoice-frpc --tail 20

# 本地服务探测
curl http://127.0.0.1:20096/health  # ASR
curl http://127.0.0.1:29080/health  # TTS
curl http://127.0.0.1:29090/health  # Emotion
curl http://127.0.0.1:29913/health  # callflow-server
curl http://127.0.0.1:29920/health  # callout-server

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