云服务器部署Waline
我是使用的Vercel部署Waline,虽然方便省事,但是访问速度确实太慢了。之前也试过在云服务器上部署,但是不熟悉nginx的配置,故放弃了私有化部署,最近更换服务器时改用了宝塔面板,nginx配置起来省事多了,故改为在服务器上部署Waline
本文基于雨云服务器进行操作,雨云-新一代服务提供商,使用前可先试用,觉得没问题了再租长期的。
安装Docker
使用官方脚本自动安装
1
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
若安装不成功则需要手动安装
安装完成后输入以下命令测试是否成功安装
1
docker version
1
docker compose version
配置镜像源
添加或修改文件/etc/docker/daemon.json
1
vim /etc/docker/daemon.json
内容如下
1
2
3{
"registry-mirrors": ["https://hub-mirror.c.163.com"]
}这里有几个镜像源,若后面的步骤中有下载失败的情况可更改镜像源后重新尝试
https://6kx4zyno.mirror.aliyuncs.com
https://ccr.ccs.tencentyun.com
https://docker.mirrors.ustc.edu.cn
https://hub-mirror.c.163.com
https://mirror.baidubce.com重启docker
1
systemctl daemon-reload
1
systemctl restart docker
安装PostgreSQL
Waline支持很多种数据库,具体可参见官方文档,我这里选用的是PostgreSQL
拉取镜像
1
docker pull postgres
创建容器(POSTGRES_PASSWORD即数据库postgres的密码,设置为自己需要的值)
1
2
3
4
5
6
7docker run -it \
--name postgres \
--privileged \
-e POSTGRES_PASSWORD=123456 \
-p 5432:5432 \
-v /usr/local/software/postgres/data:/var/lib/postgresql/data \
-d postgres进入容器
1
docker exec -it postgres /bin/bash
登录postgres数据库,测试是否安装成功
1
su postgres
1
psql
使用navicat连接数据库
创建数据库,用于保存waline数据
下载waline.pgsql用于构建表结构,若链接无法打开可以点击此链接下载:waline.pgsql
在navicat右键数据库hexowaline,点击运行SQL文件,选择刚才下载的waline.pgsql,这里默认只显示.sql文件,记得改成全部文件,不然找不到waline.pgsql
选择文件后点击开始就可以构建表结构了,出现以下三张表说明构建成功
安装Waline
官方文档给出的docker-compose.yml文件是以SQLite为例的,想使用其他数据库的话根据多数据库服务支持修改环境变量即可
选择一个位置新建并修改docker-compose.yml
1
cd /home
1
mkdir waline
1
cd waline
1
vim docker-compose.yml
内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18version: '3'
services:
waline:
container_name: waline
image: lizheming/waline:latest
restart: always
ports:
- 8360:8360
volumes:
- ${PWD}/data:/app/data
environment:
TZ: 'Asia/Shanghai'
PG_DB: 'hexowaline(你创建的数据库数名称)'
PG_USER: 'postgres(创建数据库时选择的用户,默认是postgres)'
PG_PASSWORD: 'youpassword(你的密码)'
PG_HOST: 'xxx.xxx.xxx.xxx'
PG_PORT: '5432'保存后,在waline目录内运行以下命令启动Waline
1
docker compose up -d
我已经Building过 了,所以直接就完成了,初次启动的话需要一段时间才能完成
查看是否运行
1
docker ps
配置SSL证书
端口号访问的话会报Faile to fatch!好像是因为没有用https访问,具体情况我也不太清楚,反正我是解析出一个子域名,再申请SSL证书,配置好就不报错了
去DNS解析一个子域名,就是解析个A记录,指向自己的ip,像这条子域名就是xxxx.huochairener-blog.cn
申请SSL证书
选择自己熟悉的方式申请就行,我是去的freessl网站申请的
点击申请证书
选择单域名➡️立即申请
输入域名,点击提交
复制这两个值,去DNS添加一条CNAME记录进行验证
填入刚才复制的两个值,保存
等几分钟之后点击验证就会自动下载证书,若没有下载点击旁边的证书也可以下载
多等几分钟,DNS验证和签发证书都需要时间
证书下载好后有两个文件,一个.key一个.pem,保存好,之后要用
进入宝塔面板➡️网站➡️添加站点,输入刚才解析的子域名,根目录随便选一个目录就行
点击网站名或设置按钮进行设置
点击SSL➡️其他证书,将刚才下载的证书文件中的内容复制到对应的输入框内
点击保存就完成证书的配置了
配置反向代理
之前就是卡在这一步才没能私有化部署,这次用了宝塔面板就轻松多了,若没安装宝塔面板的话,我把我的nginx配置文件放在后面,复制进你的nginx配置文件例应该也行
点击反向代理➡️添加反向代理,内容如下
目标URL即你服务器的IP:8360,8360是安装Waline时映射的端口
点击提交就可以了,nginx配置文件内容如下
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#PROXY-START/
location ~* \.(php|jsp|cgi|asp|aspx)$
{
proxy_pass http://123.123.123.123: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 REMOTE-HOST $remote_addr;
}
location /
{
proxy_pass http://123.123.123.123: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 REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
add_header Cache-Control no-cache;
expires 12h;
}
#PROXY-END/站点配置文件内容如下
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58server
{
listen 80;
listen 443 ssl http2;
server_name xxxx.huochairener-blog.cn;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/xxxx.huochairener-blog.cn;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
ssl_certificate /www/server/panel/vhost/cert/xxxx.huochairener-blog.cn/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/xxxx.huochairener-blog.cn/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
#清理缓存规则
location ~ /purge(/.*) {
proxy_cache_purge cache_one $host$1$is_args$args;
#access_log /www/wwwlogs/xxxx.huochairener-blog.cn_purge_cache.log;
}
#引用反向代理规则,注释后配置的反向代理将无效
include /www/server/panel/vhost/nginx/proxy/xxxx.huochairener-blog.cn/*.conf;
include enable-php-00.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/xxxx.huochairener-blog.cn.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
access_log /www/wwwlogs/xxxx.huochairener-blog.cn.log;
error_log /www/wwwlogs/xxxx.huochairener-blog.cn.error.log;
}
Hexo引入Waline
我是用的是Butterfly主题,其他主题请参考各自主题的官方文档进行配置
修改主题配置文件_config.yml
搜索
comments:
找到以下内容use
处填入Waline,W一定要大写搜索
waline
serverURL
处填写子域名配置好之后hexo三连部署
1
hexo cl && hexo g && hexo d
Waline设置
部署好Waline之后需要立即登录,默认第一个登录的用户为管理员
进入自己的网站,随便进入一篇文章,划到最下面,找到登录按钮
选择github登录
登录成功之后关掉这个弹窗,你的评论框应该已经变成了这样
如果左侧没有显示头像,那就点一下表情按钮就出来了,这个不知道时什么bug,我还没弄,暂时先这样了
点击头像,再次点github登录就可以进入Waline后台管理页面了
在左上角管理按钮处就可以跳转到对应的管理页面了
Waline其他设置
Waline还有其他很多功能,可以慢慢摸索,我目前只用到了这些
开启文章反应
Waline自带文章反应功能,在主题文件夹下/themes/butterfly/layout/includes/third-party/comments/waline.pug
找到这个文件,将reaction值设为true即可
显示效果如下
关闭评论
如果某些文章不想开启评论可以在文章顶部的配置中输入comments: 'false'
即可
比如我的artitalk不想开启评论
消息通知
Waline提供了多种方式进行评论通知,最好是选择邮箱,用邮箱的话当访客的评论收到回复时可以对访客进行通知。因为我目前没有收到过评论,所以暂且用个最省事的通知我自己就行了,我目前使用的是PushPlus 通知,Server 酱也可以,就是每日免费额度太少,只有5条,pushplus每日是200条
注册登录pushplus,实名认证,关注微信公众号绑定,在个人中心处复制token
进入Waline目录,停止并删除waline容器
1
cd /home/waline
1
docker compose stop
修改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
23version: '3'
services:
waline:
container_name: waline
image: lizheming/waline:latest
restart: always
ports:
- 8360:8360
volumes:
- ${PWD}/data:/app/data
environment:
TZ: 'Asia/Shanghai'
PG_DB: 'hexowaline'
PG_USER: 'postgres'
PG_PASSWORD: 'yourpassword'
PG_HOST: 'yourip'
PG_PORT: '5432'
PUSH_PLUS_KEY: 'token'
AUTHOR_EMAIL: '1002703044@qq.com'
SITE_NAME: '火柴人儿的小站'
SITE_URL: 'www.huochairener-blog.cn'添加了几个环境变量
PUSH_PLUS_KEY
:pushplus获取的tokenAUTHOR_EMAIL
: 博主邮箱,用来区分发布的评论是否是博主本身发布的。如果是博主发布的则不进行提醒通知SITE_NAME
:网站名称,用于在消息中显示SITE_URL
:网站地址,用于在消息中显示启动Waline
1
docker compose up -d
测试,随便找一篇文章进行评论,大概过几秒就可以在公众号内收到消息推送
点进去可以查看详情
想使用邮箱通知的话可以看官方文档或找教程进行配置
图床
waline配置图床可查看我另一篇文章:为Hexo添加评论系统-Waline并为其配置图床