【博客搭建】将留言系统迁移到 Waline
背景
今天发现我的留言板莫名出现了一条留言”后端 RAG 服务是否已启动”。本来慌了 0.0,以为是什么龙虾觉醒,因为一般只有我自己和少数几个人知道我的博客,后来去 LeanCloud 面板看了一眼,好像还真是有陌生人留言。并且还额外发现了好几条我之前博客的评论,都被我忽视了!!看来我的博客在公网上还是有人看的嘛嘿嘿。
于是我打算设置一个留言自动提醒功能。此外,官网看到 LeanCloud 即将停服(https://docs.leancloud.cn/sdk/announcements/sunset-announcement/),因此我还打算将留言系统从 LeanCloud 迁移到 Waline。此篇用于记录迁移过程。
相关概念介绍
LeanCloud
LeanCloud 是一个 BaaS(Backend as a Service,后端即服务)平台,提供数据库、云函数、用户系统、文件存储等功能。简单说就是:你不需要自己搭后端服务器,直接调它的 SDK 就能存取数据。
很多静态博客的评论系统(比如 Valine)都把 LeanCloud 当数据库用。但现在 LeanCloud 国内版宣布即将停服,需要迁移。
Valine
Valine 是一款基于 LeanCloud 的评论系统,无后端、部署简单,曾经在静态博客圈非常流行。但由于直接暴露 LeanCloud AppKey 在前端,存在安全隐患,目前已逐渐被 Waline 取代。
Waline
Waline 可以理解为 Valine 的”进化版”,在 Valine 的基础上增加了独立的服务端,解决了安全问题,同时支持更多功能:
- 评论通知(邮件/微信/Telegram)
- 评论管理后台
- 浏览量统计
- 多数据库支持
Vercel
Vercel 是一个面向前端开发者的云部署平台,支持一键部署、自动 CI/CD、全球 CDN 加速。它是 Next.js 的创造者,免费套餐对个人项目非常友好。
Waline 的服务端可以直接部署在 Vercel 上,完全免费,几分钟搞定。
Neon
Neon 是一个 Serverless PostgreSQL 数据库服务,按用量计费,免费额度对小型博客绰绰有余。Vercel 的 Storage 功能可以直接集成 Neon,搭配 Waline 使用非常方便。
概念对比总览
| 名称 | 类型 | 定位 | 是否免费 |
|---|---|---|---|
| LeanCloud | BaaS | 提供数据库、云函数、用户系统等后端服务 | 免费套餐(即将停服) |
| Valine | 评论系统 | 基于 LeanCloud 的无后端评论工具 | 免费 |
| Waline | 评论系统 | Valine 的进化版,有独立服务端,更安全 | 免费 |
| Vercel | 部署平台 | 托管前端/全栈应用,自动 CI/CD | 免费套餐 |
| Neon | 数据库服务(DBaaS) | Serverless PostgreSQL,按量计费 | 免费套餐 |
本次迁移的组合就是:Waline(评论系统)+ Vercel(服务端托管)+ Neon(数据库),三者均有免费套餐,对个人博客来说零成本。
先导出 LeanCloud 数据
在做任何操作之前,先把旧数据导出来,防止停服后数据丢失。
- 登录 LeanCloud 控制台
- 进入你的应用 → 数据存储 → 结构化数据
- 找到
Comment表,点击右上角导出,选择 JSON 格式 - 下载导出文件,保存好
部署 Waline 服务端(Vercel + Neon)
官方推荐的方案是 Vercel + Neon,完全免费。
1.1 一键部署到 Vercel
点击下方按钮,跳转到 Vercel 进行部署(需要 GitHub 账号登录):
输入一个项目名称,点击 Create 即可,Vercel 会自动帮你 fork 仓库并完成部署。
1.2 创建 Neon 数据库
- 部署成功后,进入 Vercel 项目控制台,点击顶部
Storage - 选择
Create Database,数据库类型选Neon,一路Continue - 数据库创建完成后,点击
Open in Neon跳转到 Neon 控制台 - 在左侧选择
SQL Editor,将 waline.pgsql 中的建表 SQL 全部粘贴进去,点击Run执行 - 回到 Vercel 项目控制台,点击顶部
Storage标签,确认刚才创建的 Neon 数据库显示在列表中,且状态为已连接。如果没连接,点击Connect完成关联 - 回到 Vercel,点击
Deployments,在最新一次部署右侧点击Redeploy,让数据库配置生效。
1.3 绑定自定义域名(可选)
可以把自己的域名绑定到 Waline 服务端,这样国内访问更稳定,也更好看。以我自己的域名 tianlejin.top 为例:
- 进入 Vercel 项目控制台 → 顶部
Settings→ 左侧Domains - 输入你想用的子域名,比如
waline.tianlejin.top,点击Add - Vercel 会提示你去域名服务商添加一条 DNS 解析记录:
| 记录类型 | 主机记录 | 记录值 |
|---|---|---|
| CNAME | waline | cname.vercel-dns.com |
- 登录你的域名服务商控制台(阿里云、腾讯云等),在 DNS 解析里添加上述记录
- 等待几分钟后,回到 Vercel Domains 页面,显示 ✅ Valid Configuration 即表示生效
之后你的 Waline 服务端地址就变成了 https://waline.tianlejin.top,评论管理后台地址为 https://waline.tianlejin.top/ui,记得同步更新 Hexo 配置里的 serverURL。
1.4 注册管理员账号
部署完成后,访问 https://waline.tianlejin.top/ui/register 注册账号。(如果没绑定域名就是 https://你的项目名.vercel.app/ui/register)第一个注册的账号会自动成为管理员,之后就可以在 /ui 管理评论了。
迁移历史评论数据
Waline 官方提供了数据迁移助手(https://waline.js.org/migration/tool.html),可以将 LeanCloud/Valine 的数据转换成 Waline 支持的格式。
- 打开迁移助手页面
- 来源选择
Valine(LeanCloud 导出的数据和 Valine 格式一致) - 目标选择
Waline MySQL/PostgreSQL/SQLite - 上传之前导出的 JSON 文件,点击转换,下载转换后的文件
- 登录 Neon 控制台,在 SQL Editor 中执行导入操作
Hexo Butterfly 主题接入 Waline
Butterfly 主题原生支持 Waline,不需要额外安装插件,直接修改主题配置文件即可。
打开 _config.butterfly.yml(或者 themes/butterfly/_config.yml),找到评论相关配置:
1 | comments: |
保存后重新 hexo generate 并部署,评论区就会切换到 Waline 了。
配置邮件通知
在 Vercel 项目的 Settings → Environment Variables 中添加以下环境变量:
| 变量名 | 说明 | 示例 |
|---|---|---|
SMTP_SERVICE |
邮件服务商 | 163 或 Gmail |
SMTP_USER |
发件邮箱地址 | [email protected] |
SMTP_PASS |
邮箱授权码(不是登录密码) | xxxxxx |
AUTHOR_EMAIL |
接收通知的邮箱(你自己的) | [email protected] |
SITE_NAME |
你的博客名称(邮件中显示) | 我的小博客 |
SITE_URL |
你的博客地址 | https://yourblog.com |
添加完毕后,记得在 Deployments 页面重新部署一次让配置生效。
之后有人留言,你就会收到邮件提醒,再也不会错过了 ✉️
迁移前后架构对比
| 角色 | 迁移前 | 迁移后 |
|---|---|---|
| 前端评论组件 | Valine | Waline 客户端 |
| 评论服务逻辑 | LeanCloud(内置) | Waline 服务端(运行在 Vercel) |
| 数据存储 | LeanCloud(内置) | Neon(PostgreSQL) |
| 评论通知 | ❌ 无 | ✅ 邮件通知 |
| 评论管理后台 | LeanCloud 控制台 | Waline 自带管理界面(/ui) |
可以看出,原来 LeanCloud 一个平台承包了”服务逻辑”和”数据存储”两件事,迁移后由 Vercel 和 Neon 分别接手,职责更清晰,也更灵活。
参考链接
- LeanCloud 停服公告: https://docs.leancloud.cn/sdk/announcements/sunset-announcement/
- Waline 快速上手文档: https://waline.js.org/guide/get-started/
- Waline 数据迁移助手: https://waline.js.org/migration/tool.html
- Waline 评论通知配置: https://waline.js.org/guide/features/notification.html
- Waline 服务端环境变量一览: https://waline.js.org/reference/server/env.html
- Waline Vercel 部署教程: https://waline.js.org/guide/deploy/vercel.html
- waline.pgsql 建表 SQL 文件: https://github.com/walinejs/waline/blob/main/assets/waline.pgsql
