797 字
4 分钟
Twikoo评论迁移Netlify记录
2026-08-13
Human Participation

背景#

本博客评论系统使用 Twikoo,后端部署在 Hugging Face 免费 Space。

然后博客长期没有评论,以为只是没流量,直到…

好家伙,后端炸了一个月了才看到😅
好家伙,后端炸了一个月了才看到😅

一、症状与诊断#

Space 状态为 RUNTIME_ERROR,错误信息:

Launch timed out, workload was not healthy after 30 min

通过 HF API 查询运行时状态:

{
"stage": "RUNTIME_ERROR",
"hardware": { "current": null, "requested": "cpu-basic" },
"errorMessage": "Launch timed out, workload was not healthy after 30 min",
"gcTimeout": 172800
}

关键判断:

  • sha 与构建记录的 Commit SHA 一致 → 构建已通过,问题在容器启动阶段
  • Dockerfile 端口配置正确(ENV TWIKOO_PORT 7860),排除端口不匹配

根因指向 HF 免费档的回收机制:cpu-basic 实例 48 小时(gcTimeout 172800 秒)不活动即被回收,唤醒时若未能及时通过健康检查,30 分钟判定失败。该问题在社区多次出现,且 HF 屏蔽邮件端口,Twikoo 的通知功能本就不可用。

二、方案选择#

对比 Twikoo 官方文档的云函数平台:

平台推荐度关键点
Netlify★★★★☆免费额度充足,国内访问不错,不屏蔽邮件端口
Hugging Face★★★★☆免费,但实例回收后唤醒不稳定

选择 Netlify:评论数据本就存在 MongoDB Atlas,迁移平台只是换一个”壳”,数据不动。

三、迁移实施#

1. fork 官方仓库

gh repo fork twikoojs/twikoo-netlify

2. 安装 netlify-cli 并登录

npm i -g netlify-cli
netlify login

3. 创建站点

netlify sites:create --name yuer6327-twikoo --account-slug <team-slug>

--account-slug 是团队 slug 而非显示名(如 tom-xxx 而非 Yuer6327),用 netlify api listAccountsForUser 查询。

4. 配置数据库环境变量并部署

netlify env:set MONGODB_URI "mongodb+srv://..."
netlify deploy --prod

部署后验证:

GET https://yuer6327-twikoo.netlify.app/.netlify/functions/twikoo
{"code":100,"message":"Twikoo 云函数运行正常……","version":"1.7.15"}

四、坑:连接串未指定数据库名#

部署后前端能连上、也能发新评论,但历史评论全部消失

Twikoo 默认连接名为 test 的数据库。连接串 mongodb+srv://...@cluster.mongodb.net/?appName=... 未指定 /库名,数据于是写入空的 test 库。

在 Atlas 中确认评论数据实际在 twikoo 数据库的 comment 集合,将连接串补上库名后重新部署:

mongodb+srv://...@cluster.mongodb.net/twikoo?appName=...

历史评论随即恢复。

五、前端版本对齐#

后端 twikoo-netlify 为 1.7.15,博客前端 public/twikoo/twikoo.all.min.js 停留在 1.6.44。从 npm 拉取官方 dist 替换,避免版本差距过大触发前端版本过低提示:

npm i twikoo@1.7.15
# 复制 dist/twikoo.all.min.js 及配套 LICENSE 至 public/twikoo/

六、经验总结#

① 长期在线的服务慎用免费云函数实例。 HF 免费 Space 实例回收后唤醒不稳定,不适合需要稳定在线的评论后端。

② MongoDB 连接串务必显式指定数据库名。 省略 /库名 时 Twikoo 连默认 test 库,表现为”能评论但看不到历史”。

③ 迁移云函数平台前先确认数据所在库名。 避免先连错库,在空库里产生无效数据。

④ 前端 twikoo.js 与后端版本需对齐。 同主版本内通常兼容,但保持一致最省心。

结论:评论数据在 MongoDB Atlas,云函数平台只是承载入口,换平台本身不丢数据;真正丢数据只会发生在连接串指向了错误的数据库。

这篇文章对你有帮助吗?
🐈
Hi,我是 YuBlogAI