零成本给博客加评论系统:Twikoo+Netlify+MongoDB实录

1458 字
7 分钟
零成本给博客加评论系统:Twikoo+Netlify+MongoDB实录
零成本给博客加评论系统:Twikoo+Netlify+MongoDB实录

博客上线没几天,评论区还空着。这篇记录我给博客加评论系统的全过程,总花费0元,总耗时一个多小时,其中大半时间在排错。三个坑一个比一个隐蔽,写下来给后来的人省时间。

先说结论#

方案三件套:

角色选了什么花费
评论后端程序Twikoo 2.0.15开源免费
后端托管Netlify Functions免费层
数据库MongoDB Atlas M0免费层

为什么是Twikoo#

我的博客托管在Cloudflare Pages上,纯静态,没地方存评论。加评论系统必然要引入一个常年在线的后端加一个数据库,所以选型其实是在选”后端跑在哪”。

候选挨个过一遍:

  • giscus:评论者必须用GitHub账号登录。我的读者是同学和朋友,基本没有GitHub账号,评论区会变成摆设。淘汰。
  • waline:功能最全,但后端免费托管的位置全撞墙。Vercel默认域名大陆基本连不上,也没有Cloudflare Workers官方适配。淘汰。
  • 腾讯云CloudBase:国内速度天花板,但免费体验版无法在HTTP网关里配置跨域域名,这一步绕不过去;个人版19.9元/月起。学生党暂时退场。
  • HuggingFace:以前是免费方案里的明星,2026年7月起免费账号已经不能创建Docker Space,要PRO月付9美元。这条路刚被堵死。
  • Cloudflare Workers:官方适配+D1免费数据库+我正好有CF账号,差点就成了。卡在域名上:部署后的地址是twikoo.xxx.workers.dev,这个后缀在大陆被DNS污染,直接超时。没有自定义域名就没法用。
  • EdgeOne Makers:必须绑定自定义域名,默认域名链接只有3小时有效期。

最后剩Netlify:Twikoo官方部署文档里评级四星,免费方案里最高。免费额度每月12.5万次请求、100小时函数时长,大陆访问速度在免费平台里算好的。

架构一句话#

Twikoo负责接收和审核评论,Netlify负责让它跑起来,MongoDB Atlas负责存。前端JS从CDN加载,评论数据走后端进数据库。

部署过程#

1. 注册两个账号#

Netlify:邮箱注册,验证邮箱,然后在User settings → Applications里生成一个Personal access token。

MongoDB Atlas:邮箱注册,建集群时选M0 FREE(永久免费层,512MB存储),Region选东京(离国内近)。过程中要建一个数据库用户,密码自己设好记牢;网络访问后面会讲到,这里先埋个伏笔。

2. 部署后端#

官方模板是配合GitHub fork用的,我用Netlify命令行从本地直接推,连fork都省了:

Terminal window
git clone --depth 1 https://github.com/twikoojs/twikoo-netlify.git
cd twikoo-netlify
npm install

在根目录建一个netlify.toml:

[build]
functions = "netlify/functions"
[functions]
node_bundler = "esbuild"

设置环境变量后一条命令部署:

Terminal window
netlify env:set MONGODB_URI "mongodb+srv://用户:密码@cluster0.xxxx.mongodb.net/?retryWrites=true&w=majority"
netlify env:set NODE_VERSION "24"
netlify deploy --prod --dir . --functions netlify/functions

打开分配的地址,看到”Twikoo 云函数运行正常”就算成功。

一个容易漏的点:Netlify的envId必须带上/.netlify/functions/twikoo后缀,跟Vercel那种直接给域名的不一样。博客前端配置envId时少了这段后缀,请求会404。

坑一:整个站点401#

部署完打开,等来的不是”运行正常”,是Netlify的登录跳转页。所有路径全部401,连首页都是。查API看站点状态,claimed是true,一度以为是令牌权限问题。

真实原因:新账号的站点可见性。进Netlify控制台 → Site configuration → Access and security → Site visibility,改成Public,立刻恢复。

顺带一提,注册后的验证邮件最好第一时间点掉,新账号功能受限有一半是因为邮箱没验证。

坑二:504 Inactivity Timeout#

登录墙解决了,再打开变成504,函数被调用但一直挂起直到超时,函数日志里一片空白。

这次排了好一会儿。后来顺着调用链想:函数启动后第一件事就是连数据库。回Atlas控制台一看,Network Access里只有一条记录,我自己的IP。而Netlify服务器的出口IP每次都不一样,永远进不了白名单。

解决:Network Access → ADD IP ADDRESS → Allow access from anywhere(0.0.0.0/0)。

有人会担心安全。M0免费库有独立的数据库用户名密码,白名单只是第一道门,个人博客的流量级这么用是社区标准做法。

坑三:手改连接串改出双斜杠#

Atlas复制的连接串自带<db_password>占位符,替换密码时手一抖,主机名前多打了一个斜杠,变成mongodb+srv://user:pass@//cluster0...,驱动直接报错。建议整串复制,只动占位符那一段。

顺便科普:DNS污染#

为什么你的pages.dev博客能打开,workers.dev就不行?DNS污染指的是国内查询某些域名的IP时会得到一个假答案,于是永远连不上。pages.dev这个后缀没被污染,workers.dev被污染了。同属Cloudflare,两种命运。这也是选型里”有没有自定义域名”变成关键变量的原因。

最后花了多少钱#

项目费用
Twikoo0(开源)
Netlify Functions0(每月12.5万次请求额度)
MongoDB Atlas M00(512MB永久免费层)

唯一的”付费”是一个多小时。个人博客的流量级,这些额度根本用不完。

还可以继续做的#

  • 管理员密码要在评论区后台手动设一次,评论的删除和禁用词都在那里管
  • 邮件通知可选配Resend免费API,Netlify环境发邮件走HTTP通道
  • 以后买了自定义域名,可以把整套迁到速度更快的平台上,Twikoo支持评论数据导出导入,搬家不丢数据

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

零成本给博客加评论系统:Twikoo+Netlify+MongoDB实录
https://saul-blog.pages.dev/posts/twikoo-comment-system/
作者
Saul
发布于
2026-10-19
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Saul
记录学习与成长
公告
博客已换装 Firefly 主题,评论区开放中,欢迎留言!
分类
标签
最新动态
站点统计
文章
4
分类
2
标签
8
总字数
3,321
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录