使用开源评论系统isso

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

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

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

本文使用的Docker镜像: kaitohh/isso
本文使用的docker-compose文件: docker-compose.yml

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评论系统的效果。