开源评论系统isso
评论功能是静态博客系统的一个特色,是阅读者交流学习的一种手段。当前国内外都开源出很多评论系统, 包括企业或者个人贡献的,但是很多评论系统临时开放出来,过一段时间则关闭停止服务,所以给自己的博客选择一款稳定 的评论系统非常重要。
对于静态博客来说,由于它缺失后台服务,所以用户的评论数据都是落地在第三方评论系统中,通过第三方提供的JS脚本来实现阅读评论功能。
- 优点
博客不用搭建后台服务、数据库等就实现了一个完整的评论系统 - 缺点
数据在第三方,如果第三方评论系统停止服务,那么评论数据面临丢失,博客评论功能瘫痪,需要重新更换其他评论组件
总结当前一些流行的评论组件现状
- Disqus
Disqus是国外最流行的大厂评论系统,大多静态网站生成器Hexo、Hugo、Jekyll等都默认支持Disqus,但是国内无法访问,必须翻墙。 - 多说
国内最流行的评论系统,2017年已停止提供服务。 - 畅言
需要备案,严格审核,有限制。 - gitment
gitment是由个人提供出来的评论系统,它依托github的仓库issue功能,代理了github的授权,每个页面都必须手动初始化评论,
现在这个作者居然不维护了,它的授权代理服务都宕机了。本来感觉每个页面都需要手动初始化评论这个还能忍受,毕竟github的
人气非常庞大, 但是个人提供的服务挂掉很久都没人维护了。 - others
talkatv 、juvia 等
总结了一下,将评论数据落地在第三方系统中,还不如自己再搭建一个,数据自己管理和备份,这种评论系统也不占用多少资源,并且有很多现成的开源, 一键部署就可以提供服务了。看了一些评论系统之后,最后我选择了isso 。
这里我直接选择了汉化版的isso,其实无非是修改了开源isso的html样式。
- isso有非常丰富的wiki文档
- 后台服务端部署超级简单,提供了API接口
- HTML嵌入JS超级简洁
- isso通过参数配置提供了很多控制功能,比如邮件提醒、评论修改、评论速度等
- 支持匿名评论
- 最重要的一点是isso自带管理后台
isso是用Python语言编写的软件,后端数据库是SQLite,支持Disqus以及Wordpress的数据导入。下面介绍一下如何部署,根据官网文档 介绍,花几分钟就能把服务部署起来。 这里推荐大家使用Docker容器方式启动isso服务,这样就避免了环境的配置以及依赖组件的安装。isso的镜像已经提供在docker hub上,地址 https://hub.docker.com/r/wonderfall/isso 。 这个isso镜像ui是汉化版的,是其他开发者上传的,使用任何docker镜像之前,都应该先阅读一遍其Dockerfile文件。
FROM alpine:3.9
ARG ISSO_VER=0.12.2
ENV GID=1000 UID=1000
RUN apk -U upgrade \
&& apk add -t build-dependencies \
python3-dev \
libffi-dev \
build-base \
&& apk add \
python3 \
sqlite \
openssl \
ca-certificates \
su-exec \
tini \
&& pip3 install --no-cache "isso==${ISSO_VER}" \
&& apk del build-dependencies \
&& rm -rf /tmp/* /var/cache/apk/*
COPY run.sh /usr/local/bin/run.sh
RUN chmod +x /usr/local/bin/run.sh
EXPOSE 8080
VOLUME /db /config
LABEL maintainer="Wonderfall <wonderfall@targaryen.house>"
CMD ["run.sh"]
接着编写isso的启动配置文件isso.conf,大部分配置参数是可选的,这里提供了一份完整的默认配置以及注释https://github.com/posativ/isso/blob/master/share/isso.conf
。
启动时必须的最少配置参数
[general]
dbpath = /var/lib/isso/comments.db
host = https://example.tld/
[server]
listen = http://localhost:1234/
其中host参数是比较重要的,这个host可以配置多个,类似一个白名单的作用,listen是服务器启动的监听地址。isso后端支持配置多个网站同时使用其作为评论系统, 这里提供稍微丰富一点的真实配置。
[general]
dbpath = /db/comments.db
host = https://www.kingfsen.cn/
max-age = 15m
notify = stdout
reply-notifications = false
gravatar = false
gravarar-url = https://www.gravatar.com/avatar/{}?d=identicon
[moderation]
enabled = false
purge-after = 30d
[server]
listen = http://0.0.0.0:8080
public-endpoint =
reload = off
profile = off
[guard]
enabled = true
ratelimit = 10
direct-reply = 3
reply-to-self = false
require-author = false
require-email = false
然后将isso启动配置文件放在机器的/data/isso/config目录下。 拉取镜像
docker pull wonderfall/isso
启动isso容器
docker run -d --name isso -p 8080:8080 -v /data/isso/config:/config -v /data/isso/db:/db wonderfall/isso:latest
发送请求验证一下
curl http://localhost:8080/count
容器启动之后,isso容器服务端口映射到了宿主机的8080,同时/data/isso/db目录将备份了评论数据。由于我的博客也是部署在当前机器上的nginx中, 接着增加一段配置,nginx代理了isso的服务接口,HTML页面通过域名跨域请求isso服务。
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;
}
因为我们的博客一般默认是location / ,所以这里isso的服务接口都默认以/isso开头,发送请求验证一下,我的nginx配置的域名https://www.youendless.com 。
curl https://www.youendless.com/isso/count
如果需要开启管理后台需要在isso.conf中增加admin相关配置,密码请记得复杂一点,毕竟通过开发者工具即可获取isso的管理后台。
[admin]
enabled = true
password = goodnight;
然后浏览器直接访问https://www.youendless.com/isso/admin
,密码输入正确之后回车即可进入,虽然UI是丑了一点,但是这么精简的东西,实用才是最好的。
isso后端服务没问题,则可以开始在HTML中添加isso的js脚本了。hugo生成的website就是方便,直接新建一个模板isso.html, 通过定义block,在要添加评论的地方直接引入接口,没有模板,则直接把下面的内容添加到需要评论的HTML中即可,有模板,直接将如下内容添加模板中,再把模板嵌入到需要的其他模板中即可。
<script data-isso="https://www.youendless.com/isso/"
src="https://www.youendless.com/isso/js/embed.min.js"></script>
<section id="isso-thread"></section>
注意data-isso属性,请根据在nginx中转发路径进行配置,如果isso服务与网站在同一个ngxin下,可以直接data-isso=“/isso/“,src属性也一样去除域名即可。 如果配置错误,按F12打开浏览器调试面板,可以看见js文件请求失败。 在本地测试的时候,URL是localhost,不是isso中配置的host,所以本地测试会报错。每篇文章下面的评论,就是通过isso实现的,支持匿名评论,随心所欲的交流。