Waline 评论系统的更换
大约 5 分钟
Waline 评论系统的更换
- 最近虽然 DDL 缠身,但还是简单回顾了一下自己的博客建设工作,滚了个新版本,打算之后写一些学习相关的东西上去。
(绝对不是被 XCRH 的一天三篇博文刺激到) - 中间不出意外地出了一大堆意外,简单地记录一下以防自己以后忘记吧。
comment-plugin 的更新
- 这一部分还是比较稳定的,就是要把原来
config.ts
里的配置挪到theme.ts
里面。复制粘贴一下就好。
目前我的配置如下:
comment:{
provider:"Waline",
serverURL: "https://server.url",
requiredMeta: ['nick', 'mail'],
login: 'force',
wordLimit: 150,
emoji: [
'//unpkg.com/@waline/[email protected]/tw-emoji',
'//unpkg.com/@waline/[email protected]/tw-object',
'//unpkg.com/@waline/[email protected]/tw-symbol',
'https://unpkg.com/@waline/[email protected]/tw-travel',
'//unpkg.com/@waline/[email protected]/tw-flag'
],
reaction:[
'https://unpkg.com/@waline/[email protected]/tw-emoji/1f60b.png',
'https://unpkg.com/@waline/[email protected]/tw-emoji/1f914.png',
'https://unpkg.com/@waline/[email protected]/tw-emoji/1f625.png'
]
}
大意就是启用强制登录检查,然后字数限制 150 字符;开启了表情评论功能,使用 Twitter Emoji。
部署 Waline
作为一个 VPS 大量溢出的老烧爱好者,只要是能自己本地部署的服务,我都不想使用受限多多的免费云平台。虽然不知道为什么 Waline 的开发者极其推崇这种 使用受限的公共存储服务的思路,但好歹为我们自建党留下了详细的操作指南。所以就此选择了顺手的 Docker Compose + certbot
组合,开始了这次的冒险。
然而,这次的旅程却比想象中踩的坑要多。
docker-compose.yml 的撰写
- 出于方便移植的目的,我的数据库与 Waline 本体都使用了
Docker Compose
进行部署。 - 二者之间采用
depend_on
进行连接,写入同一个docker-compose.yml
文件中。
我的最终结果如下:
version: '3'
services:
mongo:
container_name: mongo-waline
image: mongo:latest
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: ROOT_USERNAME
MONGO_INITDB_ROOT_PASSWORD: ROOT_PASSWORD
MONGO_INITDB_DATABASE: comments
volumes:
- ./data:/data/db # 持久化存储 DB 内容
waline:
container_name: waline
image: lizheming/waline:latest
restart: always
ports:
- 8360:8360
depends_on:
- mongo # 将二者连接的关键一步
environment:
TZ: 'Asia/Shanghai'
#MONGO_DB: comments?authSource=admin # 事实证明只需要 AUTHSOURCE 就可以了
MONGO_DB: comments
MONGO_AUTHSOURCE: admin # MongoDB 加上这一句才能正常查询
MONGO_USER: ROOT_USERNAME
MONGO_PASSWORD: ROOT_PASSWORD
MONGO_HOST: mongo
TG_BOT_TOKEN: '111111:AAAAAA'
TG_CHAT_ID: 111111
SITE_NAME: "Rei Suzunami 的 CENTRAL DOGMA" # 不可以使用单引号 \'
SITE_URL: 'https://blog.ayanami-official.net'
SECURE_DOMAINS: 'SECURE.DOMAINS' # 评论服务自己的域名,单独申请证书
AUTHOR_EMAIL: '[email protected]'
注意事项
MONGO_AUTHSOURCE
- MongoDB 在使用管理员权限操作数据库时必须添加的内容。一开始我没有使用,导致数据库一直无法读取。
- 当然,我在注意到这一项设置前,并且上网搜索了相关内容后,曾使用了一个特别的方法: 在数据库名称后面加上
?authSource=admin
。而且事实证明还真的有用。
SITE_NAME
- 截止到本篇文章发布时,此处的字符串内容不能包含单引号
'
。否则会引起报错:Telegram Notification Failed:{"ok":false,"error_code":400,"description":"Bad Request: can't parse entities: Character '#' is reserved and must be escaped with the preceding '\\'"}
- 据热心群友 浅羽 (羽醬) 櫻川 推测,可能是 Waline 在编解码 URL 时出现了意外的问题。
- 在 Waline 的 issue#276 中提到了此问题,但开发者当时选择了搁置处理。
然后我又提了一个 discussion ,希望之后有人能回复吧。- 更新:已回复。作者在对接 Telegram 的时候被关键字一直困扰,正在寻求一体的解决方案。(咕咕咕)
- 截止到本篇文章发布时,此处的字符串内容不能包含单引号
申请证书
这里其实能说的并不太多,毕竟 certbot
和 acme.sh
都是成熟的技术。主要说一些我遇到的问题吧。
acme.sh
为了生成 wildcard
证书偷懒,我使用了 certonly
模式。
- 设置环境变量:
export CF_Token="Your_Cloudflare_DNS_API_Key_Goes_here"
- 执行
acme.sh --issue --dns dns_cf -d '*.ayanami-official.net'
- 但是 install 时遇到问题,一直安装不上,手写 Nginx 配置文件也不行,遂放弃。
certbot
- 先保存一个文件记录 API Token。
- 但下面的命令按照官方说明执行后没有效果,但
acme
之后就一遍过了。实在奇怪。怀疑是那条环境变量的作用。 certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d example.ayanami-official.net
Nginx 配置文件
基本就是照抄之前 http challenge
的时候 certbot
给我写的配置。
server{
server_name blog-comments.ayanami-official.net;
location / {
proxy_pass http://127.0.0.1:8360; # Waline 端口
proxy_set_header X-Real-IP $remote_addr; # 转发真实 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/blog-comments.ayanami-official.net/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/blog-comments.ayanami-official.net/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server{
if ($host = blog-comments.ayanami-official.net) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name blog-comments.ayanami-official.net;
return 404; # managed by Certbot
}
不得不说 certbot
写配置确实标准。
vuepress-theme-hope
目录层级修改
发现悬浮 TOC 的目录层级太低,没法展现太多标题。经过厚着脸皮问群友的艰难求索之后,发现了解决方法。
- 进入
config.ts
,在defineUserConfig
内加入:markdown:{ toc:{ level:[2,3,4,5] }, headers:{ level: [2, 3, 4, 5], } },
- 在页面开头的
frontmatter
中设置headerDepth = 5
即可让悬浮 TOC 的层级自动设为 5。 - 然而,侧边栏 Sidebar 的自动层级还是无法自动生成。还待进一步研究。
写在最后
- 虽然这一篇内容其实并不多,但我还是花费了 2 天时间才配置完毕。期间各种查询文档实在是累得不行,甚至看 XCRH 用 Hexo 一把梭的潇洒模样,自己也想转投 Hexo 阵营。但回头一想自己辛辛苦苦配置好的 Jenkins 和 GitHub Repo,还是硬着头皮继续干。
- 现在是 2023 年 3 月 28 日的凌晨 0 点 16 分。我将会在撰写完此篇文档后睡觉,并在起床后复盘完给 XCRH 的 Linux 机器杀毒的工作,开启一个好用工具的总结列表,然后开始轰轰烈烈的《大学物理II-2》复习计划。
- 祝我一切顺利。