Frost's Blog
1113 字
6 分钟
自建、免费、开源的评论系统解决方案
2021-04-28

2024.1.2 更新: 本文中的评论系统已经迁移到了 Artalk

我最近把评论系统切换到了Cusdis,这是一个非常年轻的项目,我是看着 GitHub Repo 从建立到现在近 900 个 star 的。产品体验不错,在开源协作的过程中也有很多收获,觉得有必要推荐一下,并且介绍下自己用的 workflow 所以有了这篇水文。

我为什么选择 Cusdis#

评论系统有以下几种选择:

  • 公司产品,最有名的比如 Disqus,好处是使用人数多方便互动,不用自己管理 Infra,缺点是不由你说了算,比如强行给你加广告付费才能去除(驱动我换评论系统的最大原因),以及被墙及跑路的风险。
  • 白嫖后端产品,常见被白嫖的有 GitHub(utterances),LeanCloud(Valine),优点是省心,缺点是不好导出迁移。
  • 自造轮子产品,比如我曾经就做过一个,优点是完全自主,缺点是要做好没有 bug 还是有很多细节要考虑,而且维护 infra 也是一个开销。

Cusdis 其实三类全占,它既有一个 Hosted 服务你可以直接把数据托管在上面,也给了你自己部署自建数据库的自由。而且它支持从 Disqus 导入评论数据。于是我就尝试了一下,最后发现整个方案我挺满意,重点是全白嫖不花钱,下面分享一下。

我使用的工作流#

数据库#

Cusdis 支持连接你指定的 PostgreSQL 数据库实例,为了省心我首先想到了 DBaaS,但之前对这块不太熟,找了下各大知名云,都不是永久免费。于是我想到了Heroku,对于免费的实例只有 PostgreSQL 是可以免费用的,而 Cusdis 又(暂时)只支持连接 PostgreSQL,一切都是刚刚好。

注册帐号登录之后,进入到 Dashboard,右上角 Create new app 新增一个 app,区域选美国

20210428184818

转到 Resources 页面 Add-ons 里面搜索 PostgreSQL 并添加,这样一个数据库就好了

20210428184956

然后转到 Settings 页面,查看 Config Vars,把DATABASE_URL复制出来,就可以直接给 Cusdis 用了。

服务部署#

我选择自己部署服务,Cusdis 提供的部署方式有两个:Docker 和 Vercel,用 Docker 的话还是需要一个自己的服务器,而服务器是!要!花!钱!的!所以排除,Cusdis 本身服务端是用 Next.js 开发的所以用 Vercel 部署就非常自然了。点击Deploy with Vercel这个按钮就能一键部署,然后配置好一些必要的环境变量就可以了,完成后直接访问分配的域名就能看到管理后台了。搞掂!

自动更新#

Cusdis 是一个正在快速演进的项目,我希望有任何改进和 Bug 修复都立即更新到我的后台上,所以我用了 GitHub Action 这个大杀器,定时 pull 上游代码提交到 fork,非常丝滑,具体 workflow 可以看这里

新评论通知#

有新评论到达时通知当然是必需的,可以参考文档的配置在 Vercel 中配置必要的环境变量就可以了。值得注意的是如果你用的是 Gmail,它会需要你设置一个独立密码才能给外部 app 调用 SMTP 服务,可以在 Google 帐户设置里启用。

Update in 1.1.2

现在 Cusdis 还支持 Webhook 式推送通知,你可以建一个服务来接收消息,再通过 Telegram Bot 给自己发通知。这个功能用 Serverless 云函数就能实现了,也有很多好用且免费的服务。我用的是一个刚出现的 Python 云函数服务Napkin.io,这是我写的 Napkin,你可以 Copy 过去改用自己的 token 和 chat ID,点 Deploy 就跑起来了,非常方便。最后记得在 Cusdis 后台登记 Webhook 的地址,使用效果:

20210430110151

开源贡献#

Cusdis 是一个年轻的开源评论系统,有很多特性尚未支持,我这个搞 Python 的也提交过几次贡献,它的服务端是 Next.js,组件是 Svelte 写的,理解起来并不复杂。如果你也和我一样喜欢折腾喜欢 unstable 追新产品,不妨试试 Cusdis,帮助改善。最后也推荐一下作者的博客,内容质量高,非常启发思考。

自建、免费、开源的评论系统解决方案
https://frostming.com/2021/04-28/self-host-comment-system/
作者
Frost Ming
发布于
2021-04-28
许可协议
CC BY-NC-SA 4.0