之前一直用的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/%';
最后把剩下的都逐个看一下,确认都是主域名的,统一手动加上即可。
Comments