LOADING

正在前往…… 初次加载可能较慢 如遇显示错误可ctrl+shift+r强刷新

将Github Pages部署切换为Cloudflare Pages部署的解决方案

2026/5/14 博客

前情提要

相信你已经按照网络上主流的方法,把自己的Hexo博客部署在GitHub Pages上了。可当你满怀期待地把网站分享给朋友时,往往会迎来一句:

你这网站访问怎么这么慢啊

聪明如你立刻意识到,GitHub毕竟是国外的服务器,而且你平常不挂加速器访问GitHub还要加载老半天,更何况你的博客呢?
于是问题就出现了:我们既想要提高网站的运行速度,又想要节约成本当白嫖党,这似乎是矛盾的。
如果你也有这样的困惑,那么这篇文章一定适合你
这篇文章就来帮你解决这个“速度与成本”的悖论。我将讲述我自己仅花费域名的费用利用Cloudflare Pages提高博客访问速度的经历

注:我不想在国内备案,于是我用了Cloudflare。能接受在国内备案流程的可使用国内大厂部署

基础知识预备

如果这一部分你已经很熟悉了,或者你没兴趣听我胡扯,你可以直接跳转到“操作流程

Hexo的本质

Hexo本身不是服务器。
它只是一个用 Markdown 写文章,自动生成 HTML/CSS/JS,帮你整理目录,套主题模板的工具。
例如你写

# My first page
114514

Hexo会帮你生成

<html>
  <h1>My first page</h1>
  <p>114514</p>
</html>

并放到public目录里,这个目录本质就是:index.html、css/、js/、images/。你执行Hexo deploy时,Hexo只是自动帮你将目录里的静态文件上传到GitHub

GitHub Pages的本质

用户访问静态网站时,实际经过了以下过程:

  1. DNS 解析到 GitHub 的服务器
  2. GitHub 检查你的仓库
  3. 找到:index.html、css、js
    直接返回文件

用户访问网站时GitHub会检查:username.github.io这个仓库,里面如果有index.html就把它当网站

迁移必要性及优缺点对比

GitHub Pages和Cloudflare Pages都是免费静态站点托管服务,但Cloudflare Pages功能更强大。Cloudflare依托全球CDN网络,将静态资源快速分发到全球节点,大幅提升访问速度,自定义域名支持完全免费的SSL证书并自动续期,提供灵活的环境变量和重定向规则配置。此外,Cloudflare Pages支持多分支部署和PR预览(每次提交或 Pull Request 都自动生成预览站点)。相比之下,GitHub Pages对构建速度、全球加速、分支预览等支持较弱,且仅能单分支发布(通常使用主分支或 docs 目录)。
下表列出两者在性能、功能、成本等维度的主要区别

对比项目 GitHub Pages Cloudflare Pages
网络性能 依赖 GitHub 网络 全球 300+ CDN 节点加速
访问控制 支持自定义访问策略
构建速度 2-3 分钟 1-2 分钟
部署方式 GitHub Actions或手动构建 Git集成自动部署
免费配额 无限 免费计划:500 次/月构建
分支部署 仅主分支 支持任意分支部署,分支预览环境
预览部署 无内置预览 Pull Request 自动预览
域名管理 手动 集成

语言组织能力不太行部分地方用了ai

操作流程

原博客的准备工作

现在你应该已经有了一个GitHub Pages用户主页仓库,名为xxxxx.github.io。我把这个仓库删掉了,换成了另一个名字强迫症,假设就叫blogsource吧
注意新建仓库后需要初始化Git

为节约空间,最好创建一个.gitignore,内容如下

node_modules/
public/
.deploy*/
db.json
.DS_Store

Cloudflare部署

准备工作

目前Cloudflare没有被墙废话,于是我们可以直接去https://www.cloudflare.com 注册一个账号
账号创建成功后来到“账户主页”,页面中间偏右位置有一个“Workers 和 Pages”,点击右边的“+”,进入Workers创建页面
注意:下面有一行字想要部署 Pages?开始使用,点击开始使用后才进入创建Pages页面
点击导入现有 Git 存储库右方的开始使用
在“从您的帐户部署站点”页面,先添加自己的Github账户并选中,选择自己的源码库blogsource,进入设置页面

设置页面相关参数

项目名称

与自动生成的二级域名有关,二级域名一般为 项目名称.pages.dev

生产分支

选择main即可

框架预设

有Hexo选择Hexo,没有Hexo选择无

构建命令

即生成静态网站时Bash输入的命令,填 npm install && npx hexo generate

构建输出目录

public

环境变量

添加变量名称 NODE_VERSION,值为20
注:这里的环境变量为node.js的版本,如有其他要求可填其他值或不填环境变量

所有步骤完成后点击开始构建即可

报错及处理

构建时出错

我在构建时出现了如下错误:

17:19:00.759 Executing user command: npm install && npx hexo generate 
17:19:01.282 npm error code ENOENT 
17:19:01.282 npm error syscall open 
17:19:01.282 npm error path /opt/buildhome/repo/package.json 
17:19:01.283 npm error errno -2 17:19:01.283 npm error enoent Could not read package.json: Error: ENOENT: no such file or directory, open '/opt/buildhome/repo/package.json' 
17:19:01.283 npm error enoent This is related to npm not being able to find a file. 
17:19:01.283 npm error enoent 17:19:01.283 npm error A complete log of this run can be found in: /opt/buildhome/.npm/_logs/2026-05-11T09_19_00_989Z-debug-0.log 
17:19:01.292 Failed: Error while executing user command. Exited with error code: 254 
17:19:01.298 Failed: build command exited with code: 1 17:19:02.031 Failed: error occurred while running build command

翻译一下就是Cloudflare在仓库根目录中未找到package.json,这说明我上传到Github上的是hexo generate后的静态文件
Github Pages只需要HTML,而Cloudflare Pages需要源码自动构建出public。

解决方法也很简单,上传完整的Hexo工程即可

git push时出错
$ git push -u origin main fatal: unable to access 'https://github.com/mingyiaz/mingyiaz-blog-source.git/': Recv failure: Connection was reset

这是GitHub HTTPS连接被重置,建议改SSH

在经过以上步骤后,Cloudflare Pages就部署成功了。今后再上传源码,仅需在Git Bush中输入

git add .
git commit -m "update"
git push

添加域名

购买域名

寻找主流域名购买平台即可。我这里用的是国外的Spaceship好像Cloudflare能直接买域名来着

将域名接入Cloudflare

进入Cloudflare账户主页,在“Workers 和 Pages”左侧有一个“域”,点击添加,点击“连接域名”Cloudflare会给你两个NS,例如:

xxx.ns.cloudflare.com
yyy.ns.cloudflare.com

回到的Spaceship Lauchpad,点击域名管理器,点击刚注册的域名,右侧窗口中点击“自定义名称服务器”,将上文中的NS填入
再回到Cloudflare中,按照提示进行操作,等待几分钟到几小时后会显示“Active”或“活跃”,则证明接入成功

将域名绑定至博客

回到账户主页,点击“Workers 和 Pages”刚刚部署的Pages名称进入详细页,点击上方“自定义域”-“设置自定义域”,按照提示添加即可

目录

  1. 1. 前情提要
  2. 2. 基础知识预备
  3. 2.1. Hexo的本质
  4. 2.2. GitHub Pages的本质
  5. 2.3. 迁移必要性及优缺点对比
  6. 3. 操作流程
  7. 3.1. 原博客的准备工作
  8. 3.2. Cloudflare部署
  9. 3.2.1. 准备工作
  10. 3.2.2. 设置页面相关参数
  11. 3.2.2.1. 项目名称
  12. 3.2.2.2. 生产分支
  13. 3.2.2.3. 框架预设
  14. 3.2.2.4. 构建命令
  15. 3.2.2.5. 构建输出目录
  16. 3.2.2.6. 环境变量
  17. 3.2.2.7. 报错及处理
  18. 3.2.2.7.1. 构建时出错
  19. 3.2.2.7.2. git push时出错
  20. 3.3. 添加域名
  21. 3.3.1. 购买域名
  22. 3.3.2. 将域名接入Cloudflare
  23. 3.3.3. 将域名绑定至博客