之前一直用的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": "自己邮箱地址"
- }
- }
- ]
- }
JSON
配置独立域名
按文档上给的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>
HTML
旧数据调整
不过还有最后一个问题要解决,就是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/%';
SQL
最后把剩下的都逐个看一下,确认都是主域名的,统一手动加上即可。
Comments
Preview: