rt,因为 LeanCloud 将会被停用,但Valine也没有做任何措施,cf-blog也没有再更新,因此,无法再新的Waline兼容。
我也不知道至今到现在 cf-blog 也没有更新,但他的官网是有更新。
对于 LeanCloud 关闭的问题我是真的不理解,从2026 年 1 月 12 日起,它将会停止注册账号。从2027 年 1 月 12 日起,将彻底停止服务。也就是说,Valine 依旧能正常加载,但无法评论或储存了。
提示
使用Waline的人享福了,毕竟除了 LeanCloud,它还支持 MySQL, PostgreSQL, SQLite 以及 MongoDB。也提供了备份(Valine没有的)。若在使用 Waline 请赶紧备份数据并切换到其他数据库里面。
为什么会禁用
简单,因为服务器没了,评论就发不出去了。Valine仓库没有归档(它靠的是CDN仓库和NPM仓库),因此可以显示。
点击发送后,它会直接请求服务器,但服务器地址不存在或者API密钥不对,就会返回错误,评论发不出去。按照这个问题,Valine也无法读取数据库导致无法加载评论。因此我把它说为禁用了。
虽然 cf-blog 对 Waline 可以使用,但我发现部分功能无法正常显示。因此我也不改了。就仅Valaxy博客使用Waline吧!
解说信息
若想查看更多信息,点击这里。这里我也提供 NodeLoc 文章。
这是我用AI帮我解说 LeanCloud 的情况
这份公告的核心内容是:国内知名后端云服务商 LeanCloud 宣布将于 2027 年 1 月 12 日正式停止对外提供服务,并为现有用户留出了一年的过渡期进行数据迁移和退款。
为了方便你快速了解,我将这份停服公告的关键信息梳理如下:
关键时间节点
- 功能冻结(2026 年 1 月 12 日)
- 已经停止新用户注册
- 已经停止创建新的应用(App)
- 现有存量应用在此期间仍可正常运行
- 正式停服(2027 年 1 月 12 日)
- 完全关闭所有服务,包括应用访问、数据读写、API 调用及控制台登录
- 平台将依法对所有留存的用户数据进行永久性销毁或匿名化处理,一旦销毁绝不可恢复
应对与善后措施
- 数据迁移
- 官方已经准备了专门的《数据导出和迁移指引》
- 开发者需要根据业务情况,尽早启动数据的导出和服务器后端的搬迁工作
- 余额退款
- 如果你的 LeanCloud 账户中还有充值余额,在数据迁移完毕后,可以参考官方的《退款指引》自助申请退款
核心原因
- 官方表示做出这个慎重的决定,是为了让团队能够聚焦打造更优质的产品
警告
请务必把数据备份出来。根据《个人信息保护法》及相关法律法规,服务停止后将会把所有数据彻底清除并无法恢复。
如何迁移或备份
我使用AI来进行回答这个问题。
注意
AI也会犯错误,请仔细查看是否正确,若出现错误,可以在评论区说。
核心架构变化
在开始前,我们先看清前后架构的对比:
- 原架构:
Valine (前端)→ 直连 →LeanCloud (NoSQL 存储) - 新架构:
Waline (前端)→Vercel / Zeabur (Node.js 后端)→PostgreSQL (关系型数据库)
第一步:从 LeanCloud 备份并导出原始数据
首先,必须把我们在 LeanCloud 存留的历史评论完好无损地拿出来。
- 登录 LeanCloud 控制台,进入你之前为 Valine 创建的应用。
- 依次点击:数据存储 → 导入导出 → 数据导出。
- 勾选 限定 Class,并在列表中勾选
Comment表(Valine 默认的评论存储表)。 - 点击导出,稍后你的注册邮箱会收到一封包含下载链接的邮件。
- 下载解压后,你会得到一个
.jsonl格式的数据文件(例如Comment.0.jsonl),这就是你的全部历史评论。
第二步:准备 PostgreSQL 数据库并初始化表结构
你可以选择自建 PostgreSQL,也可以使用云端托管服务(如开源界主流的 Neon 或 Supabase)。
默认建议(官方建议)使用Neon,从Vercel -> Storage -> Create Database -> Neon创建一个数据库。(官方文档)
此处以托管服务为例:
- 创建并登录你的 PostgreSQL 数据库,拿到 数据库连接字符串 (DATABASE_URL),格式通常为:
postgres://username:password@hostname:port/database_name - 打开数据库的 SQL 执行器(如 Neon 的 SQL Editor 页面)。
- 前往 Waline 官方 GitHub 仓库,复制官方提供的
waline.pgsql建表脚本。 - 将该脚本粘贴进 SQL 执行器中并运行,它会自动建立
wl_comment、wl_counter等必需的数据表。
第三步:关键难点——数据格式转换与修正
避坑提示
LeanCloud 的数据是 NoSQL 的键值对(且关联字段使用的是字符串类型的 objectId),而 PostgreSQL 是关系型数据库,使用的自增整数 id。如果直接导入,历史回复的上下级父子关系(pid、rid)会全部错乱。
提示
在 Waline 后端v1.42.0支持多种评论区导入,你可以直接在导入导出 → 导出旁边的箭头 → 从 Valine 导入即可导入评论。因此你可以跳过此步骤。

这里可以借助社区开源的迁移脚本进行格式转换:
- 使用开发者社区针对此场景编写的开源转换脚本(例如 GitHub 上的工具 valine-to-waline)。
- 将第一步导出的
Comment.0.jsonl放入工具目录。 - 运行转换命令,该工具会自动将 LeanCloud 的字符串 ID 映射为 SQL 的整数 ID,并自动修正
pid和rid的对应关系:bashgo run scripts/gen_sql.go path/to/Comment.0.jsonl output.sql - 运行后将生成一个
output.sql文件,里面全都是处理好的INSERT INTO wl_comment ...语句。 - 打开你的 PostgreSQL 客户端或云端 SQL 终端,**执行这个
output.sql**,将历史数据正式灌入新数据库。
或者官方转换器也可以:https://waline.js.org/migration/tool.html
转换以后就可以在你的 PostgreSQL 客户端或云端 SQL 终端执行这个转换出来的脚本了
第四步:部署 Waline 后端服务
Waline 需要一个轻量级的 Node.js 后端来处理诸如评论内容审核、邮件通知以及与数据库的安全交互。最省心的方案是通过 Vercel 进行一键部署:
- 点击下面的按钮:
- Vercel 会指引你自动 Fork 官方的部署模板到你的 GitHub 仓库。
- 配置环境变量:这里直接按照官方配置就行了
- 填好后点击 Redeploy 重新部署。部署完成后,你将获得一个专门的后端服务域名(例如
https://your-waline.vercel.app)。 - 注册管理员:立即访问
https://your-waline.vercel.app。第一个注册的人会自动成为系统管理员,登录后即可在后台看到刚刚导入的所有历史评论!
具体部署方式请访问此文章。
第五步:修改博客前端代码
这里要注意的事,每个博客软件都不同,因此请按照你的博客软件文档来进行配置。
若自己部署的不是博客,请按照自己部署的软件文档来配置
后端与数据搞定后,最后一步是修改博客前端渲染挂载。
打开你博客主题的配置文件(_config.yml),关闭 Valine 更改为 Waline:
# 停用旧的 Valine
valine:
enable: false
# 启用全新的 Waline
waline:
enable: true
serverURL: 'https://your-waline.vercel.app' # 你的 Vercel 后端地址
# 如果主题支持,还可以顺便开启 Waline 自带的文章阅读量统计、表情包搜索等高级功能如果是原生 HTML 自行引入,参考以下更改:
<!-- 引入 Waline 客户端 -->
<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://your-waline.vercel.app',
});
</script>
</body>若你依旧使用cf-blog,请按照以下配置:
注意
这一段原版作者已经很久不更新了,有些更改需要你自己从新配置。
"codeBeforHead":`
<style>
#waline-recent img {max-width: 100%;}
#waline-recent li {border: thick double #32a1ce;}
</style>
<script src='//cdn.jsdelivr.net/npm/@waline/client/dist/Waline.min.js'></script>
`,//其他代码,显示在</head>前
"codeBeforBody":`
<script>
//这一段是初始化Waline的,visitor: true记得开启
new Waline({
el:'#waline',
serverURL: 'https://pinglun.vercel.app',
appId: 'eWrOzSzYP1Fm8QD96P0vKli-MdYXbMMI',
appKey: 'jMF98EwbmKvdGnDLamPwAk1',
avatar:'monsterid',
recordIP:false,
requiredFields:['nick'],
visitor: true,
//path:"/",
placeholder:"整两句..."
})
//这一段是加载最近评论的
window.addEventListener('load', function() {
Waline.Widget.RecentComments({
el: '#waline-recent',
serverURL: 'https://pinglun.vercel.app',
count: 10
});
});
</script>
`,//其他代码,显示在</body>前
"commentCode":`
<div id="waline" name="waline" class="comments-area"></div>
`,//评论区代码
"widgetOther":`
<div id="linkcat-0" class="widget widget_links">
<h3 class="widget-title">
<span>最近评论</span></h3>
<div id="waline-recent"></div>
</div>
`,//20201224新增参数,用于右侧 小部件扩展使用 Valaxy 可以使用 valaxy-addon-waline 来配置,默认没有 Valine 配置,因此不需要额外设置。
希望这些答案会帮你迁移或部署成功!
