起因
本博客的评论系统自启用以来一直用的Waline这个项目,当时使用的是LeanCloud(数据库) + Vercel(服务端)的方案,具体搭建过程可以参考之前这篇博客
由于Waline之前一直用的早期的版本没有更新过,这两天登陆Waline管理界面的时候也提示了版本更新,就想着去更新一下,结果最后在Vercel重建的时候发现日志里面报了很多warning,大多是一些依赖版本过时的问题
然后就想着去官方文档查一下,正好发现文档里面有提到了独立部署的方案,并且有Docker镜像以及支持评论数据导出和迁移,索性就考虑直接在自己的服务器上托管得了
废话不多说,下面就开始介绍一下将Waline迁移至我自己服务器托管的过程
准备工作
需要提前安装和准备好Docker、Nginx、域名和证书,我在之前的博客里也都写过,这里就不再赘述细节
Docker搭建过程
关于数据库
官方文档里介绍了可以用SQLite、MySQL、PostgreSQL、MongoDB等多种数据库,这里我使用了PostgreSQL,如果要用其他数据库可以自行参考官方文档
需要注意:使用PostgreSQL的时候需要导入waline.pgsql文件来创建好表和表结构,因此需要提前将该文件下载下来放在后面要创建Docker容器的目录下
创建容器
首先创建一个容器目录,比如我的是/docker/waline/
,然后进入该目录,将前面下载好的waline.pgsql文件拷贝进该目录
再新建docker-compose.yml
文件,写入下面内容
services:
postgres:
image: postgres:16-alpine
container_name: waline-postgres
restart: always
environment:
POSTGRES_DB: waline_db # 数据库名
POSTGRES_USER: waline_user # 用户名
POSTGRES_PASSWORD: ******** # 密码
volumes:
- ./postgres_data:/var/lib/postgresql/data # 持久化数据
- ./waline.pgsql:/docker-entrypoint-initdb.d/init.sql # 初始化 SQL(需先下载 waline.pgsql 到目录)
ports:
- "127.0.0.1:5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U waline_user -d waline_db"]
interval: 10s
timeout: 5s
retries: 5
waline:
image: lizheming/waline:latest
container_name: waline-server
restart: always
ports:
- "127.0.0.1:8360:8360"
environment:
# PostgreSQL 配置
PG_DB: waline_db # 数据库名
PG_USER: waline_user # 用户名
PG_PASSWORD: ******** # 密码
PG_HOST: postgres # Docker 内部服务名
PG_PORT: 5432
PG_PREFIX: wl_
PG_SSL: false
# Waline 配置
TZ: Asia/Shanghai # 时区
SITE_NAME: "忘川河畔" # 站点名称
SITE_URL: https://blog.manjusaka.de # 你的博客域名
AUTHOR_EMAIL: [email protected] # 作者邮箱
IPQPS: 0 # 基于 IP 的评论发布频率限制,单位为秒。设置为 0 不限制
LEVELS: "0,3,9,20,32,50,70,100,150,200" # 设置 level 等级
# 邮件通知配置
SMTP_HOST: ******** # SMTP 主机
SMTP_PORT: 465 # SMTP 端口
SMTP_SECURE: true # 使用 SSL
SMTP_USER: [email protected] # 邮箱
SMTP_PASS: ******** # 密码
SENDER_NAME: Blog.Manjusaka.De
SENDER_EMAIL: [email protected]
# Telegram 通知配置
TG_BOT_TOKEN: **************** # Bot Token
TG_CHAT_ID: ******** # Chat ID
depends_on:
postgres:
condition: service_healthy
volumes:
- ./uploads:/app/uploads
我在配置文件中配置了邮件通知和Telegram通知的功能,如果不需要可以将对应部分删除,如果需要的话需要换成自己的信息
关于
Telegram Bot
,这里简单提一下
获取
Bot Token
:首先需要创建Telegram Bot,打开Telegram,搜索@BotFather
,发送/newbot
,跟随提示设置名称和用户名,获取Bot Token
(格式:123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
)获取
Chat ID
:私聊Bot发送消息,然后访问https://api.telegram.org/bot/getUpdates获取Chat ID
另外,配置文件中关于PostgreSQL部分中的数据库名、用户名和密码可以自行修改,关于Waline配置中的网站信息等环境变量也需要自行调整
配置好后就可以执行docker compose up -d
启动容器后端
反向代理
接下来用Nginx配置一下反向代理来访问容器后端,需要准备好域名(例如comment.example.com
)并申请证书
新建一个Waline的Nginx配置文件/etc/nginx/conf.d/waline.conf
,写入下面配置,注意将域名和证书替换为自己的
server{
listen 80;
server_name comment.example.com;
return 301 https://$server_name$request_uri;
}
server{
listen 443 ssl;
http2 on;
server_name comment.example.com;
ssl_certificate /etc/letsencrypt/live/comment.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/comment.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8360;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
执行systemctl restart nginx
加载配置,然后就可以访问comment.example.com
进入评论系统或comment.example.com/ui
进入评论管理系统,登录评论管理界面后需要注册一个账户,第一个注册的账户即为管理员账户
客户端配置修改(Hugo)
Waline的客户端配置已经集成在了我使用的Hugo Stack主题中了,可以直接在Hugo的config.yaml
文件中添加或修改配置
详细的配置参数可以查阅官方文档,下面是我的配置,其中level0
- level9
对应在docker-compose.yml
中设置的LEVELS: "0,3,9,20,32,50,70,100,150,200"
,代表评论数对应的标签,可以自行修改和设置
waline:
serverURL: https://comment.oopd.de
lang: zh-CN
pageview: true
emoji:
- https://unpkg.com/@waline/[email protected]/weibo
- https://unpkg.com/@waline/[email protected]/alus
- https://unpkg.com/@waline/[email protected]/bilibili
- https://unpkg.com/@waline/[email protected]/bmoji
- https://unpkg.com/@waline/[email protected]/qq
- https://unpkg.com/@waline/[email protected]/tieba
- https://unpkg.com/@waline/[email protected]/soul-emoji
- https://unpkg.com/@waline/[email protected]/tw-emoji
requiredMeta:
- nick
- mail
locale:
admin: 扫地僧
placeholder: 留下你的足迹吧!
link: 网址
mail: 邮箱
nick: 昵称
level0: 凡人
level1: 炼体
level2: 凝气
level3: 筑基
level4: 结丹
level5: 元婴
level6: 化神
level7: 炼虚
level8: 渡劫
level9: 飞升
reaction: false
comment: true
数据迁移
进入Waline评论管理系统,在左上角的管理菜单中选择导入导出,就可以打开下面界面
在旧系统中点击导出可以得到一个waline.json
文件,然后在新系统中将该文件导入即可
PS: 导入之后发现一个问题,就是如果注册的管理员账户邮箱和之前相同,那么之前管理员似乎和现在的管理员不重叠,并且在评论显示上无法显示头像,如果换新邮箱注册倒是可以显示旧管理员之前评论时的头像,但角色依旧不重叠,暂时没有找到办法,不过目前评论不多所以影响不大
写在最后
经测试感觉迁移后评论发布及加载似乎比之前快了一些,这次额外添加了Telegram通知,测试也是能秒收到,这样以后基本就不会错过评论了