Skip to content

不再依赖GitHub部署博客:本地构建,直接上传到Cloudflare Pages ​

这个博客一开始的部署方式很省事:文章写好传到GitHub仓库,Cloudflare Pages检测到提交,自动构建并发布。用了一段时间,我开始犹豫要不要继续这样做。

为什么要换 ​

原因很简单:GitHub对仓库内容里敏感信息的检查,最近明显比以前严格了,情况严重的,账号会被直接封掉。博客的源码、文章、域名配置全放在一个GitHub账号里,账号一出问题,整个网站的更新链路就断了,Cloudflare那边连着的仓库也跟着失效。

博客本身是纯静态的,VitePress在本地就能生成最终的HTML文件,其实根本不需要经过GitHub这一步。所以决定改成:本地构建,直接把生成好的文件夹上传到Cloudflare Pages,GitHub不再是发布流程里必须的一环。

先想清楚:现有项目能不能直接改 ​

我的Pages项目是通过Git集成创建的,设置页里能看到连着的仓库,旁边还有一个红色的"断开"按钮。第一反应是:点断开,然后就能改成直接上传了。

查了Cloudflare的文档,Git集成那页里有一句明确的话:用Git集成部署的项目,之后不能再切换成直接上传。文档里完全没有提到"断开"按钮点下去会发生什么,所以我没敢点——不确定它会把项目变成什么状态,而且这类操作很可能不可逆。

文档里倒是给了另一条路:不断开连接,只是关掉自动构建,然后用Wrangler命令行直接部署到这个项目。好处是项目名、域名、pages.dev地址全都不用动,不用新建项目,也不用迁移域名。

第一步:关掉自动部署 ​

进入Pages项目的设置页,找到"分支控制"那一栏,点右边的铅笔图标,会弹出一个窗口,里面有两处要改:

  1. 取消勾选"启用自动生产分支部署"。
  2. 预览分支选"无(禁用自动分支部署)"。

保存之后,"分支控制"这一栏会显示自动部署为已禁用。仓库依然挂在项目上,但以后往GitHub推送内容,不会再触发任何构建。

第二步:准备本地环境 ​

本地需要装好Node.js(LTS版本)。

另外有一点容易漏:我之前的文章和配置改动,很多是直接在GitHub网页上传的,电脑里那份最初的项目压缩包早就过期了。所以先去仓库页面,点Code,再点Download ZIP,下载一份最新的源码,解压后以这份为准,之后所有改动都在本地做。

进入项目文件夹,安装依赖并试着构建一次:

npm install
npm run docs:build

构建成功后,docs/.vitepress/dist这个文件夹就是整个网站,里面是纯HTML、CSS、图片这些静态文件。

第三步:加一个一键部署的脚本 ​

打开package.json,在scripts里加一行deploy,注意上一行末尾要补逗号:

json
"scripts": {
  "docs:dev": "vitepress dev docs",
  "docs:build": "vitepress build docs",
  "docs:preview": "vitepress preview docs",
  "deploy": "npm run docs:build && npx wrangler pages deploy docs/.vitepress/dist --project-name=kevinblog"
}

这条命令做两件事:先构建,再用Wrangler把dist文件夹上传到名为kevinblog的Pages项目。项目名换成你自己的。

第四步:登录并部署 ​

第一次使用要先登录Cloudflare账号:

npx wrangler login

会自动打开浏览器,授权之后回到终端就行,以后不用再登录。然后每次写完文章,在项目文件夹里执行:

npm run deploy

构建完成后,终端末尾会输出这次部署的地址。

怎么确认成功 ​

有三个地方可以核对:

  1. 设置页:回到"分支控制",自动部署应该显示为已禁用。
  2. 部署记录:Cloudflare的"部署"标签页最上面应该多出一条刚才的新记录。通过Git触发的记录会带有提交信息和分支名,直接上传的记录没有这些,据此可以区分。
  3. 网站本身:打开站点地址,刷新,能看到本地刚改的内容就说明通了。

想确认自动构建真的关掉了,可以以后在GitHub上随便改个文件提交,过几分钟到"部署"标签页看,不应该再出现新的构建记录。

几点注意 ​

  • 源码只在本地了。不再推送到GitHub之后,项目文件夹就是唯一的一份源码,建议定期把它备份到网盘(不用带node_modules文件夹)。想保留修改历史,可以在本地git init,但不推送到任何平台。
  • 直接上传有数量和大小限制。用Wrangler上传,官方给的限制是最多20,000个文件,单个文件不超过25MiB,一个个人博客远用不到。
  • 如果想彻底切断和GitHub的关联,办法是新建一个直接上传的Pages项目,把自定义域名迁过去,再删掉旧项目。我现在选的是保留旧项目、只关自动构建,这样改动最小。

参考 ​