给博客接上评论:从 Giscus 到 Waline 的辗转

博客第一版装的是 Giscus。它挂在 GitHub Discussions 上,配置几个 ID 就能用,零后端、零数据库,对技术博客来说几乎完美。但有一个我绕不过去的坎:访客必须登录 GitHub 才能留言。

最初我想,来我博客的大多也是程序员,GitHub 账号谁没有呢——但转念一想,我建这个站不就是为了让更多人能说上话么。一个需要登录才能发言的评论区,本质上是把门槛摆在了读者面前。换。

于是我开始研究 Waline。它的卖点很直接:访客只需填昵称就能评论,连邮箱都是可选的。“这不就是我想要的吗?“我心想。然而现实很快给我上了一课。

Waline 不是 Giscus 那样的”贴一段 script 就跑”的东西。它是一套完整的前后端分离架构:浏览器端跑一个脚本,你部署一个服务端处理请求,服务端后面还得接一个数据库。前端脚本负责渲染评论框,服务端负责存评论——这两者之间,隔着一个需要你自己部署、自己运维的中间层。

部署到 Vercel 倒是顺畅。一键模板点几下,一个 xxx.vercel.app 的地址就有了。拿到地址,填进配置,前端就绪。然后我兴冲冲地点了”提交评论”——报错。因为没有数据库。

Waline 支持三种数据库,而我在 Vercel 上,也意味着 SQLite 不可用——Vercel 的 Serverless 文件系统是临时的,实例重启数据就丢。SQLite 在本地开发爽得要命,但在 Serverless 环境里就是个幻觉。于是我只能去开一个云数据库。

接下来的半个下午,我栽在了环境变量上。Vercel 那边的环境变量名必须和 Waline 文档一字不差,大小写敏感。我错把 MYSQL_PASSWORD 写成了 MYSQL_PASS,Waline 没有任何报错,静默回退到了 SQLite——评论显示”提交成功”,但刷新页面就没了。最阴的 bug 就是那种不给你任何提示的。

还有几个经典的坑:改完环境变量忘了一键重新部署,Vercel 不会热加载它;数据库防火墙没放行 Vercel 的出口 IP;库没先建好就连。这些问题每一个单独看都很蠢,但串在一起就构成了”Waline 太难搞”的口碑。

事后想来,这些折腾的本质其实是一个取舍的权衡:Giscus 让你省去所有运维成本,代价是把访客挡在 GitHub 登录后面;Waline 把选择权还给读者,代价是你得亲自管一个后端加一个数据库。没有对错,只看你的博客想传递什么样的信号。

我喜欢最后那个画面:我关掉电脑,博客照样能被访问,评论照样能被提交。静态托管 + 独立后端让这件事成为了可能。下一次,我想把邮件通知和反垃圾也配上,让这套系统再完整一些。

评论

评论加载中……