• 简体中文
  • Waline 评论系统的更换

    最近虽然 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 反代。

    Comments

    Loading comments…