换电脑引发的博客复活记——从源文件丢失到 Cloudflare 重生
八年老博客,换了一台电脑,差点连根拔起。折腾了三天,顺手把多年的顽疾治好了。记录一下,也给同样用 Hexo + GitHub Pages 的朋友避避坑。
事故:源文件全丢了
我的这台新电脑上什么都没有——旧电脑上的 Hexo 工程、文章 Markdown 源文件、主题配置,全在旧机器上,没备份。
唯一还活着的是线上的 anthoney.cn,托管在 GitHub Pages 上。也就是说:网站能看,但”源”没了。想改一个字都没法改。
第一步:从静态站里”考古”出源文件
好在 GitHub Pages 的部署仓库(anthoneycn.github.io)里存着生成的 HTML。思路就是反向工程:
- 从部署仓库的历史提交里,把 16 个有差异的页面逐一找回(中间还顺手修正了一个老 bug:整站共用的
diaspora.js被我误分成了两份); - 从 HTML 把 9 篇文章的 Markdown 源文件提取重建,front-matter 从页面元数据还原;
- 照主题 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)免费、无需备案,值得一试。唯一要注意的:添加域名的时候,别少打字。