使用开源评论系统 isso

一个开源的评论系统,可惜已经不太维护了,于是我进行了一些简单的修改,并做好了 Docker 镜像。

我这两天还在寻找合适的评论系统,主要是因为当前可用的评论系统都不能满足基本的要求。我的基本要求其实也就两点,第一,可以通过邮箱直接评论,不需要注册。第二,在有人回复的时候可以发送邮件进行通知。同时,评论者被回复时也可以收到相应的通知。上一篇 中提到的 Valine 勉强支持,可惜 Valine 在安全性上存在很大的问题。Livere 总的来说还不错,但缺乏邮件提醒功能。最终,我还是使用了一个开源评论系统 isso,并进行了一部分的调整,部署在了我自己的服务器上。我进行了一些修改,并已经做好了 Docker 镜像,可供直接拉取使用。

2019.2.1 更新:本站现在使用 Disqus 作为评论系统。

isso 介绍

isso 是一个用 Python 写的开源评论系统,目前在 GitHub 上已经超过 3k 个 stars,然而这个项目在前几年相对活跃,最近几年作者已经很久没有维护了。主要是其他的一些参与者在帮忙维护,因此 isso 的 官方网站 中所使用的版本已经是很老的版本了。而 GitHub 上最新的版本相比原作者大概在 2016 年提交的最后一个版本多了许多新的特性,比如支持 Gravatar 头像,支持评论回复时邮件提醒等。目前的维护者表示,由于只有原作者有权限在 pip 上提交新版本,更新官方网站等,因此如果你想要安装最新版本,你需要直接从 GitHub 上的 master 分支中拉取最新的代码。如果你使用 pip install 命令来安装的话,你只能得到 2016 年的旧版本。

制作 Docker 镜像

修改 Dockerfile

我最初使用其 GitHub 仓库中提供的 Dockerfile 来自己构建镜像,然而产生了一个关于 defaults.ini 读取错误的 bug,所以我提交了一个 issues #476。解决方法是把其提供的默认的 isso.conf 中的内容覆盖 defaults.ini 即可,后来发现这个问题产生的原因是 defaults.ini 实际上是一个 symlink 文件,而 Windows 不支持 symlink 文件,因此 isso 直接读取了 defaults.ini 作为配置文件,从而产生了错误。另一个问题是,isso 提供的邮件回复模板非常简陋,所以我使用 html 将其进行了修改,我参考了 Vline-Admin 中提供的邮件模板并进行了一部分调整。邮件预览如下所示
mail-preview
我还在配置文件 isso.conf 中添加了一个配置项 [smtp] name,该配置项可以用来指定你的博客名字,这在发送邮件提醒的时候会被用到。

发布 Dockerfile

修改好邮件模板后,我重新构建了 Docker 镜像,并发布到了 kaitohh/isso,如果需要使用可以直接 pull 下来,挂载好配置文件和数据库后即可直接使用。需要注意的是,官网的配置文档已经过时了,你可以直接访问 GitHub 仓库上的 对应文件 来查看最新的文档。

部署到服务器

我编写了 docker-compose.yml 文件用来将 isso 部署到服务器。我通过挂载 /config/db 来导入配置文件和数据库。我还使用了 nginx-proxy 构建外部代理,它通过服务发现自动代理 web 服务器,并且启用了 SSL 支持,通过挂载 /etc/nginx/certs 来导入证书。

docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: '2'
services:
web:
image: kaitohh/isso:latest
volumes:
- ./config:/config
- ./db:/db
environment:
- VIRTUAL_HOST=domain.com
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- "./cert:/etc/nginx/certs"

文件目录结构如下所示
1
2
3
4
5
6
7
8
9
10
deploy/
├── cert
│   ├── domain.com.crt
│   └── domain.com.key
├── config
│   └── isso.cfg
├── db
│   └── comments.db
├── docker-compose.yml
└── Dockerfile

最后通过 docker-compose up 即可启动服务器。

修改样式

isso 自带的样式非常难看,如果要使用自定义的样式,可以将 data-isso-css 设置为 false,然后添加自己的 CSS 样式即可。

总结

isso 由于目前缺乏专业的维护,一些缺陷正暴露出来。比如实现发送邮件的函数实现较差,导致我修改邮件模板的时候是直接硬编码的,这就导致可读性很差,而且非常难以维护。此外,isso 最近添加的一些功能缺乏可配置性,实现方法存在缺陷,导致部分不必要的功能无法关闭,额外消耗了服务器资源。另外,isso 数据库只支持本地的 SQLite3 数据库,导致效率较低,更关键的是数据库无法和服务器分离,这就导致项目本身无法在自动化平台上构建,比如 Heroku,后者支持自动构建镜像,并自动挂载数据库,但由于 isso 的 SQLite 只支持本地,导致 Heroku 无法挂载数据库,数据库和镜像绑定,这在每次重启实例时会丢失数据。

我还查阅了 isso 仓库中的以前 issues 和 PR 记录,发现作者原本是已经计划采用 SQLAlchemy 来连接数据库了 #61 #108,但可能由于各种各样的原因,导致这个 feature 至今仍然没有开发完,另外由于原作者已经很久没有维护,并且代码仓库面临越来越冗余的问题,这个 feature 可能在未来的很长一段时间内也仍然不会支持。

一个成功的开源项目需要良好的社区,持续集成,以及严格规范的 PR 提交制度。isso 作为一个将近 5 年的项目,在一开始受到了热烈的欢迎,但目前正面临不断被淘汰的困境。近年来,又有一些比较优秀的评论系统诞生,比如 Mozilla 的开源项目 Talk 被国外越来越多的新闻媒体采用,Talk 项目集成了 Docker 容器,而且支持 Heroku 的一键部署,目前正受到社区越来越多的欢迎。另外,commento 目前正处于封闭测试阶段,未来会提供免费的评论系统服务,也支持用户自己部署。尽管如此,至少在目前看来,isso 仍然是优秀的开源评论系统,作为个人博客的评论系统应该也足够使用了。

总之,在找到下一个合适的评论系统之前,我仍然会继续使用 isso 评论系统,同时也欢迎访问 我的网站 来查看 isso 评论系统的效果。

评论