🌟 写在前面:为什么非要折腾评论系统?

如果你看过我上一篇关于从Halo换到Hexo的文章,大概知道我是个什么样的博主了。

射手座,爱折腾,总觉得“太舒服的地方待不住”。博客从动态换到静态,从有服务器变成没服务器,一切都挺好——除了一个问题:没有评论区了

静态博客就是这样,干净是真干净,寂寞也是真寂寞。写完一篇文章,发出去,然后就没了。不知道有没有人看过,不知道人家看完想说什么,像对着空屋子说话。

有人会说:可以用第三方评论啊,Disqus、 utterances、giscus…… 我都试过。Disqus太臃肿,还带广告;utterances依赖GitHub Issues,国内访问有时抽风;giscus不错,但毕竟数据在GitHub上,总有一种“寄人篱下”的感觉。

作为一个在广东长大的孩子,我骨子里有点“家己人”的情结——自己的东西,最好放在自己家里

于是盯上了Twikoo。


🤔 第一回合:Twikoo是什么?为什么选它?

Twikoo,一个简洁、安全、免费的静态网站评论系统。说来也巧,这名字听着像“Twi”(Twitter)加“koo”(酷),但用起来的感觉,更像“踢开”——踢开那些复杂臃肿的评论方案,回归简单。

它有几个地方特别打动我:

✨ 优点一:数据自己管

Twikoo支持多种部署方式:云开发、Vercel、私有部署、Docker…… 我选的是私有化部署,把评论数据放在自己的服务器上。服务器我有啊,虽然配置不高,但跑个评论系统绰绰有余。数据自主可控,不用担心厂商哪天政策变动、免费额度用完。

✨ 优点二:轻量干净

Twikoo的页面风格简洁,没有多余的东西。支持回复、点赞、表情、图片粘贴,该有的都有,不该有的都没有。访客在昵称栏输入QQ号,会自动补全QQ昵称和邮箱,这个细节挺贴心的。

✨ 优点三:管理方便

内嵌式管理面板,密码登录就能查看评论、隐藏、删除、修改配置。还支持邮件通知、微信提醒(通过Server酱)、QQ提醒(通过Qmsg酱)。有人评论了,我能第一时间知道。

✨ 缺点嘛……不支持IE

这年头谁还用IE?不算缺点。


🛠️ 第二回合:部署前要准备什么?

动手之前,先把家伙事儿备齐:

  • 一台服务器(我用的就是之前跑Halo那台,CentOS 7.x)
  • 一个域名(最好给Twikoo单独配个二级域名,比如twikoo.yourdomain.com
  • Docker环境(没有的话要先装)
  • 一点点耐心(射手座最不缺的就是这个)

📦 第三回合:开始部署(详细步骤版)

第一步:解析二级域名

给Twikoo安排一个专属门牌号。进入你的域名DNS管理后台,添加一条A记录:

  • 记录类型:A
  • 主机记录twikoo(或其他你喜欢的二级域名前缀)
  • 记录值:你的服务器IP地址

解析生效后,可以用ping twikoo.yourdomain.com验证一下。

第二步:用Docker拉起Twikoo容器

方案一:命令行部署(推荐)

登录服务器,执行以下命令:

bash

1
docker run --name twikoo -e TWIKOO_THROTTLE=1000 -p 8181:8080 -v ${PWD}/data:/app/data -d imaegoo/twikoo

这条命令做了几件事:

  • --name twikoo:给容器起个名字
  • -e TWIKOO_THROTTLE=1000:设置每个IP每10分钟最多发表1000条评论(防刷)
  • -p 8181:8080:将服务器的8181端口映射到容器的8080端口
  • -v ${PWD}/data:/app/data:把数据挂载出来,容器删了数据还在
  • -d imaegoo/twikoo:后台运行,使用官方镜像

方案二:宝塔面板部署(可视化)

如果你用的是宝塔面板(9.2.0及以上版本),更简单:

  1. 登录宝塔,左侧导航栏点击Docker,先安装Docker服务(如果没装的话)
  2. 安装完成后,在应用商店中找到Twikoo
  3. 点击安装,配置域名、端口等基本信息
  4. 如果填写了域名,宝塔会自动帮你配置反向代理;如果不填域名,需要勾选“允许外部访问”,然后通过IP+端口访问

第三步:验证容器是否运行

命令行执行docker ps,看到twikoo在列表里,说明运行成功。

浏览器访问http://你的服务器IP:8181,如果看到以下输出,代表Twikoo部署完成:

text

1
Twikoo 云函数运行正常

第四步:配置Nginx反向代理

直接用IP加端口访问,既不优雅也不安全。通过Nginx反向代理,可以实现:

  • 用域名访问(如twikoo.yourdomain.com
  • 后续配置HTTPS
  • 隐藏真实端口,提高安全性

Nginx配置示例:

nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
upstream twikoo {
server 127.0.0.1:8181; # 指向本地运行的Twikoo端口
}

server {
listen 80;
server_name twikoo.yourdomain.com; # 换成你的二级域名

location / {
proxy_pass http://twikoo;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

配置好后,重启Nginx。

第五步:部署SSL证书

为了保证数据传输安全,强烈建议配置HTTPS。

宝塔用户:在反向代理站点中,点击“SSL”选项卡,选择“Let‘s Encrypt”免费证书,开启“强制HTTPS”即可。

命令行用户:可以用Certbot申请证书,然后修改Nginx配置:

nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 443 ssl;
server_name twikoo.yourdomain.com;

ssl_certificate /path/to/your/cert.pem;
ssl_certificate_key /path/to/your/privkey.pem;

location / {
proxy_pass http://twikoo;
# ... 其他配置同上
}
}

server {
listen 80;
server_name twikoo.yourdomain.com;
return 301 https://$server_name$request_uri; # HTTP自动跳转HTTPS
}

配置完成后,访问https://twikoo.yourdomain.com,看到“Twikoo云函数运行正常”,说明HTTPS配置成功。


🎨 第四回合:Hexo前端配置

Twikoo服务端跑起来了,接下来要让博客前端能调用它。

1. 在head中引入Twikoo脚本

打开Hexo主题的配置文件(不同主题位置不同,我用的主题是在layout/_partial/head.ejs),添加:

html

1
<script src="https://cdn.jsdelivr.net/npm/twikoo@1.6.41/dist/twikoo.all.min.js"></script>

版本号可以用最新的,我用的1.6.41。

2. 在文章页添加评论区容器

在文章页模板的合适位置(比如文章末尾),添加:

html

1
<div id="twikoo"></div>

3. 初始化Twikoo

在页面底部添加初始化脚本:

html

1
2
3
4
5
6
7
<script>
twikoo.init({
envId: 'https://twikoo.yourdomain.com', // 换成你的Twikoo地址
el: '#twikoo', // 容器选择器
lang: 'zh-CN', // 语言
});
</script>

不同主题的集成方式略有差异。如果你的主题支持自定义评论(比如Volantis、Icarus等),通常在主题配置文件中直接填envId就行。

4. 重新生成并部署

bash

1
2
3
hexo clean
hexo generate
hexo deploy

🔧 第五回合:后台管理与配置

评论框出来了,现在要进后台设置一下。

首次登录

在评论区右下角,会有一个蓝色的小齿轮图标,点击它。第一次进入会让你设置管理员密码,请务必记住这个密码,忘了会比较麻烦。

登录后,你就可以:

配置邮件通知

在管理面板的“通知”设置里,可以配置SMTP邮箱。有人评论时,你会收到邮件提醒。如果用QQ邮箱,需要获取授权码而不是直接用密码。

配置反垃圾

Twikoo支持腾讯云内容安全,可以用来过滤垃圾评论。腾讯云提供1个月免费试用,到期后按量付费,25元/万条。注意不要买套餐,对个人博客来说太浪费了。

个性化设置

你还可以自定义:

  • 评论框背景图片
  • “博主”标识文字
  • 通知邮件模板
  • 表情列表
  • 必填项(昵称/邮箱/网址)

❓ 第六回合:常见问题

Q:容器重启后数据会丢吗?
A:不会。因为我们挂载了-v ${PWD}/data:/app/data,数据保存在宿主机的data文件夹里。只要这个文件夹在,重新运行容器数据依然保留。

Q:为什么用私有化部署而不是云开发?
A:云开发有免费额度限制(比如腾讯云每日读取次数限制),超出要付费。私有化部署只要服务器不宕机就永久可用,数据完全自主可控。

Q:以后想升级Twikoo怎么办?
A:用Docker的话,拉取新镜像,重新运行容器就行。数据卷挂载着,升级不会丢数据。我之前用Node私有部署,几年后想升级,因为node版本太老各种报错,换了Docker真香。

Q:忘记管理员密码怎么办?
A:可以查看Twikoo官方文档的解决方案,或者在服务器上找找配置文件(数据卷里的data文件夹)。


🌈 最后想说

折腾了两天,终于把Twikoo跑起来了。

现在每篇文章下面,都有一个小小的评论区。像给每篇文字开了一扇窗,等着有缘人路过时,探头进来说句话。

我知道静态博客配评论系统,多少有点“逆潮流”。现在谁还在博客评论区聊天啊?想聊天的都去微博、去小红书、去微信群了。

但我还是喜欢这种感觉——你在我的地盘上留言,我在我的地盘上回复。没有算法推荐,没有信息流干扰,就是两个人,隔着屏幕,说几句话。

像小时候在老家的院子里,有人路过,喊一声“食咗饭未”,你应一声“食咗,你咧”。

简单,但真实。

如果你也折腾了Twikoo,遇到什么问题,或者有什么心得,欢迎在下面留言——当然,前提是你已经折腾好了评论区,才能在这篇文章下面留言。这个套娃还挺有意思的。


Damon_Zhang
2026年3月12日
广东,窗外有风,适合折腾代码