全部文章

Cloudflare Pages 部署指南

Cloudflare Pages 项目部署、自定义域名、环境变量、重定向与 Functions

目录 24 节

Cloudflare Pages 部署指南

这页适合作为“静态站点与前端项目上线入口”。Cloudflare Pages 的优势不只是部署快,而是 Git 集成、预览环境、边缘网络和自定义域名可以一套接起来。

适合什么项目

更适合放到 Pages 的场景:

  • Nuxt、Vite、Astro 这类前端或静态站点
  • 文档站、博客、导航站、营销页
  • 需要 PR 预览链接的前端项目
  • 想把静态资源和简单边缘函数一起托管

如果项目主要是复杂服务端逻辑、长连接、大量后台任务,更适合把 Pages 和 Workers / 其他后端服务拆开部署。

创建项目

通过 Git 连接

  1. 登录 Cloudflare Dashboard
  2. Workers & Pages → Create → Pages → Connect to Git
  3. 选择仓库,配置构建设置

构建配置

框架构建命令输出目录
Nuxtnpx nuxi builddist
Next.jsnpm run build.next
Vitenpm run builddist
Astronpm run builddist

Wrangler CLI 部署

# 安装
pnpm add -D wrangler

# 登录
npx wrangler login

# 部署
npx wrangler pages deploy dist --project-name=my-project

wrangler.jsonc 配置

{
  "$schema": "node_modules/wrangler/config-schema.json",
  "name": "my-project",
  "pages_build_output_dir": "dist",
  "compatibility_date": "2025-07-15",
  "compatibility_flags": ["nodejs_compat"],
}

推荐发布顺序

比较稳的部署顺序通常是:

  1. 先在本地把构建命令跑通
  2. 再确认输出目录和 wrangler 配置一致
  3. 再接 Git 自动部署
  4. 再配置环境变量、域名和缓存头
  5. 最后才补 Functions、D1、KV、R2 等边缘能力

先让“纯静态构建可稳定上线”,后面扩功能会轻松很多。

自定义域名

  1. Pages 项目 → Custom domains → Set up a custom domain
  2. 输入域名(如 example.com
  3. Cloudflare 自动配置 DNS 和 SSL

多域名

可以绑定多个域名,包括 www 和裸域。

环境变量

Dashboard → Pages 项目 → Settings → Environment variables

# 生产环境
NODE_VERSION=22
NUXT_PUBLIC_SITE_URL=https://example.com

# 预览环境(可单独配置)
NUXT_PUBLIC_SITE_URL=https://preview.example.com

也可以在 wrangler.jsonc 中配置:

{
  "vars": {
    "ENVIRONMENT": "production",
  },
}

预览环境和生产环境建议分开配置,特别是 API 地址、鉴权回调域名、第三方统计和实验性开关。

重定向

public/_redirects

/old-page  /new-page  301
/blog/*    /docs/:splat  301
/github    https://github.com/user  302

Headers

public/_headers

/*
  X-Frame-Options: DENY
  X-Content-Type-Options: nosniff
  Referrer-Policy: strict-origin-when-cross-origin

/assets/*
  Cache-Control: public, max-age=31536000, immutable

Pages Functions

functions/ 目录下创建 API 端点:

// functions/api/hello.ts
export const onRequestGet: PagesFunction = async (context) => {
  return new Response(JSON.stringify({ message: "Hello" }), {
    headers: { "Content-Type": "application/json" },
  });
};

访问 /api/hello 即可调用。

当前项目这类 Nuxt 站点的注意点

Nuxt / Nitro 项目接入 Pages 时,最容易出问题的通常是:

  • 输出目录写错
  • 本地和云端使用了不同包管理器或锁文件
  • Node 版本与依赖树不匹配
  • 环境变量只配了本地,没有配 Preview / Production

部署前建议至少本地确认一次:

bun run build

如果云端构建环境实际使用 npm install,就要特别注意依赖版本是否能被 npm 正常解析。

构建缓存

Cloudflare Pages 支持构建缓存加速:

# package.json
{
  "scripts": {
    "build": "nuxi build",
    "deploy": "wrangler pages deploy dist"
  }
}

预览部署

每个 PR / 非主分支推送都会生成预览 URL:

https://<commit-hash>.my-project.pages.dev

限制

  • 单次部署最大 25,000 个文件
  • 单个文件最大 25 MB
  • 每月免费 500 次构建
  • Functions 免费版每天 100,000 次请求

常见问题

本地能构建,Pages 上构建失败

优先排查:

  • Node 版本是否一致
  • 构建命令和输出目录是否配置正确
  • 锁文件是否和包管理器匹配
  • 是否存在 peer dependency 冲突

部署成功但页面空白

这通常与静态资源路径、SPA 回退、环境变量或客户端运行时报错有关。优先检查:

  • 浏览器控制台
  • 资源请求是否 404
  • _redirects 是否缺少 SPA fallback

自定义域名迟迟不生效

先检查:

  • 域名是否已接入 Cloudflare
  • DNS 是否已正确解析
  • 是否给了足够传播时间
  • SSL 状态是否还在签发中

风险提醒

  • Preview 和 Production 的变量不要混用
  • 不要把私密密钥直接放进前端公开变量
  • 重定向和缓存头上线前最好先用预览域名验证一遍

延伸阅读

参考链接

阅读建议
  • - 先读标题和摘要,再结合目录决定从哪个章节开始精读。
  • - 看到具体命令、配置或步骤时,尽量在自己的环境里同步验证。
  • - 如果你只是快速查资料,可先看目录和相关文档,再决定是否深入全文。
适合谁看
  • - 希望把零散经验整理成长期可复用工作流的人
  • - 想先建立认知,再决定是否深入实践的人
  • - 希望阅读时顺手建立自己的操作清单或收藏体系的人
执行前检查
  • - 先浏览标题、摘要和目录,带着问题阅读会更高效
  • - 顺手记录真正对你有用的命令、链接和注意事项,避免重复搜索
  • - 如果页面里提到相关文档,尽量一起打开对照,效果通常更完整
同类内容
← 上一篇Bun 与 Deno 运行时