Docker-compose怎么写?提供yaml模板一键启动服务
🎙️ Sambert-HifiGan 中文多情感语音合成服务 (WebUI + API)
📖 项目简介
本镜像基于 ModelScope 经典的Sambert-HifiGan(中文多情感)模型构建,提供高质量、端到端的中文语音合成能力。通过集成Flask WebUI,用户可直接在浏览器中输入文本,在线合成并播放语音,支持多种情感表达,适用于智能客服、有声阅读、虚拟主播等场景。
💡 核心亮点: -可视交互:内置现代化 Web 界面,支持文字转语音实时播放与下载 -深度优化:已修复
datasets(2.13.0)、numpy(1.23.5)与scipy(<1.13)的版本冲突,环境极度稳定,拒绝报错 -双模服务:同时提供图形界面与标准 HTTP API 接口,满足不同调用需求 -轻量高效:针对 CPU 推理进行专项优化,无需 GPU 即可流畅运行
🛠️ 如何使用 Docker Compose 一键部署?
Docker Compose 是管理多容器应用的理想工具。我们提供一个完整可运行的docker-compose.yml模板,帮助你一行命令启动整个语音合成服务。
✅ 部署目标
- 启动 Sambert-Hifigan 语音合成服务
- 映射 WebUI 端口(默认 8080)
- 持久化音频输出目录
- 支持自动重启和日志管理
🧩 完整 docker-compose.yml 模板
version: '3.8' services: tts-service: image: registry.cn-beijing.aliyuncs.com/modelscope-repo/sambert-hifigan:zh-emotion-cpu container_name: sambert_tts_webui ports: - "8080:8080" volumes: - ./output:/app/output restart: unless-stopped environment: - FLASK_APP=app.py - FLASK_ENV=production logging: driver: "json-file" options: max-size: "10m" max-file: "3"🔍 字段详解说明
| 字段 | 说明 | |------|------| |image| 使用阿里云 ModelScope 官方镜像,已预装所有依赖,包含修复后的 scipy/numpy/datasets 兼容版本 | |container_name| 自定义容器名称,便于后续管理(如查看日志、重启) | |ports| 将宿主机 8080 映射到容器内部 Flask 服务端口,可通过http://localhost:8080访问 WebUI | |volumes| 将本地./output目录挂载至容器/app/output,确保生成的.wav文件持久保存 | |restart| 设置为unless-stopped,保证服务异常退出后能自动重启 | |environment| 设置 Flask 运行环境变量,提升稳定性 | |logging| 配置日志轮转策略,防止日志文件无限增长 |
🚀 快速上手步骤(三步完成)
第一步:创建项目目录结构
mkdir sambert-tts && cd sambert-tts mkdir output第二步:创建并编辑docker-compose.yml
将上述 YAML 内容保存为当前目录下的docker-compose.yml文件。
第三步:启动服务
docker-compose up -d⏱️ 首次运行会自动拉取镜像(约 1.2GB),之后启动仅需几秒。
🧪 验证服务是否正常运行
方法一:查看容器状态
docker ps | grep sambert_tts_webui应看到状态为Up的容器。
方法二:查看日志输出
docker logs sambert_tts_webui若出现类似以下信息,则表示服务已就绪:
* Running on http://0.0.0.0:8080 TTS model loaded successfully.方法三:浏览器访问 WebUI
打开浏览器,访问:
👉 http://localhost:8080
你将看到如下界面:
💻 WebUI 功能使用指南
- 在文本框中输入任意中文内容(支持长文本,最长可达 200 字)
- 可选择不同情感类型(如:开心、悲伤、愤怒、平静等)
- 点击“开始合成语音”
- 系统将在 3~8 秒内生成音频(取决于文本长度)
- 生成完成后可:
- 🔊 实时在线试听
- 💾 下载
.wav音频文件至本地 - 📁 查看
./output目录中的历史录音
📌 所有生成的音频均以时间戳命名,格式为:
output_20250405_142310.wav
🔄 API 接口调用方式(程序集成必备)
除了 WebUI,该服务还暴露了标准 RESTful API,方便与其他系统集成。
📥 POST /api/tts
请求参数(JSON)
{ "text": "今天天气真好,适合出去散步。", "emotion": "happy", "speed": 1.0 }| 参数 | 类型 | 说明 | |------|------|------| |text| string | 要合成的中文文本(必填) | |emotion| string | 情感模式:neutral,happy,sad,angry,surprised等(可选,默认 neutral) | |speed| float | 语速调节,范围 0.5 ~ 2.0(可选,默认 1.0) |
成功响应(HTTP 200)
{ "status": "success", "audio_url": "/output/output_20250405_142310.wav", "duration": 3.2 }音频文件可通过http://localhost:8080/output/output_20250405_142310.wav直接访问下载。
Python 调用示例
import requests url = "http://localhost:8080/api/tts" data = { "text": "欢迎使用多情感语音合成服务", "emotion": "happy", "speed": 1.1 } response = requests.post(url, json=data) result = response.json() if result["status"] == "success": audio_path = "http://localhost:8080" + result["audio_url"] print(f"✅ 音频生成成功!下载地址:{audio_path}") else: print("❌ 合成失败:", result.get("error"))🛡️ 常见问题与解决方案(FAQ)
❓ Q1:启动时报错port is already allocated
原因:8080 端口被占用
解决:修改docker-compose.yml中的端口映射,例如改为"8081:8080"
❓ Q2:合成速度慢或卡住
建议: - 确保机器内存 ≥ 4GB - 若使用老旧 CPU,建议降低文本长度(< 100 字) - 不要并发请求过多,模型为单线程推理设计
❓ Q3:如何更新镜像?
# 停止服务 docker-compose down # 拉取最新镜像 docker pull registry.cn-beijing.aliyuncs.com/modelscope-repo/sambert-hifigan:zh-emotion-cpu # 重新启动 docker-compose up -d❓ Q4:能否在 ARM 架构设备(如树莓派)上运行?
目前官方镜像基于 x86_64 架构构建,暂不支持 ARM。如需在树莓派运行,需自行编译依赖并构建镜像,重点注意onnxruntime和librosa的兼容性。
🧩 高级配置建议(生产环境适用)
日志集中管理(对接 ELK)
logging: driver: "syslog" options: syslog-address: "tcp://logs.example.com:514" tag: "tts-service"资源限制(防止单容器耗尽资源)
deploy: resources: limits: cpus: '2' memory: 4G注意:
deploy仅在使用docker stack deploy时生效,普通docker-compose需改用cpus和mem_limit(Compose v2 语法)
📊 性能测试参考(Intel i5-10代 CPU)
| 文本长度 | 平均响应时间 | CPU 占用率 | |---------|--------------|------------| | 50 字 | 1.8s | 65% | | 100 字 | 3.5s | 70% | | 200 字 | 6.2s | 75% |
✅ 结论:适合低并发、高可用性的边缘部署场景
🎯 总结:为什么推荐这个方案?
| 维度 | 优势 | |------|------| |开箱即用| 已修复所有依赖冲突,避免“pip install 报错地狱” | |双通道服务| WebUI + API,兼顾人工操作与自动化集成 | |零代码部署| 一个 YAML 文件搞定全部,适合 DevOps 流水线 | |资源友好| 仅需 2GB 内存即可运行,适合嵌入式设备 | |持续维护| 基于 ModelScope 社区活跃模型,长期更新保障 |
📌 最佳实践建议
- 定期清理 output 目录,避免磁盘占满
- 设置监控脚本,检测容器健康状态
- 对外暴露 API 时增加鉴权层(如 Nginx + Token 验证)
- 备份重要音频数据,防止误删
- 结合 FFmpeg 后处理,实现音量标准化、格式转换等
🚀 下一步你可以做什么?
- 将此服务接入微信机器人,实现“文字→语音”自动播报
- 搭配 ASR 模型构建完整对话系统
- 部署到 NAS 设备,打造家庭语音助手中枢
- 结合定时任务,生成每日新闻播报音频
🔗官方模型地址:https://modelscope.cn/models/iic/speech_sambert-hifigan_tts_zh-cn_multistyle
只需一个docker-compose.yml,即可让前沿语音合成技术为你所用。立即尝试,开启你的 AI 语音之旅!