惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
T
Threatpost
P
Palo Alto Networks Blog
NISL@THU
NISL@THU
O
OpenAI News
Project Zero
Project Zero
G
GRAHAM CLULEY
P
Privacy International News Feed
A
Arctic Wolf
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
D
Docker
aimingoo的专栏
aimingoo的专栏
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
W
WeLiveSecurity
P
Proofpoint News Feed
腾讯CDC
Cloudbric
Cloudbric
S
Secure Thoughts
C
Check Point Blog
博客园 - Franky
T
The Exploit Database - CXSecurity.com
T
Troy Hunt's Blog
GbyAI
GbyAI
Security Archives - TechRepublic
Security Archives - TechRepublic
Application and Cybersecurity Blog
Application and Cybersecurity Blog
月光博客
月光博客
C
Cyber Attacks, Cyber Crime and Cyber Security
I
Intezer
TaoSecurity Blog
TaoSecurity Blog
L
Lohrmann on Cybersecurity
V
Visual Studio Blog
F
Fortinet All Blogs
博客园 - 叶小钗
C
CXSECURITY Database RSS Feed - CXSecurity.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
C
Cisco Blogs
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research

atpX

自建 S3 兼容对象存储服务 Garage 听风的歌 偶尔是深夜就好了 新玩具 AirPods Pro 3 公交车上的时间 从 WHOIS 到 RDAP 通过 WireGuard 访问 NFS 共享文件 自建音乐串流服务探索 我停止了探索 Fediverse 互联网背景噪音 我的数字生活降级 小城与确定性的墙 一只特立独行的猪 Fediverse 与社交 承认的勇气 mediaX - 轻量书影音记录管理工具 我的博客写作流程 网站新增 Misc 页面 擅长对线的鲍勃 在 Chroot 环境下使用 Rsync 同步 再见 JavaScript 当我玩博客时我在玩什么 为什么我的博客没有友链页面 小熊猫与大熊猫 (HDR 照片测试) 是时候为网站开启 HTTP/3 支持了吗 使用 AdGuard Home 搭建自用 DoH 服务 谈谈读书与消遣 2023 年终总结 西安两日游 从 AirPods「升级」到 EarPods Docker 搭建去中心化的微博客平台 Mastodon 聊聊 iPhone 15 Pro 使用感受 能否将 TOTP 二次验证存放在密码管理器里 认识史蒂夫·乔布斯 与“锤哥”克里斯·海姆斯沃斯一起养生 逃离爆炸的信息 你想活出怎样的人生 重温《龙珠》动画 为什么关闭评论 从域名注册商到 DNS 服务,找到自己的组合 如何提高用户网页阅读体验 从 Typecho 迁移到 Hugo 个人博客的最终归宿是静态网站吗 我选择了放弃 jQuery 关于我的小破站折腾速度优化这件事 记一次家庭网络折腾 贴一些 SmokePing 记录 我的域名邮箱选择 不存在的语录 Typecho 评论验证插件 CaptchaPlus 谈谈写字这件事 新的网站 Logo 探索 曲线解决 Typecho 图片占位抖动问题 自建 vaultwarden / bitwarden_rs 密码管理器 使用 Plausible 自建网站流量统计分析工具 如何优雅地徒手剥开火腿肠 简单的集中隔离生活记录 新玩具 M2 MacBook Air 使用 acme.sh 申请 Google 公共证书 Docker 搭建去中心化的微博客平台 Misskey 搭建 Lsky Pro 兰空图床 折腾树莓派系统的一天 我的吉卜力之旅 使用 Uptime Kuma 自建服务器/网站在线率监控 Spartan Host Review - Best Hosting & Service Support Debian 下 Nginx 配合 Fail2Ban 减少恶意扫描和攻击 升级 Typecho 到最新开发版本 v1.2.0 Linux rm 命令详解 Debian 系统安装 Docker 教程 BandwagonHost - Reliable Blog and Business VPS Hosting 推荐 5 款免费开源的网站流量分析统计工具 搭建 Shynet 网站流量统计分析工具 聊聊 DDoS 攻击那些事 Hugo 使用 Fancybox 实现图片灯箱/放大功能 从 Debian 10 升级到 Debian 11 教程 使用 Umami 自建网站流量统计分析工具 Linux 一次执行多个命令的 3 种方式 Typecho 修改永久链接后旧链接 301 跳转到新链接 从不同需求推荐几家稳定可靠的 VPS 服务商 Build EchoIP service with Docker 浅谈一下这些年折腾过的 VPS 单线复用解决一根网线同时 IPTV 和宽带问题 不完全吃灰的树莓派 开发一个自己的 Telegram Bot 使用 Nginx 实现 TCP 四层反向代理 画画真难 我读村上春树 使用 acme.sh 自动签发和更新证书 卡拉马佐夫式悲剧 安装 File Browser 轻量网盘工具 新玩具树莓派到手 Linux 定时自动备份数据到 OneDrive/Google Drive 记一次服务器崩溃 使用 rsync 同步文件 短信的消失 幻灭的艺术家 新玩具戴尔 S2721DGF 开箱 蝴蝶 用 Docker 整合 SeafilePro 搭建私人云盘 搭建自己的 kms 服务器
使用 Isso 为 Hugo/Hexo 等静态网站添加评论功能
ATP · 2021-08-30 · via atpX

评论功能一直是 Hugo、Hexo 等静态博客的一个痛点,我观察到的不少站长都会选择 Disqus 引入评论功能,但由于这是个 404 网站,大陆用户的体验会很差,而且会收集各种隐私数据,自然不是一个很好的选择。

我另一个 Hugo 搭建的网站一直在纠结要不要添加一个评论功能,添加了貌似也没人评论,而且说不定会有很多 Spam 信息,但是不添加总觉得缺少点什么,没有互动性,最后还是准备加一个提升 5 点功能分。Hugo 官网推荐的几个评论程序我都看了一遍,发现其中的 Isso(可以点击去官网看看效果)非常符合我的需求,而且是自托管的,速度和连接性有保证,不需要注册就可以评论,同时界面十分简洁美观,自然得好好折腾一下。

isso-comment

Isso 是一个用 Python 语言编写的开源(基于 MIT 协议)评论系统,数据库使用的是轻量级的 SQLite,这点十分好评,部署起来也比较简单。虽然我最搭建的时候遇到了个小问题,用的是二级域名反代,可是一启动 Isso,二级域名就会自动跳转到根域名导致 js 文件 404,折腾一晚上也没有解决,最后不得不搭建在二级目录下。

环境准备

Isso 有多种搭建方式,从 Pypi 安装、构建 Docker 镜像安装或者从源文件安装等,具体信息你可以从官网文档了解,这里我选择了最简单的直接使用 Python 的 Pip 安装。

我的系统环境是 Debian 11,默认带有 Python 3.9 版本(如果你想升级到 Debian 11 的话,可以参考这篇文章),以下操作用 root 用户展示,请根据自己的情况修改命令。

建议用 useradd 为 Isso 创建一个用户并使用虚拟环境安装,方便管理,首先安装 pip3:

apt install python3-pip sqlite3 build-essential

安装 Virtualenv:

pip3 install virtualenv

在合适的位置创建工程目录:

cd /home/isso
virtualenv venv

激活 Virtualenv 环境:

source venv/bin/activate

接下来的依赖就会安装到虚拟环境中,要退出环境的话使用 deactivate 命令。

安装 Isso

在 venv 环境中运行:

pip3 install isso

会自动安装好 isso 所需的模块,接下来写一个配置文件:

vim /home/isso/isso.cfg

下面是一个示例:

[general]
# 数据库文件位置
dbpath = /home/isso/comments.db

# 你准备部署的主机域名,多个域名用换行隔开,例如
# host = 
#   http://example.com
#   https://example.com
#   https://example.org
host = https://example.com/

# 部署多个 isso 需要用到,不然可以删除
name = isso

# 允许用户修改/删除评论的最长时间
max-age = 5m

# 新评论提醒方式,默认为 stdout,我这里选择通过邮件提醒,后面需要设置 smtp 信息
notify = smtp

# 日志文件,可以不开启
log-file = 

# 使用 Gravatar 头像,如果评论者没有设置邮箱会随机生成
gravatar = true
gravatar-url = https://cn.gravatar.com/avatar/{}?d=identicon

[moderation]
# 是否开始评论审核,以及多少天未审核的评论自动删除
enabled = false
purge-after = 30d

[server]
# 需要监听的地址
listen = http://localhost:8080/

[smtp]
# smtp 设置,如果前面未选择可以删除
username = 
password = 
host = 
port = 
security = 
to = 
from = 
timeout = 

[guard]
# 开启 Spam 过滤
enabled = true

# 每分钟最多评论数
ratelimit = 2

# 评论最多回复次数
direct-reply = 3

# 能否回复自己的评论
reply-to-self = false

# 评论必须输入用户名
require-author = true

# 评论必须输入邮箱
require-email = true

[hash]
# 加密邮箱地址的方式
salt = Eech7co8Ohloopo9Ol6baimi
algorithm = pbkdf2

[admin]
# 是否开启后台管理,开启后通过 your-url/admin 访问
enabled = true
password = secret

另外还有 [markup][rss] 等选择我没有写上,完整的功能设置请参考官方文档

运行一次进行测试,检查有没有报错:

isso -c /home/isso/isso.cfg run

Nginx 反代

下面是一个使用 Nginx 反代部署到二级目录的示例:

server {
    listen 443 ssl http2 ; 
    listen [::]:443 ssl http2 ; 
    server_name example.com; 

    ...

    location /isso {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Script-Name /isso;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://localhost:8080;
    }
}

记得不要忘了 proxy_set_header X-Script-Name /isso; 这一行,接下来就可以访问 https://example/isso 管理后台,如果你看到 400 Bad Request,说明部署成功,如果是其它错误请自行检查配置和错误信息。

在网站上引入 Isso

引入很简单,只需要一段 script 代码和一段 html 代码即可。

首先是引入 script 代码,这里的部分参数需要和前面的配置文件一致,如果你直接用了我前面的配置,直接复制并修改网址即可即可,否则请根据自己的情况修改,具体的参数介绍请参考官方文档

<script data-isso="https://exapmle.com/isso/"
        data-isso-id="thread-id"
        data-isso-css="true"
        data-isso-lang="zh"
        data-isso-reply-to-self="false"
        data-isso-require-author="true"
        data-isso-require-email="true"
        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-isso-vote-levels=""
        src="https://exapmle.com/isso/js/embed.js"></script>

然后在你想要添加评论功能的地方加入下面的 html 代码:

<section id="isso-thread"></section>

接下来就可以去你的网站看到效果了。

守护进程

花了半天功夫搭建好,自然都投入生产使用了,这里就需要设置守护进程。

Python 守护进程工具不少,如 Supervisor、PM2 等,我个人一直习惯用 systemd 的方式,首先创建一个运行脚本:

vim /home/isso/run.sh

输入以下内容,请根据自己环境目录情况修改:

#!/bin/bash

set -e
source /home/isso/venv/bin/activate
ISSO_CFG=/home/isso/isso.cfg
isso -c $ISSO_CFG

授予脚本权限:

chmod u+x run.sh

添加一个 Isso 服务:

vim /etc/systemd/system/isso.service

输入以下内容,同样需要根据自己的情况修改:

[Unit]
Description=Isso Comment Server

[Service]
Type=simple
User=isso
workingDirectory=/home/isso
ExecStart=/home/isso/run.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

接下来设置开机自启并运行就可以了:

chown -R isso /home/isso/
systemctl daemon-reload
systemctl enable isso
systemctl start isso

从这几天的体验来看(其实没人评论,都是我自己在测试 QWQ),Isso 在各个方面的表现都非常不错,特别喜欢它的简洁,当然你也可以在前面的引入脚本中设置 css 为 false,通过自定义的 css 样式进行美化。

<script src="..." data-isso-css="false"></script>

总的来说,对于静态网站有评论需求的朋友来说,Isso 是一款十分值得推荐使用的评论程序。