博客评论系统折腾记录:Twikoo 暂缓,Giscus 先顶上

博客评论系统折腾记录:Twikoo 暂缓,Giscus 先顶上

最近给博客折腾评论系统,原本想一步到位上 Twikoo,让访客不用 GitHub 账号也能评论,体验更接近普通留言板。结果真上手才发现:技术链路倒是不难,真正卡我的居然是 备案和 HTTPS 😅

所以这篇就简单记录一下这次折腾过程:前半段快速说说 Twikoo 为什么先搁置,后半段重点写我最后临时启用 Giscus 的操作流程。等备案处理好以后,随时可以再切回 Twikoo。🚀


一、Twikoo 为什么先放一放?🧩

Twikoo 本身是很适合博客评论的,尤其是国内访客场景:

  • 访客可以填昵称、邮箱、网址直接评论,不强制 GitHub 登录 👍
  • 支持评论管理后台
  • 支持最新评论
  • 和 Anzhiyu 主题的评论弹幕、最新评论模块更搭
  • 私有部署也可以直接 Docker 跑起来

我这边其实已经把 Twikoo 后端跑起来了:

1
2
3
4
5
6
docker run -d \
--name twikoo \
--restart=always \
-p 127.0.0.1:18080:8080 \
-v /opt/twikoo/data:/app/data \
imaegoo/twikoo

服务器本地测试也正常:

1
curl http://127.0.0.1:18080

返回类似这样:

1
{"code":100,"message":"Twikoo 云函数运行正常...","version":"1.7.11"}

但问题出在域名这一步。我的评论子域名打算用:

1
comments.therealman.top

因为服务器是国内机器,域名没有完成备案/接入备案,申请 HTTPS 证书时会被拦住。浏览器里的博客是 HTTPS,评论接口也必须是 HTTPS,否则会被浏览器拦截。于是 Twikoo 只能先暂时搁置。🥲

简单说就是:

Twikoo 技术上能跑,但国内服务器 + 未备案域名,会卡在 HTTPS 和访问这一层。

等后面备案搞定,只要 https://comments.therealman.top 能正常访问,就可以随时切回 Twikoo。这个坑先记着,后面再填。🛠️


二、临时方案:先用 Giscus 顶上 💬

Twikoo 暂时没法上线,那评论总不能继续空着吧?所以我先用了 Giscus

Giscus 的思路很简单:

把博客评论存到 GitHub Discussions 里。

它的优点是:

  • 不需要自己维护数据库
  • 不需要服务器后端
  • 和 GitHub 仓库天然绑定
  • 配置好以后加载很稳
  • 适合静态博客临时快速上线评论功能 ✨

缺点也很明显:

  • 评论者需要 GitHub 账号
  • 严格来说不是“谁都能评论”
  • 最新评论、弹幕这类 Twikoo 功能就先用不了

对我来说,它现在就是一个很合适的临时方案:先让评论区活起来,后面备案完成再切回 Twikoo。😎


三、Giscus 的准备工作 🧱

1. 准备一个评论仓库

我单独建了一个 GitHub 仓库来放评论:

1
ikunkunkunkunkunkun/ssman-comments

这个仓库要注意几点:

  • 仓库必须是 Public
  • 要开启 Discussions
  • 要有一个讨论分类,比如 General
  • 要安装 Giscus App

这样 Giscus 才能把每篇文章对应到 GitHub Discussion。


2. 开启 GitHub Discussions

进入评论仓库:

1
Settings -> Features -> Discussions

勾选 Discussions。

然后去 Discussions 页面确认有分类,比如:

1
General

我这里用的就是 General。📌


3. 安装 Giscus App

打开 Giscus App 页面:

1
https://github.com/apps/giscus

点击安装,然后选择刚才那个评论仓库。

这里一定要确认授权到了正确仓库。如果没装好,Giscus 会报:

1
giscus is not installed on this repository

我一开始就卡在这里过,后来重新授权仓库以后才正常。😂


四、在 giscus.app 生成配置 ⚙️

打开:

1
https://giscus.app/zh-CN

然后按自己的博客情况填写。

我这里主要是这样:

1
2
3
4
5
仓库:ikunkunkunkunkunkun/ssman-comments
页面 ↔ Discussions 映射关系:pathname
分类:General
评论框位置:bottom
语言:zh-CN

配置完成后,页面会生成一段脚本,里面最关键的是这些值:

1
2
3
4
5
data-repo
data-repo-id
data-category
data-category-id
data-mapping

我的最终配置里用到的是:

1
2
3
4
5
repo: ikunkunkunkunkunkun/ssman-comments
repo_id: 。。。
category_id: 。。。
mapping: pathname
category: General

这些值别手打猜,最好从 giscus.app 生成结果里复制。稳一点。👌


五、Hexo + Anzhiyu 里怎么配 🐟

我的博客用的是 Hexo + Anzhiyu 主题,评论配置主要改 _config.anzhiyu.yml

核心配置类似这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
comments:
use: Giscus
text: true
lazyload: false
count: false
card_post_count: false

giscus:
repo: ikunkunkunkunkunkun/ssman-comments
repo_id: 。。。
category_id: 。。。
theme:
light: light
dark: dark
option:
data-lang: zh-CN
data-mapping: pathname
data-category: General
data-input-position: bottom

因为 Giscus 不支持 Anzhiyu 的 Twikoo 最新评论和弹幕,所以这两个我也先关掉:

1
2
3
4
5
newest_comments:
enable: false

comment_barrage_config:
enable: false

不关的话,侧边栏可能一直 loading,或者去请求空的 Twikoo 地址,看着就很别扭。😵


六、生成和验证 🧪

改完配置以后,先本地生成:

1
npm run build

如果生成没报错,再检查文章页里有没有这些东西:

1
2
3
#post-comment
#giscus-wrap
https://giscus.app/client.js

我本地验证以后,文章页和留言板页都能正常插入 Giscus iframe。

也就是说,文章底部会出现评论区:

1
2
3
4
5
6
文章内容
版权信息
上一篇/下一篇
相关内容
Comment
Giscus 评论框

这样就算临时评论系统上线了。🎉


七、现在的取舍 🤔

目前我的选择是:

方案 当前状态 优点 缺点
Giscus 临时启用 不用服务器和数据库,GitHub 直接存评论 访客必须登录 GitHub
Twikoo 暂时搁置 普通访客也能评论,功能更完整 国内服务器需要备案和 HTTPS

所以现阶段就是:

先用 Giscus 保证评论区可用,等备案完成以后再切回 Twikoo。

这个思路比较稳,不至于为了追求一步到位,把评论系统一直拖着不上线。先跑起来,再慢慢优化。🚴


八、备案后怎么切回 Twikoo?🔁

后面只要备案完成,并且这个地址能正常 HTTPS 访问:

1
https://comments.therealman.top

就可以把配置切回 Twikoo:

1
2
3
4
5
6
7
8
9
10
11
comments:
use: Twikoo

twikoo:
envId: https://comments.therealman.top

newest_comments:
enable: true

comment_barrage_config:
enable: true

然后重新生成、部署:

1
npm run build

再检查文章页评论区是否正常加载即可。

也就是说,这次不是放弃 Twikoo,只是先让 Giscus 顶班。等备案和 HTTPS 搞定,Twikoo 随时可以回来接管评论区。😄


小结 📝

这次折腾下来,我最大的感受是:

静态博客本身很好部署,但评论系统属于动态服务,一旦涉及国内服务器,就绕不开域名、备案、HTTPS 这些基础设施问题。

Giscus 适合快速上线,Twikoo 适合长期体验。
现在先用 Giscus,后面备案完成再切 Twikoo,是我目前最舒服的过渡方案。✅

折腾归折腾,评论区总算先活了。🥳