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端口。
- ONNX 语音计算域:
- 阿里云公网主机 (
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.toml2. 构建与部署产物分发
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 ps3.2 FRP 穿透隧道映射清单 (WSL ➔ 阿里云)
| 隧道名称 | 本地端口 | 阿里云回环端口 | 目标服务说明 |
|---|---|---|---|
mysql | 127.0.0.1:3306 | 12000 | MySQL 数据库 |
redis | 127.0.0.1:6379 | 12001 | Redis 缓存与分布式锁 |
minio-api | 127.0.0.1:1280 | 12002 | MinIO 对象存储 API |
minio-console | 127.0.0.1:1281 | 12003 | MinIO 管理控制台 |
postgres | 127.0.0.1:5432 | 12004 | PostgreSQL 核心数据库 |
tts | 127.0.0.1:29080 | 12008 | Sherpa TTS 语音合成服务 |
emotion | 127.0.0.1:29090 | 12009 | 情绪分析 API |
asr | 127.0.0.1:20096 | 12010 | Sherpa ASR 流式识别 WebSocket |
callflow-api | 127.0.0.1:29913 | 12011 | callflow-server 业务 API |
callout-api | 127.0.0.1:29920 | 12012 | callout-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