CF版博客评论区将会禁用

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 存留的历史评论完好无损地拿出来。

  1. 登录 LeanCloud 控制台,进入你之前为 Valine 创建的应用。
  2. 依次点击:数据存储 → 导入导出 → ​数据导出​。
  3. 勾选 限定 Class,并在列表中勾选 Comment 表(Valine 默认的评论存储表)。
  4. 点击导出,稍后你的注册邮箱会收到一封包含下载链接的邮件。
  5. 下载解压后,你会得到一个 .jsonl 格式的数据文件(例如 Comment.0.jsonl),这就是你的全部历史评论。

第二步:准备 PostgreSQL 数据库并初始化表结构 ​

你可以选择自建 PostgreSQL,也可以使用云端托管服务(如开源界主流的 Neon 或 Supabase)。

默认建议(官方建议)使用Neon,从Vercel -> Storage -> Create Database -> Neon创建一个数据库。(官方文档)

此处以托管服务为例:

  1. 创建并登录你的 PostgreSQL 数据库,拿到 数据库连接字符串 (DATABASE_URL),格式通常为: postgres://username:password@hostname:port/database_name
  2. 打开数据库的 SQL 执行器(如 Neon 的 SQL Editor 页面)。
  3. 前往 Waline 官方 GitHub 仓库,复制官方提供的 waline.pgsql 建表脚本。
  4. 将该脚本粘贴进 SQL 执行器中并运行,它会自动建立 wl_comment、wl_counter 等必需的数据表。

第三步:关键难点——数据格式转换与修正 ​

避坑提示

LeanCloud 的数据是 NoSQL 的键值对(且关联字段使用的是字符串类型的 objectId),而 PostgreSQL 是关系型数据库,使用的自增整数 id。如果直接导入,历史回复的上下级父子关系(pid、rid)会全部错乱。

提示

在 Waline 后端v1.42.0支持多种评论区导入,你可以直接在导入导出 → 导出旁边的箭头 → 从 Valine 导入即可导入评论。因此你可以跳过此步骤。

从 Valine 导入

这里可以借助社区开源的迁移脚本进行格式转换:

  1. 使用开发者社区针对此场景编写的开源转换脚本(例如 GitHub 上的工具 valine-to-waline)。
  2. 将第一步导出的 Comment.0.jsonl 放入工具目录。
  3. 运行转换命令,该工具会自动将 LeanCloud 的字符串 ID 映射为 SQL 的整数 ID,并自动修正 pid 和 rid 的对应关系:
    bash
    go run scripts/gen_sql.go path/to/Comment.0.jsonl output.sql
  4. 运行后将生成一个 output.sql 文件,里面全都是处理好的 INSERT INTO wl_comment ... 语句。
  5. 打开你的 PostgreSQL 客户端或云端 SQL 终端,​**执行这个 output.sql**​,将历史数据正式灌入新数据库。

或者官方转换器也可以:https://waline.js.org/migration/tool.html

转换以后就可以在你的 PostgreSQL 客户端或云端 SQL 终端执行这个转换出来的脚本了


第四步:部署 Waline 后端服务 ​

Waline 需要一个轻量级的 Node.js 后端来处理诸如评论内容审核、邮件通知以及与数据库的安全交互。最省心的方案是通过 Vercel 进行一键部署:

  1. 点击下面的按钮:
Deploy with Vercel
  1. Vercel 会指引你自动 Fork 官方的部署模板到你的 GitHub 仓库。
  2. 配置环境变量:这里直接按照官方配置就行了
  3. 填好后点击 Redeploy 重新部署。部署完成后,你将获得一个专门的后端服务域名(例如 https://your-waline.vercel.app)。
  4. 注册管理员:立即访问 https://your-waline.vercel.app。​第一个注册的人会自动成为系统管理员​,登录后即可在后台看到刚刚导入的所有历史评论!

具体部署方式请访问此文章。


第五步:修改博客前端代码 ​

这里要注意的事,每个博客软件都不同,因此请按照你的博客软件文档来进行配置。

若自己部署的不是博客,请按照自己部署的软件文档来配置

后端与数据搞定后,最后一步是修改博客前端渲染挂载。

打开你博客主题的配置文件(_config.yml),关闭 Valine 更改为 Waline:

yaml
# 停用旧的 Valine
valine:
  enable: false

# 启用全新的 Waline
waline:
  enable: true
  serverURL: 'https://your-waline.vercel.app' # 你的 Vercel 后端地址
  # 如果主题支持,还可以顺便开启 Waline 自带的文章阅读量统计、表情包搜索等高级功能

如果是原生 HTML 自行引入,参考以下更改:

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,请按照以下配置:

注意

这一段原版作者已经很久不更新了,有些更改需要你自己从新配置。

json
"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 配置,因此不需要额外设置。


希望这些答案会帮你迁移或部署成功!