Waline 评论系统的更换

Rei Suzunamisiteinfrastructurevuepresswalinedockernginx大约 5 分钟

最近虽然 DDL 缠身,但还是简单回顾了一下博客建设工作。中间不出意外地出了一大堆意外,记录下来以防以后忘记。

comment-plugin 的更新

这一部分相对稳定:把原来 config.ts 里的配置挪到 theme.ts。当时的关键配置如下:

comment: {
  provider: 'Waline',
  serverURL: 'https://server.url',
  requiredMeta: ['nick', 'mail'],
  login: 'force',
  wordLimit: 150,
}

大意是强制登录检查、限制 150 字,并开启表情评论。

部署 Waline

我选择了 Docker Compose + certbot 自建方案。数据库与 Waline 本体都放在同一份 docker-compose.yml

version: '3'

services:
  mongo:
    image: mongo:latest
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: ROOT_USERNAME
      MONGO_INITDB_ROOT_PASSWORD: ROOT_PASSWORD
      MONGO_INITDB_DATABASE: comments
    volumes:
      - ./data:/data/db

  waline:
    image: lizheming/waline:latest
    restart: always
    ports:
      - 8360:8360
    depends_on:
      - mongo
    environment:
      TZ: 'Asia/Shanghai'
      MONGO_DB: comments
      MONGO_AUTHSOURCE: admin
      MONGO_USER: ROOT_USERNAME
      MONGO_PASSWORD: ROOT_PASSWORD
      MONGO_HOST: mongo
      SITE_NAME: 'Rei Suzunami 的 CENTRAL DOGMA'
      SITE_URL: 'https://blog.ayanami-official.net'
      SECURE_DOMAINS: 'SECURE.DOMAINS'

注意事项

MONGO_AUTHSOURCE

MongoDB 使用管理员权限操作数据库时必须设置该项。此前未设置导致数据库无法正常查询;把 authSource=admin 放在连接串里同样有效。

SITE_NAME

历史版本里这个字符串不能包含单引号,否则 Telegram 通知可能因为实体转义报错。相关讨论见 Waline issue #276

申请证书

acme.shcertbot 都是成熟方案。为了签发 wildcard 证书,曾尝试:

acme.sh --issue --dns dns_cf -d '*.ayanami-official.net'

也试过:

certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d example.ayanami-official.net

最终是 Nginx 反代 Waline 的 8360 端口:

server {
    server_name blog-comments.ayanami-official.net;
    location / {
        proxy_pass http://127.0.0.1:8360;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

VuePress 目录层级修改

为让悬浮 TOC 展现更多标题,当时在 defineUserConfig 中加入:

markdown: {
  toc: { level: [2, 3, 4, 5] },
  headers: { level: [2, 3, 4, 5] },
}

并在页面 frontmatter 中设置 headerDepth: 5。Rspress POC 改为使用默认自动 outline,不再把此类框架特定配置带入内容。

写在最后

这篇记录停留在 2023 年。新架构将评论迁到 Cloudflare Workers + D1/R2,避免继续维护 Docker、MongoDB、证书和 Nginx 反代。

上次编辑于:
贡献者: Rei Suzunami / 鈴波 靈

评论