Show

为网站配置 Artalk 评论系统

背景

咱最近重整了咱的网站们,而新的网站呢,需要选择一个评论系统,因此有了这篇文章。

静态网站虽然容易部署、几乎不消耗服务器性能,但却无法实现许多对动态网站来说轻而易举的功能,比如评论、反馈、点赞。因此需要一个评论系统作为补充。

目前业内为静态网站添加评论系统的常见方案是使用云开发、Vercel、云数据库等 serverless 平台的免费服务,或者借助 GitHub 等平台托管评论。这些方案门槛低,免费,适合轻度使用。咱也对这些评论系统的名称有所了解,包括 Disqus、Gitalk、Valine、Waline、畅言、LiveRe、utterances、Giscus、Twikoo、Artalk 等等,不过并未使用过其中任何一款

然而,这些方案也有一些不足之处,比如需要注册各种账号、速度慢、无法完全掌控数据、受到免费额度限制(应该不会用尽)和其他的服务商的限制。

咱也找到了几篇文章对比这些

经过简单分析,综合咱的阅历,咱意识到,评论功能作为交互式的功能,必然需要服务器,无服务器(自己的或者 Vercel 等平台的)的方案要么不安全,要么限制多。所以

  • 不使用 Valine 这类不安全
  • 不使用 Gitalk 这类寄生于其他平台
  • 既然已经有了服务器,就使用可独立部署的方案,更简单、可靠,而非托管于 Vercel 等平台

经过筛选,目前剩下三个可供选择:Waline、Twikoo、Artalk,我将进行进一步的调研。

深入

对比表格(简版)

评论系统部署文章表态审核社交登录统计、图片、表情、防刷、通知头像外观文档
Waline独立、serverless支持多种接口、自定义?、先审后发支持支持avatar CDN、QQ
Twikoo独立、serverless不支持接口、先审后发不支持支持avatar CDN、QQ
Artalk独立仅赞同反对接口、关键词、先审后发支持支持avatar CDN、自定义

综合来看 Waline 比较成熟,比较美观,而且有一个功能咱有个网站想用:文章表态。但是文档比较乱,要点分散,大篇幅是都在说那些第三方部署方式。Twikoo 比较简洁,功能少点。而 Artalk 仅支持独立部署,不用兼容五花八门的第三方平台,摆脱了巨大的包袱,功能和可配置项也更多,更加强大。

暂时先看 Artalk。

头像问题

这些评论系统一般都是通过邮箱来获取头像。你只需在一个公共头像服务网站,如 Gravatar,用邮箱注册,上传头像。在这之后,你在其他网站填写邮箱,其他网站就可以根据邮箱,通过这个头像服务网站,得到你的头像。一处上传,多处使用,免去了重复上传的麻烦。Gravatar 最初由 Wordpress 推出,是全世界应用最广泛的公共头像服务提供商。Wordpress 、npm 等平台都在使用它。

但是由于大局域网的缘故,Gravatar 在境内无法访问,此时我们可以使用 libravatar、weavatar 和 cravatar。它们也兼容 Gravatar ,如果那个邮箱没在它上面注册,会尝试返回其 Gravatar 头像和 QQ 头像(QQ数字邮箱)。尚不清楚 weavatar 从上游服务商刷新头像的时间间隔。

账号与安全问题

免登录发评论不可避免地会有被刷评论的风险,业内之前也有过这种事:关于被人恶意冒用身份发送垃圾评论的声明 | 怡红院落。目前上面几个评论系统都有防刷设计,防止频繁提交,还可以使用接口(如 Akismet)鉴定是否是垃圾评论。Artalk 支持手动配置关键词,将被命中的词汇替换或先审后发。

由于免登录发评论不会验证邮箱地址,所以不可避免地会有冒名顶替的风险,为此 Waline、Artalk 有社交登录功能,允许用邮箱或第三方平台登录后发评论。这里暂时不做这个限制。

发邮件

好像云服务商不支持自建邮箱,不开放25端口,而且自建邮箱非常麻烦。咱也懒得搞其他邮箱服务,就不支持邮件功能好了~回复也不提醒了~

行动

咱的个人站最终选择 Artalk,至于缺少的文章表态功能等以后再说。

后端

咱服务器使用的 1Panel 面板,里面就有 Artalk 的 Docker 镜像,直接安装,

然后创建管理员账户:在【容器】页面找到 artalk 容器,点击右侧的【终端】按钮后,执行以下命令:

bash
artalk admin

再给站点配置反向代理,这样直接请求域名/artalk/就可以了

nginx
location /artalk/ {
    proxy_pass http://127.0.0.1:23366/; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
}

简单测试成功。

暂时不搞 Akismet 服务了,仅配置一份敏感词列表,命中就先审后发。

前端

咱的网站框架 Valaxy 已经有了一个 Artalk 插件valaxy-addon-artalk,咱直接拿来用,简单配置即可启用。

其他

  • 待办:配置社交登录
  • 反向代理已经设置了 IP 但获取到的 IP 仍然是内网 IP?在 Artalk 设置里面:服务器、代理标头(http.proxy_header)填一下 X-Forwarded-For
  • 部分配置修改后需手动重启服务才能生效
  • 敏感词分隔符,疑似从面板配置会有 BUG
  • 如何确定同一个用户是同一个用户呢?在不登录的情况下,用以实现防止重复点赞等功能。好像这些都是根据IP来判定的。可是同一个人同一个设备的 IP 有可能变动,要是让浏览器存储也参与判定就好了。
  • 表情包
  • 图片评论先审后发
  • 多站点区分配置
  • 私密评论,强制私密
  • 为网站配置 Artalk 评论系统
  • 作者:天雪酱  发布于:2025-01-26  更新于:2025-01-29  许可协议:若无特别说明,均为 CC BY-NC-SA
网页 Live2D 相关记录
使用 AI 重构我的 JS 特效库