此前用的 Waline 评论系统是采用Vercel+LeanCloud,最近频繁出毛病。

故决定采用docker进行私有化部署。

部署条件

一台有公网 IP 的服务器(用于docker部署或反向代理)

流程

  • Waline数据导出
  • 准备waline.sqlite文件
  • docker-compose.yml配置
  • nginx反向代理配置
  • Waline数据导入

Waline 数据导出

在现有的 Waline 中,将现有的评论数据导出。路径为管理→导入导出→导出,得到waline.json文件。

waline.sqlite 准备

本次部署采用 SQLite 单文件数据库,需要准备 SQLite 数据库文件。官方下载链接

但是采用这个文件部署的话,你会发现你将无法登录!因为官方提供的waline.sqlite文件的用户表是空白!

在官方waline.sqlite的基础上,我添加了默认管理员账号信息,并生成了自制waline.sqlite文件,下载路径在这

所添加的默认用户名密码为:

docker 部署

创建docker-compsoe.yml

登录到服务器,创建~/docker-waline文件夹,添加docker-compsoe.yml文件,下面是我自用的docker-compsoe.yml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# docker-compose.yml
version: "3"

services:
waline:
container_name: waline
image: lizheming/waline:latest
restart: always
ports:
- 127.0.0.1:8360:8360
volumes:
- ${PWD}/data:/app/data
environment:
TZ: "Asia/Shanghai"
SQLITE_PATH: "/app/data"
JWT_TOKEN: "d4as56d465sa" # 自行设置
SITE_NAME: "遐说-Dorad"
SITE_URL: "https://blog.cuger.cn"
SECURE_DOMAINS: "blog.cuger.cn,mt.cuger.cn" # 安全站点,限制访问权限
AUTHOR_EMAIL: "ddxid@outlook.com" # 博主email
DISABLE_REGION: "true" # 是否禁用IP归属地
DISABLE_USERAGENT: "false" # 是否禁用浏览器标识
IPQPS: 50, # 限制访问频次
COMMENT_AUDIT: "false" #
SMTP_SERVICE: "" # SMTP发信相关配置
SMTP_USER: ""
SMTP_SECURE: "true"
SMTP_PASS: ""
SENDER_NAME: "Dorad"

在环境变量中,参考自己此前在 Velcel 中的配置,搬运过来即可,详细配置项可参考官方文档

数据库配置

创建~/docker-waline/data文件夹,并将此前下载的waline.sqlite文件复制到其下。

最终目录结构如下:

1
2
3
4
|--docker-waline
|--docker-compose.yml
|--data
|--waline.sqlite

docker 运行

采用以下命令,拉起Waline服务。

1
docker-compose up -d

nginx 配置

docker跑起来后是运行在本地8360端口,需要反向代理到指定域名。

将原解析到Vervel的域名,解析到自己的服务器,并配置好nginx,然后参照配置nginx反向代理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# SSL自动续期验证
location ^~ /.well-known/ {
root /data/wwwroot/cuger.cn/pl.cuger.cn;
}

# 反向代理设置
location / {
proxy_pass http://127.0.0.1:8360;
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;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
# cache
add_header Cache-Control no-cache;
expires 12h;
}

官方 Nginx 配置参考

数据导入恢复

配置完成nginx并可成功访问后,用默认用户名密码登录系统。

登录成功后,管理→导入导出→导入,选择Waline.json导入原来的评论数据。

等待两分钟即可。

完成后可删除默认用户名&密码,但需要操作 SQLite 文件。
另一个简单的方法是将其转为普通用户,并将密码重置为复杂密码。

数据定期备份

  • Waline自身提供了数据导入导出功能,可手动定期备份
  • 可在服务器设置cron任务,定期将waline.sqlite文件备份至云盘,可参考rclone数据同步方案

Q&A

  • 如何升级/更新/修改Waline配置文件?
1
2
3
4
5
6
7
8
# 关闭服务
docker-compose down
# 升级
docker-compose pull
# 修改配置文件docker-compose.yml

# 重新拉起服务
docker-compose up -d
  • NAS 用户如何部署?

docker配置相同,需搭配内网穿透(如frp)或DDNS食用,将本地waline服务暴露到公网。

参考