Waline 评论系统的更换

Rei SuzunamiDevelopment Logvuepress-theme-hopeWalineDocker大约 5 分钟

Waline 评论系统的更换

  • 最近虽然 DDL 缠身,但还是简单回顾了一下自己的博客建设工作,滚了个新版本,打算之后写一些学习相关的东西上去。(绝对不是被 XCRHopen in new window 的一天三篇博文刺激到)
  • 中间不出意外地出了一大堆意外,简单地记录一下以防自己以后忘记吧。

comment-plugin 的更新

  • 这一部分还是比较稳定的,就是要把原来 config.ts 里的配置挪到 theme.ts 里面。复制粘贴一下就好。

目前我的配置如下:

comment:{
      provider:"Waline",
      serverURL: "https://server.url",
      requiredMeta: ['nick', 'mail'],
      login: 'force',
      wordLimit: 150,
      emoji: [
        '//unpkg.com/@waline/[email protected]/tw-emoji',
        '//unpkg.com/@waline/[email protected]/tw-object',
        '//unpkg.com/@waline/[email protected]/tw-symbol',
        'https://unpkg.com/@waline/[email protected]/tw-travel',
        '//unpkg.com/@waline/[email protected]/tw-flag'
    ],
      reaction:[
        'https://unpkg.com/@waline/[email protected]/tw-emoji/1f60b.png',
        'https://unpkg.com/@waline/[email protected]/tw-emoji/1f914.png',
        'https://unpkg.com/@waline/[email protected]/tw-emoji/1f625.png'
      ]
      
    }

大意就是启用强制登录检查,然后字数限制 150 字符;开启了表情评论功能,使用 Twitter Emoji。

部署 Waline

作为一个 VPS 大量溢出的老烧爱好者,只要是能自己本地部署的服务,我都不想使用受限多多的免费云平台。虽然不知道为什么 Waline 的开发者极其推崇这种 使用受限的公共存储服务的思路,但好歹为我们自建党留下了详细的操作指南。所以就此选择了顺手的 Docker Compose + certbot 组合,开始了这次的冒险。

然而,这次的旅程却比想象中踩的坑要多。

docker-compose.yml 的撰写

  • 出于方便移植的目的,我的数据库与 Waline 本体都使用了 Docker Compose 进行部署。
  • 二者之间采用 depend_on 进行连接,写入同一个 docker-compose.yml 文件中。

我的最终结果如下:

version: '3'

services:
  mongo:
    container_name: mongo-waline
    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 # 持久化存储 DB 内容

  waline:
    container_name: waline
    image: lizheming/waline:latest
    restart: always
    ports:
      - 8360:8360
    depends_on: 
      - mongo # 将二者连接的关键一步
    environment:
      TZ: 'Asia/Shanghai'
        #MONGO_DB: comments?authSource=admin # 事实证明只需要 AUTHSOURCE 就可以了
      MONGO_DB: comments
      MONGO_AUTHSOURCE: admin # MongoDB 加上这一句才能正常查询
      MONGO_USER: ROOT_USERNAME
      MONGO_PASSWORD: ROOT_PASSWORD
      MONGO_HOST: mongo
      TG_BOT_TOKEN: '111111:AAAAAA'
      TG_CHAT_ID: 111111
      SITE_NAME: "Rei Suzunami 的 CENTRAL DOGMA" # 不可以使用单引号 \'
      SITE_URL: 'https://blog.ayanami-official.net'
      SECURE_DOMAINS: 'SECURE.DOMAINS' # 评论服务自己的域名,单独申请证书
      AUTHOR_EMAIL: '[email protected]'

注意事项

  1. MONGO_AUTHSOURCE

    • MongoDB 在使用管理员权限操作数据库时必须添加的内容。一开始我没有使用,导致数据库一直无法读取。
    • 当然,我在注意到这一项设置前,并且上网搜索了相关内容后,曾使用了一个特别的方法: 在数据库名称后面加上 ?authSource=admin 。而且事实证明还真的有用
  2. SITE_NAME

    • 截止到本篇文章发布时,此处的字符串内容不能包含单引号 ' 。否则会引起报错:Telegram Notification Failed:{"ok":false,"error_code":400,"description":"Bad Request: can't parse entities: Character '#' is reserved and must be escaped with the preceding '\\'"}
    • 据热心群友 浅羽 (羽醬) 櫻川 推测,可能是 Waline 在编解码 URL 时出现了意外的问题。
    • 在 Waline 的 issue#276open in new window 中提到了此问题,但开发者当时选择了搁置处理。
    • 然后我又提了一个 discussionopen in new window ,希望之后有人能回复吧。
      • 更新:已回复。作者在对接 Telegram 的时候被关键字一直困扰,正在寻求一体的解决方案。(咕咕咕)

申请证书

这里其实能说的并不太多,毕竟 certbotacme.sh 都是成熟的技术。主要说一些我遇到的问题吧。

acme.shopen in new window

为了生成 wildcard 证书偷懒,我使用了 certonly 模式。

  • 设置环境变量:export CF_Token="Your_Cloudflare_DNS_API_Key_Goes_here"
  • 执行 acme.sh --issue --dns dns_cf -d '*.ayanami-official.net'
  • 但是 install 时遇到问题,一直安装不上,手写 Nginx 配置文件也不行,遂放弃。

certbot

  • 先保存一个文件记录 API Token。
  • 但下面的命令按照官方说明执行后没有效果,但 acme 之后就一遍过了。实在奇怪。怀疑是那条环境变量的作用。
  • certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d example.ayanami-official.net

Nginx 配置文件

基本就是照抄之前 http challenge 的时候 certbot 给我写的配置。

server{
    server_name blog-comments.ayanami-official.net;
    location / {
        proxy_pass http://127.0.0.1:8360; # Waline 端口
        proxy_set_header X-Real-IP $remote_addr; # 转发真实 IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/blog-comments.ayanami-official.net/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/blog-comments.ayanami-official.net/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server{
    if ($host = blog-comments.ayanami-official.net) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80;
        server_name blog-comments.ayanami-official.net;
    return 404; # managed by Certbot


}

不得不说 certbot 写配置确实标准。

vuepress-theme-hope 目录层级修改

发现悬浮 TOC 的目录层级太低,没法展现太多标题。经过厚着脸皮问群友的艰难求索之后,发现了解决方法。

  • 进入 config.ts,在 defineUserConfig 内加入:
      markdown:{
          toc:{
            level:[2,3,4,5]
          },
          headers:{
            level: [2, 3, 4, 5],
          }
        },
    
  • 在页面开头的 frontmatter 中设置 headerDepth = 5 即可让悬浮 TOC 的层级自动设为 5。
  • 然而,侧边栏 Sidebar 的自动层级还是无法自动生成。还待进一步研究。

写在最后

  • 虽然这一篇内容其实并不多,但我还是花费了 2 天时间才配置完毕。期间各种查询文档实在是累得不行,甚至看 XCRH 用 Hexo 一把梭的潇洒模样,自己也想转投 Hexo 阵营。但回头一想自己辛辛苦苦配置好的 Jenkins 和 GitHub Repo,还是硬着头皮继续干。
  • 现在是 2023 年 3 月 28 日的凌晨 0 点 16 分。我将会在撰写完此篇文档后睡觉,并在起床后复盘完给 XCRH 的 Linux 机器杀毒的工作,开启一个好用工具的总结列表,然后开始轰轰烈烈的《大学物理II-2》复习计划。
  • 祝我一切顺利。
上次编辑于:
贡献者: Rei Suzunami / 鈴波 靈
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.14.9