hexo next主题 twikoo评论的搭建
hexo 博客想接 twikoo 评论,前后端折腾了一晚上。前端好接,后端在大陆能访问才是真问题。Vercel 部署的后端在大陆连不上,换 Netlify 立刻就通了。完整过程记一下,省得下次再踩。
后端部署
twikoo 后端官方支持多个平台:腾讯云、Vercel、Netlify、Hugging Face、Railway。大陆访问推荐 Netlify,*.netlify.app 域名比 *.vercel.app 稳得多。Vercel 在大陆没边缘节点,DNS 经常被污染直接 RST,浏览器报 ERR_CONNECTION_TIMED_OUT。
Netlify 部署
twikoo 官方有现成模板 twikoojs/twikoo-netlify,fork 到自己 GitHub 账号,然后:
- 登录 Netlify → Add new site → Deploy an existing project
- 选 fork 出来的仓库,Deploy
- 部署后加环境变量
MONGODB_URI(MongoDB Atlas 免费层连接串) - 重新部署
MongoDB Atlas 免费层 M0 有 500MB,存博客评论够用很久。之前 Vercel 用的同一连接串直接复用,评论数据无缝迁移。
验证后端
部署完访问你的 Netlify 域名:
1 | https://<你的站点>.netlify.app/.netlify/functions/twikoo |
能返回下面这个就说明后端活着:
1 | {"code":100,"message":"Twikoo 云函数运行正常,请参考 https://twikoo.js.org/frontend.html 完成前端的配置","version":"1.7.19"} |
前端接入
装插件
1 | npm install hexo-next-twikoo@1.0.3 |
next 8.4+ 用 1.0.3 这个版本。
前端 JS 自托管
twikoo 前端 JS 默认从 jsdelivr 加载,国内经常被墙。跟 artalk 一样,下载下来放到博客自己托管:
1 | curl -sL "https://registry.npmmirror.com/twikoo/-/twikoo-1.7.19.tgz" -o twikoo.tgz |
配置 _config.yml
1 | twikoo: |
envId 填法因平台而异,这是最容易踩的坑:
| 平台 | envId 填法 |
|---|---|
| Vercel | 根 URL,如 https://xxx.vercel.app/ |
| Netlify | 必须带完整函数路径 https://xxx.netlify.app/.netlify/functions/twikoo |
| 腾讯云/Zeabur | 纯环境 ID,如 twikoo-xxxx |
Netlify 只填根域名会 404,必须带 /.netlify/functions/twikoo 后缀。我第一次就栽在这,浏览器报 404 找半天原因。
验证全链路
改完配置重新生成部署,然后:
1 | # 1. 后端连通(GET 验活) |
POST 必须带 event 字段。字段名写错会返回 {"code":1001,"message":"请更新 Twikoo 云函数至最新版本"},别被这句话误导,不是版本问题,是请求参数不对。
最后浏览器实测一遍:打开文章页,console 里没有 ERR_CONNECTION_TIMED_OUT、能发出评论,就成。
踩坑汇总
- Vercel 后端大陆不通:
*.vercel.app大陆没边缘节点,DNS 污染/RST。海外 curl 通没用,得大陆用户实测。 - envId 填法:Netlify 必须带
/.netlify/functions/twikoo完整路径,Vercel 用根 URL,腾讯云用纯 ID。 - 前端 JS 别走 jsdelivr:国内被墙,自托管到
source/twikoo/。 - 前后端版本要一致:前端 1.7.19 就配后端 1.7.19,不一致会出怪问题。
- POST 参数:
event字段名要写对,写错被误导成版本问题。
备选方案
如果 Netlify 也不稳,还有几条路:
- 腾讯云函数 SCF:国内访问最快(< 100ms),但要走腾讯云配置流程
- 自建 VPS Docker:最可控,参考 artalk 模式,docker 起 twikoo 官方镜像 + 反代
- Hugging Face:社区推荐,但默认邮件端口被屏蔽
数据都在 MongoDB Atlas 里,切平台只是换入口,评论一条不丢。