将Waline从LeanCloud迁移到MongoDB

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

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

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

数据迁移

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

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

数据导出

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

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

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

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

收到邮件后

逐个下载即可

_ 开头的应该用不上

注册 MongoDB

Waline 支持多种数据库,包括 MySQLPostgreSQLSQLite 以及 MongoDB

https://mongodb.com 官网免费提供了 512MMongoDB 数据库支持,对于 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 实例

如果是从 VercelStorage 中创建的 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 上访问,所以还需要在 MongoDBSecurity Quickstart 中,放行 IP 地址 0.0.0.0/0

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

迁移指引

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

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

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

参考文档

多数据库服务支持 | Waline

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

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

相关推荐
Gain_chance3 分钟前
大数据毕业设计实战|Data Insight Platform:用 FastAPI + ClickHouse 打造低门槛全链路数据洞察平台
大数据·数据库·clickhouse·毕业设计·fastapi
harmony&1 小时前
ETCD 存储系统实战:从单节点部署到 Kubernetes 高可用集群
数据库·kubernetes·etcd
2601_962066491 小时前
【玩转全栈】----Django模板的继承
数据库·django·sqlite
一只小bit2 小时前
Redis哨兵机制、主从复制与集群搭建与维护
数据库·redis·bootstrap
zlwool8 小时前
图纸管理选型避坑指南
数据库·erp·设备erp·非标机械
小灰灰搞电子10 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
软件聚导航11 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
学习星球12 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
GoppViper12 小时前
RDF资源描述框架深度解析:语义Web的数据基石与实战逻辑
前端·数据库
2601_9621741713 小时前
Redis 简介
数据库·redis·wpf