05月05, 2025

把博客的评论系统迁移到waline

之前一直用的disqus,但是国内访问不了所以大部分时间都是无用状态。waline是公子的大作,打算迁移尝试一下。确实体验不错。下面记录下迁移过程。

安装

mkdir -p /opt/waline,然后pnpm i @waline/vercel。记得pnpm approve-builds,不然core-js-pure和sqlite3这两个依赖会安装不完全。

准备存储

我直接用的sqlite,简单方便。执行wget https://github.com/walinejs/waline/raw/refs/heads/main/assets/waline.sqlite,作为我们的DB。

配置服务启动

我用pm2进行node管理。执行pm2 startOrReload /opt/waline/pm2.json即可。配置如下:

{
  "apps": [
    {
      "name": "waline",
      "script": "node_modules/@waline/vercel/vanilla.js",
      "cwd": "/opt/waline",
      "exec_mode": "fork",
      "max_memory_restart": "1G",
      "autorestart": true,
      "node_args": [],
      "args": [],
      "env": {
        "SQLITE_PATH": "/opt/waline",
        "JWT_TOKEN": "随便一个字符串",
        "SECURE_DOMAINS": "fanzheng.org,debug.fanzheng.org,diary.fanzheng.org",
        "SMTP_SERVICE": "QQ",
        "SMTP_USER": "发信邮箱地址",
        "SMTP_PASS": "发信邮箱密码",
        "SITE_NAME": "FanZhengBlog",
        "SITE_URL": "",
        "AUTHOR_EMAIL": "自己邮箱地址"
      }
    }
  ]
}

配置独立域名

文档上给的Nginx配置配上即可,我直接把三个博客的评论统一都用comment.fanzheng.org这个域名来承载,只启动一个waline服务。不过waline目前没有非常简单的办法修改端口,只能修改其他服务把端口让给它。

迁移旧评论数据

首先在disqus上把评论导出,不过disqus导出的评论基本上只有昵称、评论内容、URL这几个信息。

导出后用waline的迁移工具,生成一个csv文件。由于我是三个博客的数据,所以我把disqus导出的xml先手动合并了一下再交给这个迁移工具。csv文件可以直接用来导入到sqlite中,导入到wl_Comment表即可。

最后手动修改一下所有自己的评论的user_id字段为1(需要先打开waline的后台进行注册,首个注册的用户默认为管理员)。

插入waline脚本

firekylin的评论配置中插入waline的脚本。这里要注意,waline默认存储的path是不含域名的,只有pathname。我由于有多个博客,因此必须使用完整URL的形式。所以在waline的前端配置这里,path要改成window.location.origin+window.location.pathname(默认只有window.location.pathname)。

<head>
  <!-- ... -->
  <link
    rel="stylesheet"
    href="https://unpkg.com/@waline/client@v3/dist/waline.css"
  />
  <!-- ... -->
</head>
<body>
  <!-- ... -->
  <div id="waline"></div>
  <script type="module">
    import { init } from 'https://unpkg.com/@waline/client@v3/dist/waline.js';

    init({
      el: '#waline',
      serverURL: 'https://comment.fanzheng.org',
      path: window.location.origin+window.location.pathname,
    });
  </script>
</body>

旧数据调整

不过还有最后一个问题要解决,就是waline迁移工具生成的csv里的URL都是只有pathname的,需要手动修改一下。

根据我自己URL的特征,写个SQL处理一下:

UPDATE wl_Comment
SET url = 'https://fanzheng.org'  || substr(url, 1)
WHERE url LIKE '/archives/%';

UPDATE wl_Comment
SET url = 'https://diary.fanzheng.org'  || substr(url, 1)
WHERE url LIKE '/post/2%';

UPDATE wl_Comment
SET url = 'https://debug.fanzheng.org'  || substr(url, 1)
WHERE url LIKE '/post/%';

最后把剩下的都逐个看一下,确认都是主域名的,统一手动加上即可。

本文链接:https://debug.fanzheng.org/post/ba-bo-ke-de-ping-lun-xi-tong-qian-yi-dao-waline.html

-- EOF --

Comments