logo头像

生而无畏,战至终章

Hexo添加isso评论系统

本文于603天之前发表,文中内容可能已经过时。

Hexo添加isso评论系统

最近用Hexo终于把博客搭建好了,但是一直不满意畅言的评论系统,好用的评论系统比如多说又关闭了,不得已要重新寻找好的评论系统,所以考虑自己搭建 Isso 评论系统

Isso 是基于 Python 写的一套评论系统,用途就是代替以上说的第三方不靠谱平台,而官网的教程坑很多,理解起来难度还是有点大的,但是官网的教程还是有必要看一下的,因为目前Isso的评论搭建比较少了,有些坑,所以我就整理一下基本的教程,尽量可以让所有用户都能自行搭建评论系统。

本教程所使用的VPS环境为CentOS7,root权限。

安装isso

一条命令即可 ,执行命名后的安装目录为/usr/lib/python2.7/site-packages/isso

pip install isso    

关于pip的用法如下:
搜索软件

pip search <search query>

获取某软件信息,比如安装位置

pip show <package name>

配置isso

新建立一个配置文件,文件格式conf或者cfg都可以,我是在home目录建的,路径为/home/isso.cfg,
里面的内容可以直接拷贝isso安装目录下的defaults.ini然后修改即可
以下是我的配置文件

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 基本配置,必须填写
[general]
# 数据库文件
dbpath = /home/comments.db

# 引用 Isso 的 JS 的网站地址
host =
http://starlin.top/
http://www.starlin.top/

max-age = 0
# 评论审核通知方式,如果不开启审核可以不设置,设置了 SMTP 就需要在下面的 [smtp] 设置邮件发送方式
notify = stdout
# 日志记录
log-file = /home/isso/isso.log

# 是否开启评论审核,不需要的话可以写 enabled = false
[moderation]
enabled = false
purge-after = 30d

# 本地服务端设置
[server]
# 需要监听的端口
listen = http://localhost:8080
reload = off
profile = off

[smtp]
username =
password =

# SMTP server
host = localhost

# SMTP port
port = 587
security = starttls
to =
from =
timeout = 10

# 开启评论防火墙,如不需要可以填写 enabled = false
[guard]
enabled = true
# 每个访客一分钟最多可以评论的次数
ratelimit = 2
# 评论回复次数
direct-reply = 3
# 是否可以回复自己的评论
reply-to-self = false
# 是否要求写名字
require-author = true
# 是否要求写 Email 地址
require-email = false

# Misaka Markdown 插件
[markup]
options = strikethrough, autolink, fenced_code, no_intra_emphasis
# 评论开启 HTML 标签
allowed-elements = blockquote,br,code,del,em,h1,h2,h3,h4,h5,h6,hr,ins,p,pre,strong,table,tbody,thead,td,th
# 评论开启 HTML 标签的属性,默认只允许 align 和 href
allowed-attributes = align

# 加密评论的身份方式,如 Email 地址,没有特殊需求可以忽略
[hash]
salt = Eech7co8Ohloopo9Ol6baimi
algorithm = pbkdf2

保存这个文件问,就可以启动isso了

1
isso -c /home/isso.cfg run

如果没有任务错误,就表示启动成功了
然后访问http://youwebsite/isso(比如我的是http://comment.starlin.top/isso/),如果提示一下信息,表示部署成功了,按ctrl+c停止服务

1
2
Bad Request
missing uri query

虽然命令行很方便,但每次VPS重启后都需要启动isso,所以最好的办法就是随系统启动

安装 Supervisor 并配置

Supervisor是一款守护进程,保证isso在后台一直运行
直接用下面命令安装即可

1
pip install supervisor

生成一份配置文件,放在etc目录下

1
echo_supervisord_conf > /etc/supervisord.conf

修改/etc/supervisord.conf文件,在最后加入

1
2
3
4
5
6
7
8
9
[program:isso]
command = isso -c /home/isso.cfg run
directory = /home
user = root
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/isso.log
stderr_logfile = /var/log/supervisor/isso_error.log
environment = LANG="en_US.UTF-8"

生产日志文件目录

1
mkdir -p /var/log/supervisor

然后启动Supervisor

1
supervisord -c /etc/supervisord.conf

若提示一下错误

1
Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.

可以用一下方法先停止supervisord

1
sudo unlink /var/run/supervisor.sock

或者是

1
sudo unlink /tmp/supervisor.sock

当然也可以用kill命令结束掉,先查找

1
ps -ef | grep supervisord

得到如下信息

1
2
root      4309     1  0 Jan30 ?        00:00:12 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 15886 15407 0 02:13 pts/1 00:00:00 grep --color=auto supervisord

执行 kill命令

1
kill -s SIGTERM 4309

测试一下isso是否已启动

1
curl http://comment.starlin.top/isso

开机启动Supervisor

Debian/ Ubuntu 可以是使用如下方法

1
编辑 /etc/rc.local 文件,在 exit 0 前面加入一行 supervisord -c /etc/supervisord.conf 即可

但是CentOS7不一样,方法如下:
进入目录 /usr/lib/systemd/system/,增加文件 supervisord.service,来使得机器启动的时候启动supervisor,文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# supervisord service for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

激活开机启动命令

1
systemctl enable supervisord.service

启动supervisor进程

1
systemctl start supervisord.service

关闭supervisor进程

1
systemctl stop supervisord.service

如果修改了supervisor.service文件,可以通过reload命令来重新加载配置文件

1
systemctl reload supervisord.service

配置Nginx

因为之前搭建Hexo时,已经安装过了Nginx了,我的Nginx目录是/etc/nginx/conf.d/ ,这里只需要配置下就好了
Nginx 配置文件举例如下, Isso 会反代在 youwebsite/isso 目录,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
listen [::]:80;

server_name comment.starlin.top;

location /isso {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Script-Name /isso;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080;
}

配置完这个就可以测试下http://youwebsite/isso/js/embed.min.js(比如我的是http://comment.starlin.top/isso/js/embed.min.js)
这个不能访问,评论系统是不会生效的,然后重启启动Nginx,相关命令如下

1
2
3
4
5
6
启动
systemctl start nginx
停止
systemctl stop nginx
重启
systemctl restart nginx

网站引入isso评论

在主题配置文件中themes\next\layout_partials的comments.swig中添加如下代码即可,添加在div下面
这里需要使用一个二级域名(如:comment.starlin.top),当初我用一级域名在这里被坑了好久

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{% if page.comments %}
<div class="comments" id="comments">
........省略
</div>
<script data-isso="//comment.starlin.top/isso/"
data-isso-css="true"
data-isso-lang="zh"
data-isso-reply-to-self="false"
data-isso-require-author="true"
data-isso-require-email="false"
data-isso-max-comments-top="10"
data-isso-max-comments-nested="5"
data-isso-reveal-on-click="5"
data-isso-avatar="true"
data-isso-avatar-bg="#f0f0f0"
data-isso-avatar-fg="#9abf88 #5698c4 #e279a3 #9163b6 ..."
data-isso-vote="true"
data-vote-levels=""
src="//comment.starlin.top/isso/js/embed.min.js">
</script>
<section id="isso-thread"></section>
{% endif %}

相关说明如下,其中这三条需要和之前的配置文件要一样
data-isso-reply-to-self=”false”
data-isso-require-author=”true”
data-isso-require-email=”false”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
data-isso Isso 安装的 URI

data-isso-css 使用默认的 CSS 如果需要自己改 CSS 则设置成 false

data-isso-lang 默认语言,参考 ISO 639-1 编码,可选语言列表在这儿

data-isso-reply-to-self,data-isso-require-author,data-isso-require-email 需按照 Isso 配置文件来,请保持一致

data-isso-max-comments-top 一页显示的评论数

data-isso-max-comments-nested 最多嵌套评论数

data-isso-reveal-on-click 超出评论数后点击显示的评论数

data-isso-avatar 显示头像

data-isso-avatar-bg 头像背景

data-isso-avatar-fg 头像颜色

data-isso-vote 开启评论的支持和反对

data-vote-levels 评论支持和反对的等级算法,具体请参考官方的文档

好了,大功告成,具体演示可以看本文的效果,有什么不明白的地方可以直接留言。