WeMail Docs

Cloudflare 资源准备

为 WeMail 创建 Worker、Pages、D1、KV、Email Routing 和可选 R2

这一章只做资源准备,不改业务代码。目标是把 staging 和 production 需要的 Cloudflare 资源先建出来,并把后面要写入 wrangler.toml、GitHub secrets 的值记录好。

Cloudflare 资源准备示意图

这是示意截图。真实控制台 UI 可能不同,但你需要准备的资源就是图里的几类。

资源清单

资源staging 示例production 示例是否必需
Workerwemail with --env stagingwemail with --env production必需
Pageswemail-web preview branchwemail-web production必需
D1wemail-stagingwemail-production必需
KVCACHE namespaceCACHE namespace必需
Email Routingstaging 域名或子域名正式邮件域名收真实邮件必需
R2wemail-staging-attachmentswemail-production-attachments附件文件存储可选

1. 登录 Wrangler

在仓库根目录执行:

cd apps/worker
pnpm exec wrangler login
pnpm exec wrangler whoami

whoami 能看到账号信息后,再继续创建资源。

如果你有多个 Cloudflare account,请记录目标 Account ID。GitHub Actions 后面需要:

CLOUDFLARE_ACCOUNT_ID

2. 创建 D1 数据库

apps/worker 目录执行:

pnpm exec wrangler d1 create wemail-staging
pnpm exec wrangler d1 create wemail-production

Wrangler 会输出类似内容:

[[d1_databases]]
binding = "DB"
database_name = "wemail-staging"
database_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

把 staging 和 production 的 database_id 都保存下来,后面写进 apps/worker/wrangler.toml

3. 创建 KV namespace

apps/worker 目录执行:

pnpm exec wrangler kv namespace create CACHE --env staging
pnpm exec wrangler kv namespace create CACHE --env production

如果命令只返回 id,没有返回 preview_id,再创建 preview namespace:

pnpm exec wrangler kv namespace create CACHE --preview --env staging
pnpm exec wrangler kv namespace create CACHE --preview --env production

把返回的值记录为:

环境字段
stagingreplace-with-staging-kv-id
staging previewreplace-with-staging-kv-preview-id
productionreplace-with-production-kv-id
production previewreplace-with-production-kv-preview-id

4. 准备 Pages 项目

WeMail 前端构建产物位于:

apps/web/dist

如果使用当前仓库里的 GitHub Actions,workflow 会在 CI 中构建 Web,再用 Wrangler 执行:

pnpm exec wrangler pages deploy apps/web/dist --project-name=<pages-project-name>

你需要在 Cloudflare Pages 里准备一个项目名,例如:

wemail-web

这个项目名后面会写入 GitHub Environment secret:

CLOUDFLARE_PAGES_PROJECT_NAME

5. 准备邮件域名

生产环境需要一个已经托管到 Cloudflare DNS 的域名,例如:

example.com

你后面会把它写入 Worker 配置:

DEFAULT_MAIL_DOMAIN = "example.com"

如果你还没有正式域名,可以先用 staging 子域名或测试域名走完部署流程。不要把生产环境长期留在 example.com

Email Routing 的详细配置见 Email Routing

6. 可选:创建 R2 bucket

WeMail 代码里支持可选的 ATTACHMENTS R2 binding。没有绑定时,邮件仍会保存附件元数据,但真实附件文件不会写入 R2。

如果你要启用附件文件下载,创建 bucket:

pnpm exec wrangler r2 bucket create wemail-staging-attachments
pnpm exec wrangler r2 bucket create wemail-production-attachments

后面再把 R2 binding 加到 wrangler.toml

[[env.production.r2_buckets]]
binding = "ATTACHMENTS"
bucket_name = "wemail-production-attachments"

7. 记录资源表

建议在部署前把这些值整理到一个本地私有笔记,不要提交到仓库:

示例
Cloudflare Account IDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Pages project namewemail-web
staging D1 database ID...
production D1 database ID...
staging KV namespace ID...
production KV namespace ID...
staging Worker URLhttps://wemail-staging.<account>.workers.dev
production Worker URLhttps://wemail.<account>.workers.dev
Pages staging URLworkflow 输出为准
Pages production URL自定义域名或 Pages 默认域名

下一步

资源准备完后,继续配置 Worker 配置。那里会把 D1 / KV ID 写入 wrangler.toml,并设置 secrets、CORS、Cookie 和功能开关。

On this page