Waline 评论迁移到 Neon PostgreSQL


LeanCloud 2027 年会停止运营,Waline 评论数据库需要提前迁出来。这里记录一下从 LeanCloud 迁到 Neon PostgreSQL 的完整步骤。

这次要做的事情其实很明确:

  1. 备份 LeanCloud 里的 Waline 评论数据。
  2. 准备 Neon PostgreSQL。
  3. 把 Waline 服务端的数据库配置切到 Neon。
  4. 把评论、用户、统计数据迁过去。
  5. 检查评论列表、回复关系和邮件通知。

Waline 服务端

Waline 不是只靠博客前端运行。
博客页面里的评论组件会请求一个 Waline 服务端,服务端再去连接后面的数据库。

也就是说,这里有三层:

  1. 博客前端:显示评论框。
  2. Waline 服务端:接收评论、读取评论、发送通知。
  3. 数据库:真正保存评论数据。

这次迁移主要改的是第三层数据库。
博客前端的 serverURL 仍然指向 Waline 服务端,不要填 Neon 数据库地址。

如果用的是 Hexo + NexT,可以在 _config.next.ymlwaline.serverURL 里看当前 Waline 服务端地址。

Waline 服务端项目里主要依赖:

1
2
3
4
5
6
{
"dependencies": {
"@waline/vercel": "1.41.1",
"ip2region": "2.3.0"
}
}

Neon 和环境变量

这里直接在 Vercel 里绑定 Neon。

操作步骤:

  1. 打开 Vercel 控制台
  2. 进入 Waline 服务端项目,比如 waline-server
  3. 找到 StorageDatabaseIntegrations
  4. 选择创建数据库。
  5. 数据库类型选择 Neon
  6. 按提示创建 PostgreSQL 数据库。
  7. 创建完成后,把 Neon 绑定到当前 Vercel 项目。
  8. 回到 Vercel 项目的环境变量页面,确认 PostgreSQL 变量已经出现。

后面 Waline 连接成功以后,Neon 里会出现这些表:

  1. wl_comment:评论内容。
  2. wl_counter:文章阅读和统计。
  3. wl_users:用户和管理员账号。

进入 Vercel 项目:

1
Settings -> Environment Variables

配置 PostgreSQL 变量:

1
2
3
4
5
6
POSTGRES_DATABASE
POSTGRES_HOST
POSTGRES_PASSWORD
POSTGRES_PORT=5432
POSTGRES_SSL=true
POSTGRES_USER

注意两点。

第一,不要把真实密码写进代码。

第二,能不用完整连接串就不用完整连接串。

尽量不要继续使用:

1
2
DATABASE_URL
POSTGRES_URL

因为完整 URL 里一般带用户名、密码和主机名。
日志里如果不小心打印出来,会比较麻烦。

然后把旧 LeanCloud 变量删除:

1
2
3
LEAN_ID
LEAN_KEY
LEAN_MASTER_KEY

删完以后,重新部署 Vercel 项目。

迁移评论数据

数据库迁移前一定先备份。

需要备份的不是只有评论内容。
评论里还有昵称、邮箱、IP、回复关系、文章路径这些字段。

迁移的大致步骤是:

  1. 从 LeanCloud 导出当前 Waline 评论数据。
  2. 保存一份原始备份,不要直接改原文件。
  3. 在 Neon 里准备好 Waline 表结构。
  4. 把评论数据导入 wl_comment
  5. 把统计数据导入 wl_counter
  6. 把用户数据导入 wl_users
  7. 检查评论数量是否一致。
  8. 检查回复关系是否正常。

这里最容易出问题的是回复关系。

LeanCloud 里的评论 ID 是字符串形式的 objectId
PostgreSQL 里的 Waline 评论 ID 是数字。

所以迁移时要处理:

  1. objectId 到新数字 id 的映射。
  2. 评论的 pid
  3. 评论的 rid
  4. 历史回复内容里的 @ 锚点。

如果这些没有处理好,评论可能能显示,但回复树会乱。

迁移后可以检查一下历史回复里的旧锚点,确认没有残留旧的 24 位 objectId

这次注意的点

  1. 先备份,再迁移。
  2. 不迁移旧 Valine 历史数据,只迁移当前 Waline 评论。
  3. 不把数据库密码写进仓库。
  4. 删除旧 LeanCloud 环境变量,避免混用。
  5. 迁移回复关系时处理好 pidrid 和历史锚点。
  6. 检查 Vercel 日志,不让完整连接串和 SQL 明细暴露出来。

最终迁移完成后,博客评论还是 Waline。

只是 Waline 后面的数据库,从 LeanCloud 换成了 Neon PostgreSQL。

以上就是 Waline 评论迁移到 Neon PostgreSQL 的整理,如有错误,欢迎大佬指出。

-------------本文结束感谢您的阅读-------------