将Waline从LeanCloud迁移到MongoDB

LeanCloud 突然发了一条通知说是准备明年停止对外提供服务

而老苏博客的评论系统 Waline 就使用了 LeanCloud 作为评论的存储服务

虽然还有时间,老苏还是赶紧花时间研究了一下,当你看到本文时,说明已成功完成了迁移

数据迁移

可能是因为数据量大,反正 Waline 后台的 导出 从来没成功过

估计应该是超时了,所以只能从数据库的源头想办法

数据导出

LeanCloud 存储结构化数据提供了多种导出机制。通过控制台前往 数据存储 --> 导入导出 ,您可以分别进行 数据导出 和 备份导出。其中:

  • 数据导出:支持按时间范围筛选,它提供了 JSON 格式的导出文件;
  • 备份导出:则提供的是当日凌晨数据库备份的 BSON 格式的文件,它可用于 mongorestore 直接导入 MongoDB 数据库。

老苏选择了 备份导出,因为准备后续使用 MongoDB

LeanCloud 导出成功后,会通过邮件发送导出结果

收到邮件后

逐个下载即可

以 _ 开头的应该用不上

注册 MongoDB

Waline 支持多种数据库,包括 MySQL,PostgreSQL,SQLite 以及 MongoDB

而 https://mongodb.com 官网免费提供了 512M 的 MongoDB 数据库支持,对于 Waline 来说绰绰有余

注册 MongoDB 地址: https://www.mongodb.com

注册成功后,需要获取连接方式

还有一种更简单的创建数据库的办法,就是在 vercel 面板中 --> Storage --> Create a database --> MongoDB Atlas,可以不用考虑连接和安全性设置

  • 进入 Driver 模式

会获得下面这种 mongodb+srv格式的 URI

bash 复制代码
mongodb+srv://<db_user>:<db_password>@cluster0.sfhc25j.mongodb.net/?appName=Cluster0

可用于 Navicat 连接管理

但 AI 不建议老苏使用 Standalone 类型,让选择 Replica Set,都是可以连通的

而 Waline 使用的包比较旧,并不支持 mongod+srv 协议,只能使用 mongodb

  • 进入 Compass 模式,版本选中 1.11 or earlier

会获得下面这种 mongodb格式的 URI

uri 复制代码
mongodb://<db_user>:<db_password>@ac-ytvhtf1-shard-00-00.sfhc25j.mongodb.net:27017,ac-ytvhtf1-shard-00-01.sfhc25j.mongodb.net:27017,ac-ytvhtf1-shard-00-02.sfhc25j.mongodb.net:27017/?replicaSet=atlas-6swbtq-shard-0&ssl=true&authSource=admin

恢复数据

现在我们开始恢复从 LeanCloud 导出的 bson.gz 数据库

访问 MongoDB 官方的 Database Tools 下载页面:
https://www.mongodb.com/try/download/database-tools

然后在命令行执行下面的命令

bash 复制代码
mongorestore --uri "mongodb+srv://<db_user>:<db_password>@cluster0.sfhc25j.mongodb.net/?appName=Cluster0" --db
     waline --dir "C:\Users\Administrator\Downloads\leancloud\2026.01.16" --gzip --drop

Navicat 中查看

需要重新命名一下

测试验证

老苏为了保险起见,并没有直接修改 Vercel 部署的 Waline,而是先验证了连接 MongoDB 的环境变量

有两个选择,一个是基于 docker 在局域网中部署 Waline,另一种是在 Vercel 上部署另一个 Waline 实例

如果是从 Vercel 的 Storage 中创建的 MongoDB Atlas 数据库,下面的两个步骤是不需要的

环境变量

环境变量名称 必填 默认值 备注
MONGO_DB ✅ MongoDB 数据库名称
MONGO_USER ✅ MongoDB 服务的用户名
MONGO_PASSWORD ✅ MongoDB 服务的密码
MONGO_HOST 127.0.0.1 MongoDB 服务的地址,支持数组格式
MONGO_PORT 27017 MongoDB 服务的端口,支持数组格式
MONGO_REPLICASET MongoDB 集群
MONGO_AUTHSOURCE MongoDB 认证源
MONGO_OPT_SSL false 是否使用 SSL 进行连接

下面是根据 mongodb格式的 URI 生成的示例

ini 复制代码
MONGO_DB = waline # 
MONGO_USER = <db_user> 
MONGO_PASSWORD = <db_password> 
MONGO_HOST = ["ac-ytvhtf1-shard-00-00.sfhc25j.mongodb.net","ac-ytvhtf1-shard-00-01.sfhc25j.mongodb.net","ac-ytvhtf1-shard-00-02.sfhc25j.mongodb.net"] # MongoDB 主机名 
MONGO_PORT = [27017,27017,27017] 
MONGO_REPLICASET = atlas-6swbtq-shard-0 
MONGO_AUTHSOURCE = admin  
MONGO_OPT_SSL = true 

安全性

因为是从 Vercel 上访问,所以还需要在 MongoDB 的 Security Quickstart 中,放行 IP 地址 0.0.0.0/0

否则会导致 Waline 登录失败,从网页调试工具,应该会看到错误:Failed to load resource: the server responded with a status of 500 ()

迁移指引

以上测试都通过后,就可以开始对 Vercel 上 Waline 做最后的改动了

  1. 删除与 LeanCloud 相关的三个参数 LEAN_MASTER_KEY、LEAN_KEY、LEAN_ID;
  2. 新增 8 个 MONGO_ 开头的环境变量;
  3. 其他的环境变量保持不变;

目前遗留问题就是 热榜 还依赖 LeanCloud ,还有将近一年时间,总会解决的

参考文档

多数据库服务支持 | Waline

地址:https://waline.js.org/guide/database.html#mongodb
服务端环境变量 | Waline

地址:https://waline.js.org/reference/server/env.html#数据库

相关推荐
IvorySQL2 小时前
PostgreSQL 日报|修复截断 zstd 备份检测(10 月 9 日)
数据库·postgresql
刘胡子大叔2 小时前
SQL 脚本的导入顺序
数据库·sql
代码什么用3 小时前
Spring对IoC的实现
数据库·spring
hz567895 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC5 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday5 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
半杯咖啡半行码5 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt
小米里的大麦5 小时前
16 MySQL 事务
数据库·mysql
西柚小萌新5 小时前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库
邓工说电6 小时前
智慧断路器安全吗?数据加密、离线保护与合规认证全解读
大数据·数据库·人工智能·智能断路器·炜晔科技