我是使用的Vercel部署Waline,虽然方便省事,但是访问速度确实太慢了。之前也试过在云服务器上部署,但是不熟悉nginx的配置,故放弃了私有化部署,最近更换服务器时改用了宝塔面板,nginx配置起来省事多了,故改为在服务器上部署Waline

本文基于雨云服务器进行操作,雨云-新一代服务提供商,使用前可先试用,觉得没问题了再租长期的。


安装Docker

安装PostgreSQL

Waline支持很多种数据库,具体可参见官方文档,我这里选用的是PostgreSQL

  1. 拉取镜像

    1
    docker pull postgres
  2. 创建容器(POSTGRES_PASSWORD即数据库postgres的密码,设置为自己需要的值)

    1
    2
    3
    4
    5
    6
    7
    docker run -it \
    --name postgres \
    --privileged \
    -e POSTGRES_PASSWORD=123456 \
    -p 5432:5432 \
    -v /usr/local/software/postgres/data:/var/lib/postgresql/data \
    -d postgres
  3. 进入容器

    1
    docker exec -it postgres /bin/bash
  4. 登录postgres数据库,测试是否安装成功

    1
    su postgres
    1
    psql

    image-20240914100507489

  5. 使用navicat连接数据库

    image-20240914100705949

  6. 创建数据库,用于保存waline数据

    image-20240914111310262

  7. 下载waline.pgsql用于构建表结构,若链接无法打开可以点击此链接下载:waline.pgsql

  8. 在navicat右键数据库hexowaline,点击运行SQL文件,选择刚才下载的waline.pgsql,这里默认只显示.sql文件,记得改成全部文件,不然找不到waline.pgsql

    image-20240914111513268

  9. 选择文件后点击开始就可以构建表结构了,出现以下三张表说明构建成功

    image-20240914111645256

安装Waline

官方文档给出的docker-compose.yml文件是以SQLite为例的,想使用其他数据库的话根据多数据库服务支持修改环境变量即可

  1. 选择一个位置新建并修改docker-compose.yml

    1
    cd /home
    1
    mkdir waline
    1
    cd waline
    1
    vim docker-compose.yml
  2. 内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    version: '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'
  3. 保存后,在waline目录内运行以下命令启动Waline

    1
    docker compose up -d

    image-20240914102009485

    我已经Building过 了,所以直接就完成了,初次启动的话需要一段时间才能完成

  4. 查看是否运行

    1
    docker ps

    image-20240914102106657

配置SSL证书

端口号访问的话会报Faile to fatch!好像是因为没有用https访问,具体情况我也不太清楚,反正我是解析出一个子域名,再申请SSL证书,配置好就不报错了

  1. 去DNS解析一个子域名,就是解析个A记录,指向自己的ip,像这条子域名就是xxxx.huochairener-blog.cn

    image-20240914103048186

  2. 申请SSL证书

    选择自己熟悉的方式申请就行,我是去的freessl网站申请的

    1. 点击申请证书

      image-20240914103237739

    2. 选择单域名➡️立即申请

      image-20240914103312243

    3. 输入域名,点击提交

      image-20240914103343315

    4. 复制这两个值,去DNS添加一条CNAME记录进行验证

      image-20240914103432910

    5. 填入刚才复制的两个值,保存

      image-20240914103540871

    6. 等几分钟之后点击验证就会自动下载证书,若没有下载点击旁边的证书也可以下载

      image-20240914103625021

      多等几分钟,DNS验证和签发证书都需要时间

    7. 证书下载好后有两个文件,一个.key一个.pem,保存好,之后要用

      image-20240914103753939

  3. 进入宝塔面板➡️网站➡️添加站点,输入刚才解析的子域名,根目录随便选一个目录就行

    image-20240914103930819

  4. 点击网站名或设置按钮进行设置

    image-20240914104039308

  5. 点击SSL➡️其他证书,将刚才下载的证书文件中的内容复制到对应的输入框内

    image-20240914104237165

  6. 点击保存就完成证书的配置了

配置反向代理

之前就是卡在这一步才没能私有化部署,这次用了宝塔面板就轻松多了,若没安装宝塔面板的话,我把我的nginx配置文件放在后面,复制进你的nginx配置文件例应该也行

  1. 点击反向代理➡️添加反向代理,内容如下

    image-20240914104536827

    目标URL即你服务器的IP:8360,8360是安装Waline时映射的端口

  2. 点击提交就可以了,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
    58
    server
    {
    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主题,其他主题请参考各自主题的官方文档进行配置

  1. 修改主题配置文件_config.yml

    1. 搜索comments:找到以下内容

      image-20240914111830268

      use处填入Waline,W一定要大写

    2. 搜索 waline

      image-20240914114851895

      serverURL处填写子域名

    3. 配置好之后hexo三连部署

      1
      hexo cl && hexo g && hexo d

Waline设置

部署好Waline之后需要立即登录,默认第一个登录的用户为管理员

  1. 进入自己的网站,随便进入一篇文章,划到最下面,找到登录按钮

    image-20240914120515664

  2. 选择github登录

    image-20240914120539657

  3. 登录成功之后关掉这个弹窗,你的评论框应该已经变成了这样

    image-20240914120619422

    如果左侧没有显示头像,那就点一下表情按钮就出来了,这个不知道时什么bug,我还没弄,暂时先这样了

    image-20240914120730743

  4. 点击头像,再次点github登录就可以进入Waline后台管理页面了

    image-20240914120813067

  5. 在左上角管理按钮处就可以跳转到对应的管理页面了

    image-20240914120923207

    image-20240914120947947

Waline其他设置

Waline还有其他很多功能,可以慢慢摸索,我目前只用到了这些

开启文章反应

Waline自带文章反应功能,在主题文件夹下/themes/butterfly/layout/includes/third-party/comments/waline.pug找到这个文件,将reaction值设为true即可

image-20240914130124379

显示效果如下

image-20240914130142264

关闭评论

如果某些文章不想开启评论可以在文章顶部的配置中输入comments: 'false'即可

比如我的artitalk不想开启评论

image-20240914115536507

消息通知

Waline提供了多种方式进行评论通知,最好是选择邮箱,用邮箱的话当访客的评论收到回复时可以对访客进行通知。因为我目前没有收到过评论,所以暂且用个最省事的通知我自己就行了,我目前使用的是PushPlus 通知Server 酱也可以,就是每日免费额度太少,只有5条,pushplus每日是200条

  1. 注册登录pushplus,实名认证,关注微信公众号绑定,在个人中心处复制token

    image-20240914130919187

  2. 进入Waline目录,停止并删除waline容器

    1
    cd /home/waline
    1
    docker compose stop
  3. 修改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
    23
    version: '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获取的token

    AUTHOR_EMAIL: 博主邮箱,用来区分发布的评论是否是博主本身发布的。如果是博主发布的则不进行提醒通知

    SITE_NAME:网站名称,用于在消息中显示

    SITE_URL:网站地址,用于在消息中显示

  4. 启动Waline

    1
    docker compose up -d
  5. 测试,随便找一篇文章进行评论,大概过几秒就可以在公众号内收到消息推送

    image-20240914133923894

    image-20240914132314555

    点进去可以查看详情

    image-20240914132422797

  6. 想使用邮箱通知的话可以看官方文档或找教程进行配置

图床

waline配置图床可查看我另一篇文章:为Hexo添加评论系统-Waline并为其配置图床