最近收到了 Disqus 要在评论区投放广告的邮件 , 刚开始觉得没啥,毕竟免费用了这么久,放点广告而已。然而当我看到 Disqus 这猎奇的广告内容和巨长的篇幅后,我还是决定给它换了! 对比了多个评论系统,最终选择了 Waline。
对比
看了几个开源的评论系统,稍微总结下。
Waline
- 项目地址: https://github.com/walinejs/waline
- 特点: 轻量;免费;易于部署;强大Markdown支持;安全;流量统计;支持三方登陆;迁移方便;…
- Github Start: 2.4k
- 更新频率:写这篇博客的时候是3天前更新的,main分支累计2916个Commit,更新很频繁👍
Valine
- 项目地址:https://github.com/xCss/Valine
- 特点: 快速;免费;易用;Markdown全语法支持;安全;流量统计; …
- Github Start: 2.2k
- 更新频率:写这篇博客的时候是4天前更新的,master 分支累计536个Commit。
Artalk
- 项目地址:https://github.com/ArtalkJS/Artalk
- 特点: 轻量;快捷;免费;安全;多语言;插件扩展;第三方登陆;后台管理;OpenAPI; …
- Github Start: 1.7k
- 更新频率:写这篇博客的时候是一周前更新的,master 分支累计1591个Commit。
Cudis
特点: 开源;清亮;disqus平替;安全;易用;自建;支持购买托管服务;
Github Start: 2.6k
更新频率:写这篇博客的时候是8个月前更新的,master 分支累计507个Commit。
Twikoo
特点: 简洁;安全;免费;简单;易用;安全;即使;个性;便捷管理;…
Github Start: 2.6k
更新频率:写这篇博客的时候是8个月前更新的,master 分支累计507个Commit。
Gitalk
- 项目地址:https://github.com/gitalk/gitalk
- 特点: 开源;无服务(使用Github issues存评论);多语言;…
- Github Start: 7k
- 更新频率:写这篇博客的时候是5个月前更新的,master 分支累计181个Commit。
其实几个看下来评论系统大家的核心功能基本都差不多,而且都主打轻量,安全,易部署。不过其中个人觉得 Waline 是最好看,功能最全的,而且文档做也比较全面,最后我也是用了这个。但不得不提其中 Gitalk 是最有特色的,无需任何数据库配置,直接使用Github issues 存评论,作者想法很赞。
搭建 Waline
官方使用 LeanCloud + Vercel
的流程还是比较完备的,但我使用准备使用 docker + sqlite
来搭建,并迁移原来的 disqus 数据,官方的流程还是缺了点意思,这里记录分享一下。
1. sqlite 数据库
官方准备了一个数据库模版 waline.sqlite , 可以直接点击去下载。里面已经帮你建好了三张表,直接用这个库就好了。
2. 迁移 disqus 数据
- 先登陆 disqus 后台,点击右上角头像,选择
Admin
。选择评论栏目的Export
,导出。
导出的文件会发到邮箱,是一个压缩的 xml,解压后就可以得到一个xml。
- 使用官方的迁移助手将数据转换成一个
CSV
文档。
- 使用数据库工具,将
CSV
数据导入到准备好的waline.sqlite
中。
数据库工具有很多,如 DataGrip, Navicat 等等。在工具中打开下载的 waline.sqlite
, 使用工具的导入功能导入数据,如我用DataGrip导入,需要注意选中第一行为头,然后他会自动给你匹配好字段,对应导入。
这样,sqlite 数据库就准备好了。
3. 搭建后端
直接使用 docker-compsoe.yml
启动服务 和 Nginx , 并在Nginx中配置好转发和证书。
- docker-compose.yml
version: '3.5'
services:
nginx:
image: nginx
container_name: nginx
restart: always
ports:
- 443:443
volumes:
- ${PWD}/certs:/etc/nginx/ssl
- ${PWD}/waline.conf:/etc/nginx/conf.d/waline.conf
depends_on:
- waline
waline:
container_name: waline
image: lizheming/waline:latest
restart: always
volumes:
- ${PWD}:/app/data
environment:
TZ: 'Asia/Shanghai' # 时区
SQLITE_PATH: '/app/data' # sqlite数据控路径
JWT_TOKEN: 'xxxxx'
SITE_NAME: 'Razeen`s Blog' # 站点名称
SITE_URL: 'https://razeen.me' # 站点URL
SECURE_DOMAINS: 'razeen.me,waline.razeen.me' # 安全域名(博客和评论的域名)
AUTHOR_EMAIL: 'xxxx@xxx.com' # 作者的邮箱
SMTP_SERVICE: 'QQ' # 邮件通知,我用的QQ
SMTP_USER: 'xxx@qq.com'
SMTP_PASS: 'xxxxxx'
SMTP_SECURE: true
IPQPS: 20 # 评论限速 一个IP 20s一次
DISABLE_REGION: true # 隐藏评论归宿地
这里主要注意一下这些环境变量,更多的环境变量可看官方文档。我这里主要放开了一点限速IPQPS
,和配置了邮件作为我评论的通知渠道。
配置好Nginx转发的配置
waline.conf
下面是我的配置供参考,其中需要申请证书,可以去FreeSSL申请。
server {
listen 443 ssl;
server_name waline.razeen.me;
server_tokens off;
http2 on;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets on;
# ssl_trusted_certificate /etc/nginx/ssl/ca.pem;
# ssl_stapling on;
# ssl_stapling_verify on;
access_log /var/log/nginx/access_waline.log main;
error_log /var/log/nginx/error_waline.log;
location / {
proxy_pass http://waline:8360;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
# cache
add_header Cache-Control no-cache;
expires 12h;
}
}
然后把数据库放在配置目录下,就可以启动了。做好域名解析后,访问评论站点就可以看到评论框了。
4. 注册后台管理
进入 url + ‘/ui’, 如我的 https://waline.razeen.me/ui 会自动跳转后台,注册账户即可,第一个账户就是管理员了。后台可以用来管理评论和用户。
5. 修改博客评论
像 hugo 找到主题的评论模版(如comments.html
),加入如下代码, 更新即可(我把图片和梗图表情的关了)。
<!-- 样式文件 -->
<link
rel="stylesheet"
href="https://unpkg.com/@waline/client@v3/dist/waline.css"
/>
<div id="tcomment"></div>
<!-- 脚本文件 -->
<script type="module">
import { init } from 'https://unpkg.com/@waline/client@v3/dist/waline.js';
init({
el: '#tcomment',
serverURL: 'https://waline.razeen.me/',
search: false, // 关闭梗图搜索
reaction: true,
// emoji: false,
imageUploader: false // 关闭图片上传
});
</script>
这样自建的 waline 就准备就绪啦,又愉快的折腾了一下~