终于把博客折腾好了!

这篇文章记录一下我从 GitHub Pages 迁移到 Cloudflare Pages,并配置 Waline 评论系统的全过程。本以为只是简单的配置,结果踩了一下午的坑,特此记录,希望能帮到后来人(也防止自己以后忘了)。

1. 为什么迁移?

我原来的博客是托管在 GitHub Pages 上的,但有两个痛点:

  1. 隐私问题:GitHub Pages 强制要求仓库公开(Public),但我希望把博客源码放在私有仓库里。
  2. 速度问题:Cloudflare Pages 的节点速度在全球范围内通常比 GitHub Pages 更快且稳。

于是决定:源码放 GitHub 私有仓库 -> Cloudflare Pages 自动拉取构建 -> 绑定自定义域名

2. 踩坑实录

坑位一:Cloudflare 构建失败 hexo: not found

刚把仓库连上 Cloudflare,第一次构建就红了。
报错:/bin/sh: 1: hexo: not found

原因:Cloudflare 的构建环境是纯净的,没有全局安装 Hexo CLI。
解决
修改 Cloudflare 的 Build Command(构建命令):

  • 原命令:hexo g
  • 修改为npx hexo g

坑位二:DNS 解析 Error 1016

配置域名 indolyn.com 时,访问网站直接报错 Error 1016 Origin DNS error

原因:DNS 设置里的 CNAME 配置错了。
我在 Cloudflare 后台添加记录时,Name(名称)一栏填了 indolyn.com,导致实际解析变成了 indolyn.com.indolyn.com

解决

  • 根域名(example.com):Name 栏必须填 **@**。
  • 子域名(www):Name 栏填 www

坑位三:Waline 评论系统 401 Unauthorized

这是最折磨的一步。Waline 部署在 Vercel 上,数据库用的 LeanCloud 国际版。
网页上一直报错 401 Unauthorized,后台日志显示 Client network socket disconnected。我一开始以为是跨域(CORS)问题,改了半天 CORS_ORIGIN 也没用。

真正原因
我使用的是 LeanCloud 国际版,且没有绑定自定义域名。在 Vercel 环境中,Waline 无法自动找到 LeanCloud 的 API 服务器地址。

解决

  1. 去 LeanCloud 后台找到 AppID。
  2. 在 Vercel 的环境变量(Environment Variables)中,手动添加 **LEAN_SERVER**。
  3. 值填写:https://[AppID前8位].api.lncldglobal.com
  4. 关键一步:修改完变量必须 Redeploy(重新部署) 才会生效!

坑位四:CORS 跨域报错

解决了 401 后,浏览器还是报 CORS 红色错误。

解决
在 Vercel 环境变量中设置 CORS_ORIGIN
为了安全起见,不要用 *,建议设置为:

1
[https://indolyn.com](https://indolyn.com),[https://www.indolyn.com](https://www.indolyn.com),http://localhost:4000

这就允许了线上域名和本地预览环境的访问。

3. 总结

虽然过程有点曲折,但看到评论区跑通的那一刻还是很爽的。
现在的架构:

  • 博客:Hexo (Local) -> GitHub (Private) -> Cloudflare Pages
  • 评论:Waline (Vercel) -> LeanCloud (International)

这样既保证了源码隐私,又有了极速的访问体验,评论系统也完全掌握在自己手里。