Cloudflare Workers 部署
把个人邮箱站完整部署到 Cloudflare Workers 的最小可用流程。
适用场景
这份说明适合你准备把当前仓库完整部署到 Cloudflare:
- Web 应用运行在 Cloudflare Workers
- 域名托管在 Cloudflare
- 入站邮件走 Email Routing + Email Worker
- 附件或缓存可接 R2
如果你的目标只是尽快上线,依然建议优先考虑 Vercel + Cloudflare 的混合方案;全 Cloudflare 更统一,但部署改造也更多。
当前仓库已完成的适配
仓库里已经补上了这些基础项:
@opennextjs/cloudflarewrangler.jsoncopen-next.config.ts- Cloudflare 预览/构建脚本
- Prisma 的
engineType = "client" @prisma/adapter-pg + pg- 去掉了 Vercel 专属的地理定位依赖
你可以直接用这些命令:
pnpm build
pnpm cf:build
pnpm preview
pnpm deploy第一步:准备 Cloudflare 资源
至少准备这些资源:
- 一个 Cloudflare 账号
- 一个 Workers 项目名
- 一个 PostgreSQL 数据库
- 一个邮箱发信服务账号,例如 Brevo
- 一个接收附件或缓存的 R2 bucket(按需)
如果你还要接收邮件,再额外准备:
- Email Routing
- Email Worker
- 邮件投递接口
/api/v1/email-catcher
第二步:填写 Wrangler 配置
根目录已经有 [wrangler.jsonc](C:\Users\Books_007\Documents\New project 3\wrangler.jsonc)。
你至少要确认两处:
-
name把它改成你真正的 Worker 名称。 -
services这里的service要和name保持一致,因为它是 OpenNext 用来自引用 Worker 的绑定。
如果你后面要加 R2 缓存或附件桶,可以继续在 wrangler.jsonc 里追加 r2_buckets。
第三步:准备环境变量
本地 Cloudflare 预览建议基于 [.dev.vars.example](C:\Users\Books_007\Documents\New project 3.dev.vars.example) 新建一份 .dev.vars。
最关键的变量有:
NEXTJS_ENV=development
NEXT_PUBLIC_APP_URL=https://mail.yourdomain.com
NEXT_PUBLIC_APP_NAME=个人邮箱
AUTH_URL=https://mail.yourdomain.com
AUTH_SECRET=replace-me
DATABASE_URL=postgres://...
BREVO_API_KEY=...
EMAIL_FROM=support@yourdomain.com
EMAIL_FROM_NAME=个人邮箱生产环境建议用 wrangler secret put 管理敏感值:
pnpm wrangler secret put AUTH_SECRET
pnpm wrangler secret put DATABASE_URL
pnpm wrangler secret put BREVO_API_KEY第四步:本地验证
先跑常规构建:
pnpm build如果通过,再跑 OpenNext 构建:
pnpm cf:buildWindows 注意事项
当前仓库在 Windows 本机运行 pnpm cf:build 时,可能会卡在 Next.js 复制 standalone traced files 的符号链接步骤,并报 EPERM symlink。
这不是 Cloudflare 配置本身的问题,而是 Windows 本地文件系统对这类符号链接复制比较严格。推荐做法是:
- 在 WSL 里执行
pnpm cf:build - 或者直接把仓库推到 GitHub,让 Cloudflare 的 Linux 构建环境完成构建
也就是说:
pnpm build在本机通过,说明代码层兼容基本没问题pnpm cf:build在 Windows 的EPERM,更像本地平台限制
第五步:部署到 Cloudflare
登录 Wrangler:
pnpm wrangler login然后部署:
pnpm deploy首次部署前建议确认:
wrangler.jsonc里的 Worker 名称正确- 所有 Secrets 都已配置
- 数据库可从公网访问
AUTH_URL与正式域名一致
第六步:接入邮箱链路
主站部署完成后,再接邮件功能:
- 域名切到 Cloudflare
- 开启 Email Routing
- 部署 Email Worker
- 把收件投递到
/api/v1/email-catcher - 发信使用 Brevo
如果你要让附件走 R2,也记得补:
NEXT_PUBLIC_EMAIL_R2_DOMAIN- 对应的 R2 bucket / 自定义域名
现阶段已知限制
当前这套 Cloudflare 方案已经把仓库接到“可部署形态”,但还有两点你要知道:
- 本机 Windows 下的
pnpm cf:build可能因为符号链接失败而中断。 - 数据库目前依赖 PostgreSQL,所以生产环境要保证
DATABASE_URL可连通。
如果你下一步要继续推进,最推荐的顺序是:
- 先把仓库推到 GitHub
- 在 Cloudflare 的 Linux 构建环境里跑部署
- 再接真实数据库和邮件链路