免费且不限量,不调用 Functions 时不计 Workers 请求
你能获得
查看全部官方权益推送分支后自动构建和发布
每月 500 次,单次最长 20 分钟
可保留不限数量的活动预览部署
Free 计划每个项目最多 100 个
计入 Workers Free 每日 100,000 次请求额度
领取条件
操作步骤
- 1
先在本地确认项目能够正常构建
进入项目目录运行 npm install,再运行 npm run build。构建成功后检查输出目录中是否生成 index.html 和其他静态文件。不要直接把只能在本地开发服务器运行的项目交给 Cloudflare;Pages 需要明确的构建命令和输出目录。
Astro 默认静态输出通常在 dist 目录。 - 2
把代码推送到 GitHub 仓库
确认 package.json、锁文件、源代码和构建配置已经提交到 GitHub。不要把 node_modules、.env、API Key、数据库密码或 Cloudflare Token 提交到仓库。私有仓库也可以连接,但需要在 GitHub App 安装页面授权 Cloudflare 访问对应仓库。
- 3
在 Cloudflare 创建 Pages 项目
登录 Cloudflare Dashboard,进入 Workers & Pages,点击 Create application,选择 Pages,再选择 Import an existing Git repository。授权 GitHub 后,从列表中选择准备部署的仓库并点击 Begin setup。
官方入口:[[Workers & Pages|https://dash.cloudflare.com/?to=/:account/workers-and-pages]] - 4
选择正确的生产分支
把真正用于上线的分支设置为 Production branch。大多数项目使用 main;如果你的正式代码位于 master、production 或其他分支,应在创建时或后续 Settings > Builds > Branch control 中修改。推送到生产分支会更新正式站点,其他允许构建的分支通常生成预览部署。
- 5
填写 Astro 的构建配置
纯静态 Astro 项目填写 Build command 为 npm run build,Build output directory 为 dist。Root directory 通常留空;只有仓库是 Monorepo、项目位于子目录时才填写对应路径。当前 GPT Discount 项目就是 main + npm run build + dist。
Cloudflare Astro 官方配置:[[Deploy an Astro site|https://developers.cloudflare.com/pages/framework-guides/deploy-an-astro-site/]] - 6
先不要随意添加 SSR Adapter
纯静态 Astro 站不需要为了部署 Pages 而强制加入 @astrojs/cloudflare。只有项目确实需要服务器端渲染、Pages Functions、请求时读取环境变量或动态 API 时,才应按 Astro 和 Cloudflare 当前适配器文档改造。静态输出更简单,也不会消耗 Functions 请求额度。
- 7
保存并执行第一次部署
点击 Save and Deploy。Cloudflare 会安装依赖、执行构建命令并上传输出目录。成功后会生成一个 project-name.pages.dev 地址。项目名称会成为默认 pages.dev 子域名的一部分,创建前应避免使用临时或难以辨认的名称。
- 8
检查部署日志而不是只看页面错误
构建失败时打开 Deployments,选择失败记录并查看完整日志。常见问题包括 Node 版本不兼容、缺少锁文件、依赖安装失败、输出目录写错、环境变量缺失、文件名大小写在 Windows 和 Linux 上不一致,以及构建超过 20 分钟。
- 9
确认 GitHub 推送会自动上线
Cloudflare Pages GitHub Integration 会在仓库分支出现新提交时自动构建。推送到 main 后应在 Deployments 中看到对应 Commit SHA;成功后 Production 部署会指向最新提交。GitHub 没有 Actions 工作流并不影响 Pages 自动部署,因为构建由 Cloudflare 执行。
官方说明:[[GitHub integration|https://developers.cloudflare.com/pages/configuration/git-integration/github-integration/]] - 10
使用分支和 Pull Request 预览
非生产分支可生成独立预览地址,Pull Request 也可以自动获得持续更新的 Preview URL。合并前先用预览地址检查移动端、链接、图片和构建结果,再合并到 main。Cloudflare 当前说明,从 Fork 创建的 Pull Request 不会生成预览 URL。
- 11
需要时用提交信息跳过构建
只修改 README、内部说明或其他不影响站点的文件时,可以在提交信息开头使用 [CI Skip]、[Skip CI] 或 [CF-Pages-Skip],让 Pages 跳过该次部署。不要对实际文章或代码更新使用跳过标记,否则线上不会更新。
- 12
绑定自定义域名前先在 Pages 中添加域名
进入 Pages 项目 > Custom domains > Set up a domain,先输入需要绑定的域名并继续。不要只在 DNS 控制台手动建立一个指向 pages.dev 的 CNAME;Cloudflare 官方说明,如果没有先在 Pages 项目中关联域名,可能出现 522。
官方流程:[[Custom domains|https://developers.cloudflare.com/pages/configuration/custom-domains/]] - 13
根域名和子域名使用不同方式
绑定 example.com 这类根域名时,域名必须作为同一 Cloudflare 账号中的 Zone,并把 Nameserver 指向 Cloudflare。绑定 www.example.com、docs.example.com 等子域名时,可以使用外部 DNS;在 Pages 添加域名后,再创建 CNAME 指向 project-name.pages.dev。
- 14
等待 HTTPS 证书和 DNS 激活
域名添加后等待状态变为 Active,再访问 HTTPS 地址。长时间卡住时检查 DNS 是否存在冲突记录、Nameserver 是否已经切换、CAA 是否允许 Cloudflare 签发证书,以及是否同时配置了错误的 A、AAAA 或 CNAME。
- 15
理解 Free 计划的构建和文件边界
Cloudflare Pages Free 当前每月提供 500 次构建,只允许 1 个构建同时进行,单次构建最长 20 分钟。每个站点最多 20,000 个文件,单个静态文件最大 25 MiB;大视频、安装包和超大图片应改用 R2 或其他对象存储。
- 16
区分静态请求和 Pages Functions
HTML、CSS、JS、图片等静态资源请求在免费和付费计划中都免费且不限量,只要请求没有触发 Functions。Pages Functions 属于 Workers 计算,Free 计划下与其他 Workers 共享每日 100,000 次请求额度,并在每天 UTC 0 点重置。
- 17
把密钥配置为环境变量
进入项目 Settings > Environment variables,为 Production 和 Preview 分别配置需要的变量。公开的 Astro PUBLIC_ 变量会进入前端包,不能存放秘密;真正的密钥只应提供给服务端 Functions,并且不要写进 Markdown、Git 历史或前端 JavaScript。
- 18
上线后检查 404、重定向和缓存
逐个检查首页、文章详情、带尾斜杠的路径、自定义域名和 pages.dev 地址。Astro 静态站需要确保输出目录中真实存在目标页面;需要重定向或自定义响应头时,可在 public 目录维护 _redirects 和 _headers,构建后它们会进入 dist。
申请失败或遇到问题
Cloudflare Pages Free 会因为访问量大而自动收费吗? 纯静态资源请求在 Cloudflare 当前文档中免费且不限量。免费计划不会因为静态访问量增加而自动升级;但 Pages Functions、R2、D1、Images 等其他产品有各自额度和计费规则。
纯静态资源请求在 Cloudflare 当前文档中免费且不限量。免费计划不会因为静态访问量增加而自动升级;但 Pages Functions、R2、D1、Images 等其他产品有各自额度和计费规则。
为什么 GitHub 提交后没有自动部署? 先检查项目是否仍连接正确仓库、提交是否推送到允许构建的分支、Commit message 是否包含 Skip 标记,以及 Cloudflare GitHub App 是否仍有仓库权限。然后到 Deployments 查看是否有构建记录。
先检查项目是否仍连接正确仓库、提交是否推送到允许构建的分支、Commit message 是否包含 Skip 标记,以及 Cloudflare GitHub App 是否仍有仓库权限。然后到 Deployments 查看是否有构建记录。
没有 GitHub Actions,Cloudflare 还能自动部署吗? 可以。Pages Git integration 是 Cloudflare 自己监听 GitHub 提交并执行构建,不依赖仓库中的 GitHub Actions。GitHub 页面可能显示 Cloudflare Check Run,但真正的构建日志在 Cloudflare Deployments。
可以。Pages Git integration 是 Cloudflare 自己监听 GitHub 提交并执行构建,不依赖仓库中的 GitHub Actions。GitHub 页面可能显示 Cloudflare Check Run,但真正的构建日志在 Cloudflare Deployments。
Astro 项目应该填写什么参数? 普通静态 Astro 项目通常填写 Production branch 为 main、Build command 为 npm run build、Build output directory 为 dist。Monorepo 还需要填写项目所在的 Root directory。
普通静态 Astro 项目通常填写 Production branch 为 main、Build command 为 npm run build、Build output directory 为 dist。Monorepo 还需要填写项目所在的 Root directory。
静态网站一定要安装 @astrojs/cloudflare 吗? 不需要。默认静态输出可以直接部署到 Pages。只有使用 Astro SSR、动态路由服务端渲染或 Cloudflare Runtime API 时,才需要按当前 Astro 文档使用 Cloudflare Adapter。
不需要。默认静态输出可以直接部署到 Pages。只有使用 Astro SSR、动态路由服务端渲染或 Cloudflare Runtime API 时,才需要按当前 Astro 文档使用 Cloudflare Adapter。
为什么自定义域名显示 522? 常见原因是只创建了 CNAME,却没有先在 Pages 项目的 Custom domains 中添加域名。还要检查目标是否为正确的 pages.dev 地址、DNS 是否冲突、根域名是否已经接入同一 Cloudflare 账号。
常见原因是只创建了 CNAME,却没有先在 Pages 项目的 Custom domains 中添加域名。还要检查目标是否为正确的 pages.dev 地址、DNS 是否冲突、根域名是否已经接入同一 Cloudflare 账号。
根域名可以继续使用其他 DNS 服务商吗? Cloudflare Pages 当前要求自定义根域名成为该 Pages 项目所在账号的 Cloudflare Zone,并使用 Cloudflare Nameserver。外部 DNS 更适合绑定子域名,通过 CNAME 指向 pages.dev。
Cloudflare Pages 当前要求自定义根域名成为该 Pages 项目所在账号的 Cloudflare Zone,并使用 Cloudflare Nameserver。外部 DNS 更适合绑定子域名,通过 CNAME 指向 pages.dev。
每月 500 次构建不够怎么办? 减少无意义提交,使用 Branch control 和 Build watch paths,只让影响站点的目录触发构建;纯文档改动无须部署时可使用 CI Skip。也可以改用 Direct Upload 或升级计划,但要先核对当前规则。
减少无意义提交,使用 Branch control 和 Build watch paths,只让影响站点的目录触发构建;纯文档改动无须部署时可使用 CI Skip。也可以改用 Direct Upload 或升级计划,但要先核对当前规则。
上传一张超过 25 MiB 的图片为什么失败? Pages 单个静态资源当前最大 25 MiB。应压缩图片,或把大文件放到 Cloudflare R2、对象存储和专门的媒体服务,再从页面引用。
Pages 单个静态资源当前最大 25 MiB。应压缩图片,或把大文件放到 Cloudflare R2、对象存储和专门的媒体服务,再从页面引用。
重要提醒 Cloudflare Pages 的静态资源请求免费且不限量,但构建次数、文件数量、单文件大小和 Pages Functions 都有额度。Free 计划目前每月 500 次构建、每次构建最长 20 分钟、单站点最多 20,000 个文件、单文件不超过 25 MiB。Pages Functions 会消耗 Workers Free 的每日请求额度,不能把动态 API 也理解成无限免费。
Cloudflare Pages 的静态资源请求免费且不限量,但构建次数、文件数量、单文件大小和 Pages Functions 都有额度。Free 计划目前每月 500 次构建、每次构建最长 20 分钟、单站点最多 20,000 个文件、单文件不超过 25 MiB。Pages Functions 会消耗 Workers Free 的每日请求额度,不能把动态 API 也理解成无限免费。