换电脑引发的博客复活记——从源文件丢失到 Cloudflare 重生

换电脑引发的博客复活记——从源文件丢失到 Cloudflare 重生

十月 29, 2026

八年老博客,换了一台电脑,差点连根拔起。折腾了三天,顺手把多年的顽疾治好了。记录一下,也给同样用 Hexo + GitHub Pages 的朋友避避坑。

事故:源文件全丢了

我的这台新电脑上什么都没有——旧电脑上的 Hexo 工程、文章 Markdown 源文件、主题配置,全在旧机器上,没备份。

唯一还活着的是线上的 anthoney.cn,托管在 GitHub Pages 上。也就是说:网站能看,但”源”没了。想改一个字都没法改。

第一步:从静态站里”考古”出源文件

好在 GitHub Pages 的部署仓库(anthoneycn.github.io)里存着生成的 HTML。思路就是反向工程:

  1. 从部署仓库的历史提交里,把 16 个有差异的页面逐一找回(中间还顺手修正了一个老 bug:整站共用的 diaspora.js 被我误分成了两份);
  2. 从 HTML 把 9 篇文章的 Markdown 源文件提取重建,front-matter 从页面元数据还原;
  3. 照主题 diaspora + Hexo 6.3.0 重新搭工程、装依赖、对配置,本地 hexo server 跑起来和线上逐字节比对。

到这里,博客在本地”复活”了。

第二步:治老病——国内访问慢

博客能改了,但老毛病还在:国内打开要 4~20 秒,偶尔直接卡死。

排查下来原因很简单:GitHub Pages 只有 4 个官方 IP,其中两个在国内完全不通,而域名解析恰好押在不稳的那几条线上。网站本身才 12 KB,根本不关页面的事。

顺手做了两个轻量化优化:

  • 把主题里引用的 Google Fonts 全部删掉(国内根本加载不出来,纯阻塞);
  • 把 131 KB 的微信二维码图压到 57 KB。

根治的方案选了 Cloudflare 免费代理:域名 NS 迁过去之后,全球 Anycast 节点接管访问,源站 IP 被完全隐藏,不再单点押注。

第三步:一个字母引发的 24 小时故障

这是本次最哭笑不得的教训,单独说说。

Cloudflare 添加站点时,我把 **anthoney.cn 少打了个 y**,加成了 anthone.cn(一个我早年手滑注册的错别字域名,DNS 还挂在阿里云上,里面全是欠费残留记录)。

于是:

  • 新网那边改 NS,改的是正确的 anthoney.cn,指向 Cloudflare 给我分配的两个 NS;
  • 但 Cloudflare 里挂着的 zone 是错的 anthone.cn,永远等不到它期望的 NS 匹配;
  • 结果正确域名在全球解析里变成 REFUSED——anthoney.cn 变成了解析黑洞。

因为 WHOIS 数据更新很快,新网后台看起来一切正常,Cloudflare 却一直”等待名称服务器传播”。直到后来用 API 查 zone 状态,才一眼看穿域名对不上。

教训:排查”为什么没生效”类问题时,先核对双方嘴里说的是不是同一个东西。

删掉错域名、重新添加 anthoney.cn、NS 改为一对新分配的地址后,几分钟就激活了。证书自动签发,国内直连从 420 秒降到 13 秒。

第四步:解锁”随时随地写博客”

最后顺手升级了写作体验。以前的流程:必须在装好了环境的电脑上,敲命令生成、推送。现在:

  • 博客源文件放在部署仓库的 hexo 分支;
  • 任何设备的浏览器打开 GitHub,按 . 进网页版编辑器就能写文章;
  • 提交(Commit)即发布:GitHub Actions 自动装依赖、拉主题、生成静态页、推回 main 分支,Cloudflare 全球刷新。

本地环境照常用,两条路殊途同归。

一些实用信息

项目 状态
域名 anthoney.cn(新网注册)
解析 Cloudflare NS,A 记录走橙色代理云
构建 GitHub Actions(推送 hexo 分支自动触发)
主题 diaspora,上游拉取 + 独立 override 目录打补丁
备份 源文件即 hexo 分支本身,天然版本化

如果你也是 Hexo + GitHub Pages 且国内访问慢,这套组合(Cloudflare + Actions)免费、无需备案,值得一试。唯一要注意的:添加域名的时候,别少打字。