开源评论系统 Isso 全攻略

博客评论系统现状:

  • 多说已经倒闭了,将于 2017.6.31 结束服务
  • Disqus 国内非常不稳定,虽然用了一段时间,但是发现最近好像有广告了,有很多乱七八糟的请求。
  • 畅言估计和多说差不了多少,没看到赢利点。
  • 网易云跟帖,不能设置昵称,不能匿名评论,加了官方群,都是提问的,管理员不作为。
  • 然后就找到了这个开源的评论系统:Isso

2017.5.1 update:新增微信审核评论的方法,见:微信审核开源评论系统 Isso 的评论

官网在此 https://posativ.org/isso/

安装

节选并翻译自官方文档:https://posativ.org/isso/docs/install/

使用 pip 安装

要求:

  • Python 2.6, 2.7 or 3.3+ (+ devel headers)
  • SQLite 3.3.8 +
  • C 编译器

先安装 python 和依赖

Debian/Ubuntu 系统:

1
~> sudo apt-get install python-dev sqlite3 build-essential

对于 Fedora/Centos 系统 :

1
2
~> sudo yum install python-devel sqlite
~> sudo yum groupinstall "Development Tools"

注:这个 Development Tools 我没有安装成功,但是没影响

安装 Isso

1
~> pip install isso

or

1
~> easy_install isso

注:我是用 Python 2 安装的,在 Python 3 上面报 sqlite3 的错误,没法用。

使用操作系统的包管理器安装

注:上述方法我没有实验

从源码安装

要求:

  • Python 2.6, 2.7 or 3.3+ (+ devel headers)
  • Virtualenv
  • SQLite 3.3.8 or later
  • a working C compiler
  • Node.js, NPM and Bower(安装 nodejs 后 可以使用 npm 安装 Bower)

克隆仓库:

1
2
~> git clone https://github.com/posativ/isso.git
~> cd isso/

注:截止2017.3.30,最新版为 0.10.7-dev ,经测试没法用,各种404。后来从 github Release 下载的 0.10.5 和 0.10.6 均正常。

创建一个虚拟环境(推荐,我没用,我用的 pyenv):

1
2
~> virtualenv .
~> source ./bin/activate

安装 Isso 及其依赖:

1
2
~> python setup.py develop # or `install`
~> isso run

安装 JavaScript 模块:

1
~> make init

优化前的 js:

1
2
<script src="/js/config.js"></script>
<script data-main="/js/embed" src="/js/components/requirejs/require.js"></script>

压缩 js:

1
2
~> npm install -g requirejs uglify-js jade
~> make js

配置

服务端配置

详情见文档 https://posativ.org/isso/docs/configuration/server/

自己编写一个配置文件 : isso.conf

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
[general]
; 数据库位置,注意检查权限,如果没有会自动创建。
dbpath = /var/lib/isso/comments.db
; 博客的地址,可以添加多个,比如 http 和 https
host =
http://localhost:4000/
http://zhangnew.com/
https://zhangnew.com/
; 评论通知,使用 smtp
notify = smtp
[server]
; 监听的地址和端口 : 0.0.0.0 代表任何人可以访问
listen = http://0.0.0.0:8001/
[smtp]
username =
password =
host = smtp.mxhichina.com
port = 25
security = none
to =
from =
timeout =
[guard]
enabled = true
ratelimit = 2
; 评论数量限制
direct-reply = 30
; 是否允许回复自己
reply-to-self = true
; 是否必须填写作者
require-author = false
; 是否必须填写邮箱
require-email = false

客户端配置

详情见文档 https://posativ.org/isso/docs/configuration/client/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script data-isso="/prefix/"
data-isso-css="true"
data-isso-lang="ru"
data-isso-reply-to-self="false"
data-isso-require-author="false"
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="https://zhangnew.com/js/embed.js"></script>

使用

导入 Disqus 或 Wordpress 的评论,这一点很好。可怜了多说用户。

1
isso -c /path/to/isso.conf import disqus-or-wordpress.xml

运行命令:

1
isso -c /path/to/isso.conf run

部署

文档: https://posativ.org/isso/docs/extras/deployment/

gevent

1
2
pip install gevent
isso -c my.cfg run

uWSGI

安装 :

1
2
~> apt-get install build-essential python-dev
~> pip install uwsgi

配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
[uwsgi]
http = :8080
master = true
; set to `nproc`
processes = 4
cache2 = name=hash,items=1024,blocksize=32
; you may change this
spooler = /tmp/isso/mail
module = isso.run
; uncomment if you use a virtual environment
; virtualenv = /path/to/isso
env = ISSO_SETTINGS=/path/to/isso.cfg

运行:

1
2
~> mkdir /tmp/isso/mail
~> uwsgi /path/to/uwsgi.ini

注:该方法运行失败,有一个 status code 报错。

gunicorn

我现在用的是这种方式,支持 https

1
$ pip install gunicorn

运行:

1
2
$ export ISSO_SETTINGS="/path/to/isso.cfg"
$ gunicorn -b 0.0.0.0:8001 -w 4 --certfile=certificate.crt --keyfile=private.key --preload isso.run

其他部署方式

见文档:

  • mod_wsgi
  • mod_fastcgi
  • Openshift

优缺点

优点

  • 自己对评论系统有完全的控制权。

缺点

  • 不支持回复评论时通知评论作者, Isso 的作者在考虑要不要 merge 这个 pr(我自己根据其中的一个 pr 实现了该功能)。
  • avatar 头像不能关联 gravatar.com 的头像(自己实现了)。
  • 评论不好管理,常规方法可以通过邮件提醒里面的链接来删除评论。非常规方法就要修改数据库了,sqlite 进入命令行:
    1
    2
    3
    ATTACH 'comments.db' as isso;
    SELECT id,author,text from isso.comments;
    DELETE FROM isso.comments WHERE id=87;
如果你不是非常有钱,请不要捐赠,土豪随意
0%