内容提要
本文介绍用 Gatsby.js 搭建静态博客时自建评论系统的方案:推荐 staticman,通过 GitHub API 将评论写入博客仓库并触发重新部署,实现页面与评论完全静态化,从而掌控数据、服务崩溃时仍能显示评论,并集成 akismet 过滤垃圾评论。文中还说明了部署自建 staticman、配置 githubToken 与 rsaPrivateKey、连接仓库、编写 staticman.yml 及表单提交评论的方法。
延伸解读
自建评论系统的核心优势
文章指出,使用第三方评论系统如 disqus 存在数据掌控问题,且免费服务可能附带广告。自建 staticman 方案将评论数据存储在 GitHub 仓库中,博主完全掌控数据,即使服务崩溃,已生成的静态页面仍能展示评论。此外,staticman 集成了 akismet 过滤垃圾评论,减少了维护负担。
部署 staticman 的关键配置
部署自建 staticman 时,需生成生产环境配置文件 config.production.json,其中 githubToken 和 rsaPrivateKey 是核心配置项。githubToken 用于获取修改仓库的权限,必须严格保密;rsaPrivateKey 用于加密评论中的邮箱等敏感信息。配置完成后可推送至 Heroku 或本地运行。
评论提交与审核机制
在博客根目录创建 staticman.yml 文件定义数据格式,并通过表单提交评论。表单需包含 options[redirect]、options[slug] 以及 fields[name]、fields[email]、fields[message] 等字段。若将 moderation 设为 true,评论会先以 PR 形式提出,需手动合并后才会触发重新部署,适合需要审核的场景。
Q&A
为什么建议自建评论系统而不是用 Disqus 等第三方服务?
第三方评论系统如 Disqus 已不可用,国内类似服务免费档可能有大量广告,且最大问题是评论数据掌握在别人手上。自建评论系统可以自己掌控数据,服务崩溃时也能展示评论。
staticman 是什么?它如何实现静态博客的评论功能?
staticman 是一个开源工具,通过 GitHub API 将评论更新到你的静态博客仓库,触发博客重新部署,从而在页面生成评论。这样得到的博客页面包括评论部分都是完全静态的。
部署自己的 staticman 需要配置哪些关键项?
需要生成 config.production.json 配置文件,其中最重要的两个配置项是 githubToken(用于获取修改仓库权限的 token,不能泄漏)和 rsaPrivateKey(用于加密留言中的邮箱)。
如何将 staticman 连接到我的 GitHub 仓库?
发送 GET 请求:http://your-staticman-url/v2/connect/GITHUB-USERNAME/GITHUB-REPOSITORY 即可连接。
staticman.yml 文件的作用是什么?如何配置评论提交表单?
staticman.yml 用于确定传入仓库的数据格式。表单需设置 method="POST",action 指向 staticman 的 entry 接口,并包含 options[redirect]、options[slug] 以及 fields[name]、fields[email]、fields[message] 等字段。
staticman 如何过滤垃圾评论?
staticman 集成了 akismet 来过滤垃圾评论。