目标:
在 Ubuntu环境 下,从源码开始搭建并调试 HeyGem.ai(Heygen的开源平替版),解决构建问题、Docker服务联动问题、数据库异常、TTS接口连通性问题,并总结整个过程中的关键技术点。
Ubuntu系统环境
项目 详细信息
操作系统 Ubuntu 22.04.5 LTS
内核版本 5.15.0-138-generic
CPU Intel 第13代 Core i5-13400F (20核)
内存 16GB(可用15.3GB)
硬盘 剩余100GB以上(Docker镜像和HeyGem.ai源码需要大量空间)
GPU NVIDIA RTX 3070(显卡驱动已正确安装). 8G
Docker版本 26.1.3
Node.js版本 v12.22.9(建议升级到 v18+)
NPM版本 8.5.1
具体操作步骤与问题处理总结
1. HeyGem.ai源码环境搭建
- 成功从GitHub拉取HeyGem.ai源码。
- 在 Ubuntu 22.04 系统下操作。
- 初步执行
npm install
报出大量警告和错误:-
原因:本地 Node.js 版本过低(v12.22.9),而HeyGem要求至少 v16+。
-
当前未升级Node,强制继续安装。
-
2. npm run build 成功编译
- 执行
npm run build
,成功在/out
目录下生成主进程(main)、预加载(preload)、前端界面(renderer)的编译文件。 - 同时,执行
npm run dev
本地开发模式也成功启动。(后续仍需处理TTS服务连接问题)
3. Docker容器环境搭建
- 必须的Docker容器启动并正常运行:
-
heygem-tts
(端口18180) -
heygem-asr
(端口10095) -
heygem-gen-video
(端口8383)
-
- 通过
curl http://127.0.0.1:8080/
验证 TTS服务接口正常(Swagger页面可以访问)。
4. TTS接口连接超时问题调查
Electron端调用音频预处理API时报错:
arduino
CopyEdit
AxiosError: connect ETIMEDOUT 192.168.4.204:18180
问题原因分析:
- Electron配置(config.js文件)中,TTS服务器地址在开发模式下指向了
192.168.4.204:18180
,但实际应该是本地Docker运行的127.0.0.1:18180
。
解决方案建议:
javascript
CopyEdit
export const serviceUrl = {
tts: isDev ? 'http://127.0.0.1:18180' : 'http://127.0.0.1:18180',
}
- 将配置修改为本地地址。
5. 音频预处理API(/v1/preprocess_and_tran)手动测试
- 使用
curl
直接请求TTS容器接口:-
注意
format
字段必须写"wav"
,而不是".wav"
。 -
返回
"file not exists"
表示指定的音频文件在容器中找不到,需正确上传或挂载文件(如test.wav
)。
-
6. better-sqlite3数据库异常修复
- 初始出现SQLite绑定异常:
pgsql
CopyEdit
TypeError: SQLite3 can only bind numbers, strings, bigints, buffers, and null
-
问题原因:
- 插入数据库时,voiceId参数传入了布尔值(true/false)。
-
修复方法:
javascript
CopyEdit
const voiceIdInt = typeof voiceId === 'boolean' ? (voiceId ? 1 : 0) : voiceId;
stmt.run(modelName, videoPath, audioPath, voiceIdInt, Date.now());
最终状态总结
-
成功本地编译 HeyGem.ai 源码,且可以启动。
-
Docker三大容器服务均正常启动并提供服务。
-
能访问到 TTS Web接口的Swagger文档。
-
Electron客户端与TTS服务器通信错误,需要修正TTS URL。
-
音频文件需放到正确的路径中,避免 “file not exists” 错误。