博客评论系统迁至 Remark42

静态博客本身是无法支持评论的,因为没有服务端程序接收请求,只能求助于系统外的服务。
目前虽然评论系统很多,但综合考虑能够真正用起来并且很稳定的很少。

最初搭建博客的时候,我使用的是多说,但随着多说的关闭,静态博主们一直都处于比较难受的状态。

虽然后来大家把 Serverless、GitHub issues 用得淋漓至尽,但这样使用基本都存在安全隐患

试想如果你的评论系统让访客感觉不安全,你的文章内容有那么大的价值让访客冒着风险去评论吗?
我怕是没有的。这样即使再优秀好看的评论系统也仅是摆设罢了。

所以长时间以来,我还是一直停留在了 Disqus。

直到前段时间无意中发现了 Remark42,决定换来试试。

特别说明:Remark42 并不是开箱即用,需要自己搭建服务甚至修改主题,如果你自己没有服务器来部署或者没有能力修改主题,Remark42 并不适合你。

既然 Remark42 这么麻烦,为什么我还要选择它呢?
那么我就来说说之前我在用的 Disqus 和尝试过使用的一些评论系统,大致分为以下几类:

  • 基于第三方:Disqus/Livere/Valine.js
  • 基于 Github issues:Gitment/Gitalk/utterances/Vssue
  • 纯静态:Staticman
  • 自建:ISSO/HashOver/Remark42

Disqus

作为业界的龙头老大,相信大家都已经很熟悉了。
舍弃的原因主要是不通过技术手段无法正常访问。
虽然我博客的受众基本都是技术人员,技术手段也都多得是,但还是挺不方便的。

另外 DisqusJS 虽然可以使用,但只能浏览,不能评论。

Livere

韩国的一家评论系统,支持中文,使用邮箱注册。支持国内多家社交平台登录。
目前可以正常访问,但速度感人。
另外参考“前车之鉴”,从长远来看也“不保险”。

Valine.js

一款基于 LeanCloud 的评论系统。
这是一个很轻量的评论系统,就功能性方面来说,Valine.js 几乎是满分。

但是 Valine.js 是有隐私泄露风险的,详见 issue #336

另外这种只能让自己填昵称、邮箱、网址的原始评论方式,我真的有些接受不了。

还有就是从 1.4.0 之后它再不开源了

由于某些原因,src目录将从 v1.4.0 后暂停更新.

Gitment/Gitalk/Vssue

这些都是基于 GitHub issues 的评论系统。

  • Gitment 只支持 GitHub 登录,基于原生 JS 开发,已经长期不维护了。
  • Gitalk 也是只支持 GitHub 登录,基于 Preact 开发。
  • Vssue 的灵感来自于 Gitment 和 Gitalk,但是和它们有些区别:
    • Vssue 支持 Github、Gitlab、Bitbucket、Gitee 和 Gitea
    • Vssue 可以发表、编辑、删除评论(Gitment 和 Gitalk 仅能发表评论)
    • Vssue 是基于 Vue.js 开发的,可以集成到 Vue 项目中,并且提供了一个 VuePress 插件

这里边界面和功能上我是比较喜欢 Gitalk 和 Vssue 的,但是当在 demo 站上登录授权的时候,我犹豫了

下面两张截图是我截取的 Gitalk 和 Vssue 的权限列表。它们能够 读写 授权者 所有的公共仓库 ,也就是说拿到你的授权 Token 的人,可以将你的 GitHub 公共仓库删空

utterances

这时就不得不说 utterances 了,它是个 GitHub App,它的权限仅限于某个仓库,要安全许多

虽然安全隐患不用那么担心了,但是这丫的设计真是有问题——它的评论框在评论列表的下方!

要发一条评论,我还得先看完整个评论列表?

另外它的评论列表的顺序是按时间顺序排列的,有人在 14 Nov 2019 提了个时间倒序排列的 PR #222,然而至今都没被接受。

Staticman

Staticman 的原理是提供一个 API,将用户提交的评论内容转换成格式化文本(yaml、json),然后以文件方式上传到指定 GitHub 仓库中。

这可能是最符合静态博客理念的一个三方评论应用,它只提供接口服务,你可以自由设计表单项、表单样式和数据存储结构。即便有一天接口挂掉了(最近就是挂掉了的状态),你的评论依旧会和你的博客在一起,同生共死。

它的最大缺点则是不稳定:它的使用者众多(国外居多,国内似乎没什么人用),而作者明显不具备无偿奉献精神,应用部署在免费的三方平台上,所以当请求量过大时,它就会挂掉。

当然你可以把它的开源源码拉到服务器上部署了,或者使用 Serverless。

但还有个问题,由于它的发布流程挺长的(接收请求后,创建一个 yaml/json 文件,写入 GitHub 仓库,GitHub 接收到 push 请求后会通知我的服务器,我的服务器收到通知后就把 repo 拉取过去 build,生成静态页面后部署),这期间要经过多次网络传输,从访客发布评论到刷出评论,要经过挺长一段时间的,使用体验欠佳。

ISSO/HashOver

ISSO 是基于 Python 开发的,其 demo 看起来比较简陋,不符合我的审美。

HashOver 是基于 PHP 开发的,即使它现在已经开始 2.0 的开发了(hashover-next),但是给我的感觉还是像回到了上个世纪逛 BBS 的感觉。

Remark42

Remark42 是一个基于 golang 的评论系统,它使用 boltdb 存储用户的评论信息。

功能上也挺丰富的,支持 Markdown、emoji,支持 GitHub、Google、Facebook、Twitter、Yandex、邮箱、匿名登录,颜值也还算可以,支持浅色和深色模式。

如下是它在使用 GitHub 登录时所需的权限

虽说需要部署,但是因为文档写得不错,并且提供了基于 Docker 的部署方式,部署起来很 easy。
当然有一点:如果你部署的机器是位于国内,就不要去折腾 Google、Facebook、Twitter 这些的登录了,徒劳的。

Telegram notifications

Remark42 在收到新评论时可以通过 Email 或者 Telegram 来发送通知消息,邮件试了好几个没找到既免费又好使的,就用 Telegram 了

配置步骤如下:

  1. 在 Telegram 里搜索 BotFather
  2. BotFather/newbot 以创建一个新 bot
  3. 按提示给 bot 设置昵称和 username(注意 username 必须以 _bot 结尾)
  4. 创建完 bot 后就会得到一个 token,以配置 Remark42
    - NOTIFY_TYPE=telegram
    - NOTIFY_TELEGRAM_TOKEN=12345678:xy778Iltzsdr45tg
  5. 创建一个 private 的 channel,并将刚刚创建那个 bot 添加为这个 channel 的 administrator
  6. 给 bot 发送一条消息,例如 /my_id @your_bot_username
  7. 访问 https://api.telegram.org/botXXX:YYYY/getUpdates,将 XXX:YYYY 换为你的 bot token
  8. 找到 "chat":{"id":-zzzzzzzzzz,-zzzzzzzzzz 就是这个 channel 的 chat_id
  9. 然后将这个 chat_id 添加到 Remark42 的配置
    - NOTIFY_TELEGRAM_CHAN=-1001055587116
  10. 重启 Remark42 服务即可


目前这个博客的评论系统已经换成 Remark42 了,大家可以试试看。 😁


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!