02. 准备 Cloudflare 资源
这一章是最容易偷懒、也是最不能偷懒的一章。
很多人会直接跳到部署命令。
然后第一个报错就是:
- 找不到 D1
- 找不到 KV
- 找不到 R2
- service binding 目标不存在
所以请老老实实做完这章。
0. 这一章和 Dev Console 的关系
Section titled “0. 这一章和 Dev Console 的关系”先说结论:
- 线上 Cloudflare 资源创建,建议你仍然按本章命令行步骤来
- 但你可以同时打开 Dev Console 的
部署 Cloudflare标签页辅助查看配置
这样做的好处是:
- 命令行步骤适合写成标准文档
- 控制台适合帮你减少漏项
1. 为什么要先建”空 Worker”
Section titled “1. 为什么要先建”空 Worker””当前后端服务之间有循环依赖。
举个例子:
node1-auth-service依赖node2-support-servicenode2-support-service依赖node1-auth-service- 很多服务又依赖
node4-notify-service
这意味着:
- 如果你什么都不建,直接部署第一个 Worker
- Cloudflare 很可能会告诉你绑定目标不存在
最稳妥的傻瓜方案就是:
先在 Cloudflare 里把 10 个 Worker 壳子创建好,名字和仓库里保持完全一致。
后面再用真实代码把它们覆盖掉。
2. 先创建 10 个空 Worker
Section titled “2. 先创建 10 个空 Worker”打开 Cloudflare Dashboard。
进入:
Workers & Pages
然后重复下面操作 10 次:
- 点击
Create - 选择
Worker - 输入下面表格里的名称
- 用默认 Hello World 内容直接创建
必须创建的 Worker 名称清单
Section titled “必须创建的 Worker 名称清单”| 目录 | Worker 名称 |
|---|---|
backend/node1-auth-service | zship-node1-auth |
backend/node2-support-service | zship-node2-support |
backend/node3-pay-service | zship-node3-pay |
backend/node4-notify-service | zship-node4-notify |
backend/node5-blog-service | zship-node5-blog |
backend/node6-cdn-service | zship-node6-cdn |
backend/node7-site-service | zship-node7-site |
backend/node8-prompt-service | zship-node8-prompt |
backend/node9-checkin-service | zship-node9-checkin |
backend/node10-ai-service | zship-node10-ai |
3. 创建 D1 数据库
Section titled “3. 创建 D1 数据库”3.1 最简单的做法
Section titled “3.1 最简单的做法”不要去 Dashboard 里一个一个手点。
直接在终端里执行下面命令。
这些命令的好处是:
- 会创建数据库
- 会把
database_id自动写回对应的wrangler.jsonc
3.2 逐个执行下面命令
Section titled “3.2 逐个执行下面命令”cd backend/node1-auth-service && npx wrangler d1 create zship-auth --binding DB --update-configcd ../node2-support-service && npx wrangler d1 create zship-support --binding DB --update-configcd ../node3-pay-service && npx wrangler d1 create zship-pay --binding DB --update-configcd ../node4-notify-service && npx wrangler d1 create zship-notify --binding DB --update-configcd ../node5-blog-service && npx wrangler d1 create zship-blog --binding DB --update-configcd ../node7-site-service && npx wrangler d1 create zship-site --binding DB --update-configcd ../node8-prompt-service && npx wrangler d1 create zship-prompt --binding DB --update-configcd ../node9-checkin-service && npx wrangler d1 create zship-checkin --binding DB --update-configcd ../node10-ai-service && npx wrangler d1 create zship-ai --binding DB --update-configcd ../../执行完以后,你的这些文件里会被自动写入真实 database_id:
backend/node1-auth-service/wrangler.jsoncbackend/node2-support-service/wrangler.jsoncbackend/node3-pay-service/wrangler.jsoncbackend/node4-notify-service/wrangler.jsoncbackend/node5-blog-service/wrangler.jsoncbackend/node7-site-service/wrangler.jsoncbackend/node8-prompt-service/wrangler.jsoncbackend/node9-checkin-service/wrangler.jsoncbackend/node10-ai-service/wrangler.jsonc
4. 创建 KV namespace
Section titled “4. 创建 KV namespace”支付服务 node3-pay-service 需要一个 KV namespace。
在仓库根目录执行:
cd backend/node3-pay-servicenpx wrangler kv namespace create zship-pay-kv --binding KV --update-configcd ../../执行完以后,backend/node3-pay-service/wrangler.jsonc 里的 KV id 会被自动更新。
5. 创建 R2 bucket
Section titled “5. 创建 R2 bucket”CDN 服务 node6-cdn-service 需要一个 R2 bucket。
在仓库根目录执行:
cd backend/node6-cdn-servicenpx wrangler r2 bucket create zship-cdn --binding BUCKET --update-configcd ../../执行完以后,backend/node6-cdn-service/wrangler.jsonc 会自动写入 bucket 绑定信息。
6. 检查配置文件里还有没有占位符
Section titled “6. 检查配置文件里还有没有占位符”现在执行下面命令:
rg -n "00000000-0000-0000-0000-000000000000|placeholder-replace-after-create" backend/*/wrangler.jsonc理想情况是:
- 什么都搜不到
如果还能搜到
Section titled “如果还能搜到”说明你有某个资源还没创建完,或者没有成功写回配置文件。
不要进入下一章。
先把遗漏补完。
7. 这一章结束前,你应该已经满足的条件
Section titled “7. 这一章结束前,你应该已经满足的条件”- 10 个空 Worker 已经存在于 Cloudflare
- 9 个 D1 数据库已经创建
- 1 个 KV namespace 已经创建
- 1 个 R2 bucket 已经创建
backend/*/wrangler.jsonc里不再有数据库占位符
如果你还没做到这些,不要继续。