Hexo Blog优化[04] - 搭建Waline评论系统

目标

通过初步比对,决定先利用当前VPS + Docker + Sqlite搭建Waline评论系统。选择Waline是因为很多人用,并且评论无需注册,暂无安全漏洞。

由于Docker和Sqlite对我来说都是新鲜事物,所以看官方文档相对比较抽象点,就写一写步骤了。所以站在docker小白视角,总结一下。

安装步骤

在VPS上安装Docker和Sqlite

这个按VPS操作系统的环境安装即可。记得启动Docker的Daemon。

随便找一个目录

按官方要求,执行下面3个动作:

1
2
3
git clone https://github.com/lizheming/waline.git
cd waline
docker build -t lizheming/waline -f packages/server/Dockerfile .

第1,2两条指令就不用多说了,对docker不了解的人看第3条指令就读天书一样(好在是执行不出状况),如果手敲的话不要漏了后面的’.'。

实际上第3条指令就是创建镜像了。-t选项是标签名,后面docker启动就靠它了。-f 指定dockerfile, dockerfile的内容就是构建镜像的指令和说明。

随便建一个目录

建一个目录为了干净一点,没其他目的,也就是说不是必要的。但要编辑一个docker-compose.yml文件:

1
2
3
mkdir tmp
cd tmp
vi docker-compose.yml

文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# docker-compose.yml
version: '3'

services:
waline:
container_name: waline
image: lizheming/waline:latest
restart: always
ports:
- 127.0.0.1:8360:8360
volumes:
- /home/nginx/data:/app/data # ':'前面的是实际路径,后面的是映射到容器中的路径
environment:
TZ: 'Asia/Shanghai'
SQLITE_PATH: '/app/data' # 容器中的路径
SQLITE_DB: 'waline' # 只用文件名,不用带后缀
JWT_TOKEN: 'Just Random 9834 token' # 随机值就行,还没深入理解怎么用好
SITE_NAME: 'chhwang'
SITE_URL: 'http://www.chhwang.uk'
SECURE_DOMAINS: 'chhwang.uk'
AUTHOR_EMAIL: 'chh.wang@hotmail.com'

把sqlite文件放到刚刚配置的目录

按官网要求,把刚刚clone目录里面的../asset/waline.sqlite拷贝到自己配置的目录:完整路径是/home/nginx/data/waline.sqlite.

启动docker

为了减少不必要的问题,直接用root启动吧:sudo docker compose up. 这时候,评论系统没什么问题的话就可以工作了,输入 http://localhost:8360 可以看到效果。

NGINX反向代理

这个就没啥坑了, 先把网站暂停下,直接拷配置就可以看到效果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
	# proxy to 8360
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;
}
}

遗漏问题

如何将评论与文章关联起来?

遇到的问题

SQLITE

问题提示: SQLITE_ERROR: no such table: wl_Comment

错误配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 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:/home/nginx/app/data
environment:
TZ: 'Asia/Shanghai'
SQLITE_PATH: '/home/nginx/app/data'
SQLITE_DB: 'waline.sqlite'
JWT_TOKEN: 'Just Random 9834 token'
SITE_NAME: 'chhwang'
SITE_URL: 'http://www.chhwang.uk'
SECURE_DOMAINS: 'chhwang.uk'
AUTHOR_EMAIL: 'chh.wang@hotmail.com'

这里面有两个坑,主要是对Docker不熟悉引起:

  • 坑1

我的配置是在SQLITE_DB后的名字用了’waline.sqlite’, 多加了sqlite后缀,去掉就好.

  • 坑2

volumesSQLITE_PATH含义没理解清楚,配置错误。volumes的值的意思是将本地目录和容器目录映射。 SQLITE_PATH是容器内部路径。

把坑1和坑2填平后,配置如上一节描述。

参考链接

在搭建过程中参考了 https://waline.js.org/en/guide/deploy/vps.html https://dzyx.uk/2023/01/22/39/ https://vickey.fun/2022/08/09/Waline-Migration-From-CloudBase-to-Docker/ https://www.zdynb.cn/2022/shi-yong-docker-bu-shu-waline.html