博客评论系统

博客评论系统

选型

  1. Disqus,需要翻墙,不过我不觉得是什么问题。
  2. 来必力,韩国的评论系统,自带中文,无需翻墙。感觉比Disqus要友好。
  3. Valine,开源的前端评论框架,数据保存在leancloud里。leancloud貌似是国内服务,注册需要手机,告辞。
  4. utterances、gitalk、gitment、vssue等issue系,利用github的issue实现的评论系统。数据难以备份和迁移,对于每一页的博文都要手动去初始化,略有麻烦。然后看到手记4:谈谈Gitment中泄露secret的前因后果与解决方法一文,说了一句卧槽,告辞。
  5. commento,开源的评论系统,服务端可以自己部署,不过依赖于PostgreSQL数据库,太小题大做了,管理麻烦,下一个。
  6. Statiman,开源的评论系统,服务端可以自己部署,将评论保存在yaml或者json文件,然后保存到github库上。很方便对数据进行备份迁移,看来一下部署教程有点复杂,自己部署服务数据还不在自己手上,作罢。
  7. Isso,也是个开源的评论系统,服务端好像是用php写的,占几十m内存,数据库用sqlite,docker部署,备份管理简单。

最后我还是选择了Isso。由于Disqus被墙,也不是很好看,所以本来我是想用来必力的了。但是基于能不注册就不注册,数据能在自己手里就在自己手里的原则,最后还是选择了自己搭建,也就几十M内存,还过得去。

Isso的配置文件

Isso的配置文件默认叫isso.conf,这是我的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
[general]
# SQLite3数据库位置
dbpath = /db/comments.db

name = isso

# 您的网站。如果Isso无法连接到至少一个站点,则您将启动过程中收到警告,注释很可能无法正常运行。
# 我建议第一个值是用作回退的非SSL网站
host =
http://localhost/
https://domain.com/

# 时间范围,允许用户编辑/删除自己的评论。
max-age = 15m

[admin]
enabled = true

# 管理员访问密码
password = password

[server]
# 监听的地址
listen = http://0.0.0.0:8080/
# 管理页面的url前缀
public-endpoint=//domain.com/isso

[moderation]
# 开启评论审核
enabled = true
# 30日未审核的评论字段删除
purge-after = 30d

[guard]
# 启用基本的垃圾邮件防护功能,例如每个IP地址的速率限制

# 启用防护,在生产中建议使用。对于调试目的没有用。
enabled = true

# 每分钟最多只能有N条新评论。
ratelimit = 10

# 直接对线程进行多少注释 ,防止简单而 while true; do curl ...; done.
direct-reply = 1

# 允许评论者在仍然可以编辑评论时回复自己的评论。 编辑时间段结束后,评论者仍然可以回复自己的评论。 不要忘记配置客户端。
reply-to-self = false

# 强制评论者在“作者”字段中输入值。 不对提供的值执行验证。 不要忘记相应地配置客户端。
require-author = true

# 要求评论者输入电子邮件地址(注意:未对提供的地址进行验证)。 不要忘记配置客户端。
require-email = false

安装Isso

Isso可以使用docker安装,就很方便了,我是用的是wonderfall/isso。不过我试过在windows安装,windows下会报错,貌似不支持。/db目录下保存着sqlite文件,配置文件在/config下。

1
2
docker volume create isso_data
docker run -d --name isso --restart=always -p 8080:8080 -v isso_data:/db -v /config:/config wonderfall/isso

caddy反代

其中transparent会传递请求来源的ip等头信息,会影响评论频率的限制。然后就可以进https://domain.com/isso/admin管理后台里。

1
2
3
4
5
6
7
8
domain.com {
gzip
proxy / http://127.0.0.1/
proxy /isso http://127.0.0.1:8080 {
without /isso
transparent
}
}

如果你在本地用http://localhost/测试,或者直接进http://domain.com:8080/admin,应该会一切正常,但是进https://domain.com/isso/admin,或者在博文页面检查评论组件是否加载成功,就会发现失败。isso默认http协议,js和css会加载不出来,和导致405 Method Not Allowed。

解决方案有两个,第一个是在caddy里加一个响应头Content-Security-Policy: upgrade-insecure-requests。浏览器收到这个响应头后会把页面中所有的http请求自动升级为https请求,如果https资源不存在也不会fallback直接报错。方案二是在isso的配置文件里指定public-endpoint,这样子isso就会在url前以public-endpoint的值为开头,推荐这种方法。

客户端代码

在需要放置评论组件的地方插入这个html,id="isso-thread"是必须的,貌似被写死了。

1
<section id="isso-thread"></section>

然后加载一个js。其中js的url一开始我以为是从cdn里加载的,搞了好久之后我查发现可以直接从isso服务端里加载!!!而data-isso是isso的api的地址。所以在caddy的isso路径下进行反代的话,其实就是下面这样。
1
<script data-isso="/isso/" src="/isso/js/embed.min.js"></script>

其余的详看官网https://posativ.org/isso/

参考文章:

使用Statiman给博客提供评论功能(一)

搭建一个不需要自己开服务器的纯静态博客

为博客添加评论系统

手记4:谈谈Gitment中泄露secret的前因后果与解决方法

评论系统折腾录

静态博客评论系统的比较及选择

几种第三方评论系统的简单主观评测

静态博客评论系统选择对比

静态博客第三方评论系统的探索

使用开源评论系统 isso

开源评论系统isso

自建评论系统 Isso Commento

Commento 安装配置

使用 Isso 搭建评论系统

Ubuntu 18.04 搭建Isso评论系统 教程

为博客添加staticman评论组件

Jekyll 评论系统折腾记

开源评论系统 Isso 全攻略

开源评论框 isso 后台无法通过 HTTPS 访问的解决方法

Nginx下安装isso开源评论系统用于Hugo以及幻景关

一劳永逸,搭建ISSO开源评论系统全攻略教程

ISSO 评论系统部署攻略


博客评论系统
https://cellargalaxy.github.io/posts/折腾/12.博客评论系统/
作者
cellargalaxy
发布于
2020年4月2日
许可协议