開源評論系統 Isso 全攻略

zhangnew發表於2019-02-16

部落格評論系統現狀:

  • 多說已經倒閉了,將於 2017.6.31 結束服務
  • Disqus 國內非常不穩定,雖然用了一段時間,但是發現最近好像有廣告了,有很多亂七八糟的請求。
  • 暢言估計和多說差不了多少,沒看到贏利點。
  • 網易雲跟帖,不能設定暱稱,不能匿名評論,加了官方群,都是提問的,管理員不作為。
  • 然後就找到了這個開源的評論系統:Isso

2017.5.1 update:新增微信稽核評論的方法,見:微信稽核開源評論系統 Isso 的評論

官網 https://posativ.org/isso/
Github https://github.com/posativ/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 系統:

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

對於 Fedora/Centos 系統 :

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

注:這個 Development Tools 我沒有安裝成功,但是沒影響

安裝 Isso

~> pip install isso

or

~> 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)

克隆倉庫:

~> 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):

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

安裝 Isso 及其依賴:

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

安裝 JavaScript 模組:

~> make init

優化前的 js:

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

壓縮 js:

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

配置

服務端配置

詳情見文件 https://posativ.org/isso/docs/configuration/server/

自己編寫一個配置檔案 : isso.conf

[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/

<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 的評論,這一點很好。可憐了多說使用者。

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

執行命令:

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

部署

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

gevent

pip install gevent
isso -c my.cfg run

uWSGI

安裝 :

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

配置檔案:

[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

執行:

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

注:該方法執行失敗,有一個 status code 報錯。

gunicorn

我現在用的是這種方式,支援 https

$ pip install gunicorn

執行:

$ 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 這個 pull request我根據這個 pr 實現了該功能)。
  • avatar 頭像不能關聯 gravatar.com 的頭像(自己實現了)。
  • 評論不好管理,常規方法可以通過郵件提醒裡面的連結來刪除評論。非常規方法就要修改資料庫了,sqlite 進入命令列:
ATTACH `comments.db` as isso;
SELECT id,author,text from isso.comments;
DELETE FROM isso.comments WHERE id=87;

轉載自我的部落格 https://zhangnew.com

相關文章