博客 Waline 评论系统迁移至服务器自建

Waline Docker自托管和数据迁移

起因


本博客的评论系统自启用以来一直用的Waline这个项目,当时使用的是LeanCloud(数据库) + Vercel(服务端)的方案,具体搭建过程可以参考之前这篇博客

由于Waline之前一直用的早期的版本没有更新过,这两天登陆Waline管理界面的时候也提示了版本更新,就想着去更新一下,结果最后在Vercel重建的时候发现日志里面报了很多warning,大多是一些依赖版本过时的问题

image.png

然后就想着去官方文档查一下,正好发现文档里面有提到了独立部署的方案,并且有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评论管理系统,在左上角的管理菜单中选择导入导出,就可以打开下面界面

image.png

在旧系统中点击导出可以得到一个waline.json文件,然后在新系统中将该文件导入即可

PS: 导入之后发现一个问题,就是如果注册的管理员账户邮箱和之前相同,那么之前管理员似乎和现在的管理员不重叠,并且在评论显示上无法显示头像,如果换新邮箱注册倒是可以显示旧管理员之前评论时的头像,但角色依旧不重叠,暂时没有找到办法,不过目前评论不多所以影响不大

写在最后


经测试感觉迁移后评论发布及加载似乎比之前快了一些,这次额外添加了Telegram通知,测试也是能秒收到,这样以后基本就不会错过评论了

发表了59篇文章 · 总计122.83k字
·
使用 Hugo 构建
主题 StackJimmy 设计