自建 Twikoo 评论系统私有部署

从这个用于自我满足的博客诞生之际,评论系统就在数个方案之间换来换去。

最终我找到了 Twikoo 并一直用到现在,是目前最适合我的评论方案。

之前一直使用腾讯云开发 CloudBase 的基础版,因为博客没人看,套餐够用。

但从今年 8 月 8 日起腾讯云开发就变更了 资费模式,没有办法再继续白嫖了。

我手上呢,也有一台用于干乱七八糟的轻量云服务器,那么为何不自建来节省成本呢?

刚好,Twikoo 的新 Release 支持私有部署了,今天就来把这个搞定。

2022.12.06 更新:评论图片处理。

先备份

虽然我知道我很急,但我先别急。

因为评论系统最重要的还是内容本身,所以在更换之前我们要把已有内容备份,更换完毕后再导入回去。

备份很简单,首先登录腾讯云控制台,进入 云开发 CloudBase 页面,进入 Twikoo 使用的环境。

左侧选择 数据库 选项,然后在右侧列表中点击 comment 进入详情页,点击 导出 后,使用默认 JSON 格式导出,即可获得评论数据的备份文件。

评论数据导出

除了 comment 外另外两项就不需要备份了,因为 Twikoo 的导入系统只支持评论数据备份文件。

私有部署

Twikoo 的文档已经更新了关于 私有部署 部分的内容,个人选择了使用 Docker 进行部署。

Docker 的安装这里不多赘述,完成 Docker 环境的搭建后,先拉取镜像。

1
docker pull imaegoo/twikoo:latest

拉取完毕后使用以下命令即可启动:

1
docker run -p 8087:8080 -v /root/twikoo/data:/app/data -d --name=twikoo imaegoo/twikoo:latest

端口和数据存放路径可以按照个人喜好改动。

这时候再去主题配置文件找到 Twikoo 相关配置项,将 envId 从之前的腾讯云开发 ID 换成 http://yourip:port/ 本地调试应该就可以连上评论系统了。

重新设置好管理密码,正常进入管理面板,找到 导入 选项卡,源系统选择 Twikoo(JSON),再选择评论数据备份文件点击 开始导入,没什么意外评论内容就全部搬过来了。

评论数据导出

但是这里只有评论内容,Twikoo 的设置不包含在内,所以我又对照着线上腾讯云开发的管理面板 Copy 了一遍,这才算完成整个评论系统的迁移。

配置 Nginx 反代

现在基本都是 HTTPS 的时代,Twikoo 的默认服务不支持 HTTPS,所以还得用个反代来解决下这个问题。

1
vim /etc/nginx/conf.d/twikoo.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 443 ssl;
server_name twikoo.neko7ina.com;

ssl_certificate /home/syncthing/ssl/cert.pem;
ssl_certificate_key /home/syncthing/ssl/key.pem;

location / {
proxy_set_header Host $host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8087;
}
}
1
2
nginx -t
nginx -s reload

需要注意的是如果碰到跨域问题,需要额外的配置来解决。

因为个人的博客是放在腾讯云静态存储且套了 CDN,我直接在 CDN 上设置了 HTTP 响应头配置,所以这里 Nginx 就没有再写相应的配置也能正常工作。

HTTP 响应头配置

最后别忘记了在主题配置文件里把 envId 改成新的地址,就像这样:

1
2
3
4
5
twikoo:
envId: https://twikoo.neko7ina.com/
region: ap-shanghai
path: window.location.pathname
prismCdn: https://cdn.staticfile.org/prism/1.28.0

评论图片处理

<2022.12.06 更新>

评论图片处理。

当时还部署在云开发时,图片上传会上传到云开发的空间中。

本来打算找个时间把图片都下到本地重新编辑链接,但是拖延症发作一拖再拖,到今天想干的时候发现图片全没了……

不过处理还是要处理的,否则每次载入都会请求一个不存在的资源还是不太优雅。

找到 Twikoo 映射的数据文件夹,其中 db.json.0 存放了所有评论数据,将其下到本地打开。

tk-img 为搜索关键字找到所有上传图片的 URL,然后全部指向了一张 404 图片。

今天请同事设计的

当然,如果你有保留之前评论中的图片,只需要重新做出链接然后替换进去,就可以无缝迁移了。

写在最后

感谢开发者的辛苦努力,当初这个评论系统始于腾讯云开发,但在我这将终于自建。

另外自建了之后评论系统响应快了不止一点两点,真好!