评论功能一直是 Hugo、Hexo 等静态博客的一个痛点,我观察到的不少站长都会选择 Disqus 引入评论功能,但由于这是个 404 网站,大陆用户的体验会很差,而且会收集各种隐私数据,自然不是一个很好的选择。
我另一个 Hugo 搭建的网站一直在纠结要不要添加一个评论功能,添加了貌似也没人评论,而且说不定会有很多 Spam 信息,但是不添加总觉得缺少点什么,没有互动性,最后还是准备加一个提升 5 点功能分。Hugo 官网推荐的几个评论程序我都看了一遍,发现其中的 Isso(可以点击去官网看看效果)非常符合我的需求,而且是自托管的,速度和连接性有保证,不需要注册就可以评论,同时界面十分简洁美观,自然得好好折腾一下。

Isso 是一个用 Python 语言编写的开源(基于 MIT 协议)评论系统,数据库使用的是轻量级的 SQLite,这点十分好评,部署起来也比较简单。虽然我最搭建的时候遇到了个小问题,用的是二级域名反代,可是一启动 Isso,二级域名就会自动跳转到根域名导致 js 文件 404,折腾一晚上也没有解决,最后不得不搭建在二级目录下。
环境准备
Isso 有多种搭建方式,从 Pypi 安装、构建 Docker 镜像安装或者从源文件安装等,具体信息你可以从官网文档了解,这里我选择了最简单的直接使用 Python 的 Pip 安装。
我的系统环境是 Debian 11,默认带有 Python 3.9 版本(如果你想升级到 Debian 11 的话,可以参考这篇文章),以下操作用 root 用户展示,请根据自己的情况修改命令。
建议用 useradd
为 Isso 创建一个用户并使用虚拟环境安装,方便管理,首先安装 pip3:
apt install python3-pip sqlite3 build-essential
安装 Virtualenv:
pip3 install virtualenv
在合适的位置创建工程目录:
cd /home/isso
virtualenv venv
激活 Virtualenv 环境:
source venv/bin/activate
接下来的依赖就会安装到虚拟环境中,要退出环境的话使用 deactivate
命令。
安装 Isso
在 venv 环境中运行:
pip3 install isso
会自动安装好 isso 所需的模块,接下来写一个配置文件:
vim /home/isso/isso.cfg
下面是一个示例:
[general]
# 数据库文件位置
dbpath = /home/isso/comments.db
# 你准备部署的主机域名,多个域名用换行隔开,例如
# host =
# http://example.com
# https://example.com
# https://example.org
host = https://example.com/
# 部署多个 isso 需要用到,不然可以删除
name = isso
# 允许用户修改/删除评论的最长时间
max-age = 5m
# 新评论提醒方式,默认为 stdout,我这里选择通过邮件提醒,后面需要设置 smtp 信息
notify = smtp
# 日志文件,可以不开启
log-file =
# 使用 Gravatar 头像,如果评论者没有设置邮箱会随机生成
gravatar = true
gravatar-url = https://cn.gravatar.com/avatar/{}?d=identicon
[moderation]
# 是否开始评论审核,以及多少天未审核的评论自动删除
enabled = false
purge-after = 30d
[server]
# 需要监听的地址
listen = http://localhost:8080/
[smtp]
# smtp 设置,如果前面未选择可以删除
username =
password =
host =
port =
security =
to =
from =
timeout =
[guard]
# 开启 Spam 过滤
enabled = true
# 每分钟最多评论数
ratelimit = 2
# 评论最多回复次数
direct-reply = 3
# 能否回复自己的评论
reply-to-self = false
# 评论必须输入用户名
require-author = true
# 评论必须输入邮箱
require-email = true
[hash]
# 加密邮箱地址的方式
salt = Eech7co8Ohloopo9Ol6baimi
algorithm = pbkdf2
[admin]
# 是否开启后台管理,开启后通过 your-url/admin 访问
enabled = true
password = secret
另外还有 [markup]
、[rss]
等选择我没有写上,完整的功能设置请参考官方文档。
运行一次进行测试,检查有没有报错:
isso -c /home/isso/isso.cfg run
Nginx 反代
下面是一个使用 Nginx 反代部署到二级目录的示例:
server {
listen 443 ssl http2 ;
listen [::]:443 ssl http2 ;
server_name example.com;
...
location /isso {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Script-Name /isso;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080;
}
}
记得不要忘了 proxy_set_header X-Script-Name /isso;
这一行,接下来就可以访问 https://example/isso
管理后台,如果你看到 400 Bad Request
,说明部署成功,如果是其它错误请自行检查配置和错误信息。
在网站上引入 Isso
引入很简单,只需要一段 script 代码和一段 html 代码即可。
首先是引入 script 代码,这里的部分参数需要和前面的配置文件一致,如果你直接用了我前面的配置,直接复制并修改网址即可即可,否则请根据自己的情况修改,具体的参数介绍请参考官方文档。
<script data-isso="https://exapmle.com/isso/"
data-isso-id="thread-id"
data-isso-css="true"
data-isso-lang="zh"
data-isso-reply-to-self="false"
data-isso-require-author="true"
data-isso-require-email="true"
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-isso-vote-levels=""
src="https://exapmle.com/isso/js/embed.js"></script>
然后在你想要添加评论功能的地方加入下面的 html 代码:
<section id="isso-thread"></section>
接下来就可以去你的网站看到效果了。
守护进程
花了半天功夫搭建好,自然都投入生产使用了,这里就需要设置守护进程。
Python 守护进程工具不少,如 Supervisor、PM2 等,我个人一直习惯用 systemd 的方式,首先创建一个运行脚本:
vim /home/isso/run.sh
输入以下内容,请根据自己环境目录情况修改:
#!/bin/bash
set -e
source /home/isso/venv/bin/activate
ISSO_CFG=/home/isso/isso.cfg
isso -c $ISSO_CFG
授予脚本权限:
chmod u+x run.sh
添加一个 Isso 服务:
vim /etc/systemd/system/isso.service
输入以下内容,同样需要根据自己的情况修改:
[Unit]
Description=Isso Comment Server
[Service]
Type=simple
User=isso
workingDirectory=/home/isso
ExecStart=/home/isso/run.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
接下来设置开机自启并运行就可以了:
chown -R isso /home/isso/
systemctl daemon-reload
systemctl enable isso
systemctl start isso
从这几天的体验来看(其实没人评论,都是我自己在测试 QWQ),Isso 在各个方面的表现都非常不错,特别喜欢它的简洁,当然你也可以在前面的引入脚本中设置 css 为 false
,通过自定义的 css 样式进行美化。
<script src="..." data-isso-css="false"></script>
总的来说,对于静态网站有评论需求的朋友来说,Isso 是一款十分值得推荐使用的评论程序。
如果你认为这篇文章还不错,可以考虑为我充电 ⚡️