CF FIELDBOOK/手册

Cloudflare 个人基础设施实践手册

从一个入口到可恢复的应用与自动化

一个网站能打开,只是开始。用了几周以后,问题会变得更具体:手机怎么访问,朋友能看哪些内容,文件放在哪里,任务断了能否继续,暂时不用时会不会还在付费。

本手册从这些问题出发。它不要求先学完 Cloudflare,也不把服务组合当作唯一答案。已有服务器、数据库和工作方式都可以保留,只在出现实际需要的地方加入新的能力。

读完选中的路线后,你应能画清一次请求经过谁、身份在哪里核验、任务与成果如何保存;再用配套离线例子检查一个具体机制。陌生词可以查术语小词表,精确命令见例子与实施参考。配套练习默认离线,使用合成输入。实际部署的配置条件和验证步骤在各节说明。

原有条目沿用 2026-10-02 的核验范围;本次新增观测、PiHarness、互联网搜索、临时分享及 R2 费用说明,来源查阅截至 2026-10-03。严格机器认证、Tunnel API 与 Sandbox 接口另于 2026-10-05 定向核验,不刷新全书事实。不同条目的核验范围见来源说明。决策模型的供应路径另见Clef 与 Jev 比较,详细代码和状态约束见实施参考。邮件服务不在本期范围内。

01 / 从手边的事情开始#

如果只是想发布网页或小 API,从第 2–3 章开始就够了。已有本机或 VPS 服务,希望安全访问,重点读第 4 章。内容与文件的保存看第 5 章;自动化经常重复、超时或丢结果,看第 6 章。

检索、模型与 agent 执行分别在第 7–9 章。系统已经能运行,却越来越难维护,可以直接读第 10–13 章。各章不构成强制施工顺序。

从同一个三份文档小资料架开始:直接打开、读完、下载,先取得一个完整结果。之后需要限制读者、保存版本、生成索引时,再沿相应章节扩展。它使用合成输入,没有云端依赖。

本手册解释做法;配套《Cloudflare 新发布观察》记录当期产品变化和价格时间线。工具名或价格影响决策时,可通过文内来源编号回查。

02 / 给一个请求找路#

先分清:入口、程序、数据#

浏览器输入一个 hostname / 主机名,先找到服务入口,再由程序处理请求,最后按需要读取数据库或文件。DNS / 域名解析把名称映射到网络位置;HTTPS 保护传输;Worker 可以在 Cloudflare 上运行程序;Tunnel 则把入口连接到仍在本机或服务器运行的程序。S45 S47

因此,小应用有两种同样合理的起点。第一种是 Worker 加必要的数据存储。第二种是 Access/Tunnel 加现有应用,数据库继续留在原来的服务器。选择取决于程序需要什么环境,不取决于控制台里有多少服务可以开。

两种常见路线,不要求同时采用。Tunnel 不替原设备运行程序。
两种常见路线,不要求同时采用。Tunnel 不替原设备运行程序。 · 打开全尺寸 SVG · 打开纵版 SVG
路线 请求怎样走 程序与数据在哪里
新建边缘应用 浏览器 → Worker → 绑定的数据资源 应用运行在平台上,按需选择存储
保留已有服务 浏览器 → Access(需要时)→ Tunnel → 原应用 仍由原设备/服务器运行

这是两种常见组合,不要求一个项目同时采用。

绑定:把资源交给应用,而不是交出整套账户#

在 Worker 里,env.DB 可以指向一项 D1 数据库,env.FILES 可以指向一个 R2 bucket。这种 binding / 资源绑定是部署时给予程序的能力,通常不需要在业务代码里再携带账户管理 key。S45

可以把三件事分开记:管理工具负责创建和部署资源;binding 让应用使用被分配的资源;应用再决定哪位用户能读写哪些内容。

同一账户的 Worker 之间,可以用 Service Binding 调用指定服务,减少公网入口和重复凭据。调用关系由部署配置和可靠身份建立;请求里随手加一个 x-service-id,并不能自己证明是谁发来的。S57

想一想:Worker 已绑定一个私有 bucket,是否就能让所有访问者读取其中的文件?

展开答案与解释

答案:不能。 binding 让程序访问资源,最终用户仍需由应用核验身份与读取资格。资源绑定不替代用户权限判断。

03 / 发布第一个小入口#

先选一个很容易判断对错的功能#

一个 endpoint / 请求入口是服务约定处理请求的地址与方法;例如下面这个健康入口。健康检查适合起步:GET /health 返回固定 JSON,未知路径返回 404,不读取文件、不调用模型、不接受业务写入。这样一旦响应不对,排查范围很小。

随包的 examples/health-worker/ 已有完整源码、配置模板和测试。它还检查 HEAD 与不允许的方法;人读手册时先理解行为,实施时再打开完整文件。

发出的请求 应得到什么
GET /health 200,固定 JSON
HEAD /health 200,没有正文
POST /health 405,注明允许的方法
GET /missing 404
请求夹带私有头 响应不回显这些内容

在仓库根目录,可先做离线检查:

node --test examples/health-worker/worker.test.mjs
python3 tools/check.py

这检查的是示例行为和资料一致性,不会登录或部署 Cloudflare。健康响应本身也只证明这个 handler 工作,不能代表所有数据库与外部依赖都正常。

再接入开发与部署工具#

当前 cf CLI 处于公开 beta,Wrangler 仍受支持。新项目可沿官方脚手架选择工具;既有项目不需要为了新命令立即迁移。记录实际版本与依赖锁文件,比依赖某台机器的全局安装更容易重建。S02 S03 S66

采用 Wrangler 且已在项目里安装固定版本时,可先启动本地开发:

npx --no-install wrangler dev --port 8787

然后在另一终端请求本地 /health 和 /missing。本地通过后,再核对目标账户、路由和配置,执行单独的远端部署。完整命令与模板留在实施参考中;本包没有替读者安装工具或创建生产入口。

在新项目中取得同一个小入口#

还没有 Worker 项目时,在仓库以外的新目录运行官方脚手架:

npm create cloudflare@latest -- my-first-worker
cd my-first-worker

选择 Hello World、Worker only、JavaScript,初次部署选 No;将本仓库 index.mjs 的 handler 放进新项目的 src/index.js,保留脚手架生成的 dependency 与 lockfile,再按该项目的开发命令检查 /health。脚手架下载需要网络,不属于本包离线例子的执行结果。S113

deployment / 部署是将已检查的代码与配置交给指定运行环境。首次公开部署前,选定目标 account 和对外地址,再按实施参考的 Worker 路线执行;不要将模板中的禁止公开入口设置当成已经发布。只有静态资料页的需求,也可以从公开资料架停下,不必继续加数据库、身份和模型。

前端加入后,多检查一次缓存#

Workers Static Assets 可把网页与 API 一起发布。要确定静态资源和 Worker 的处理顺序,避免 SPA fallback 把不存在的 API 变成一张“看起来正常”的首页。静态资源与动态请求也有不同计费规则。S46 S34

私人 PWA 可以先只缓存公开壳,私有 API 使用 no-store。检查退出登录、切换用户和更新旧版本之后的行为:用户已经离开,并不意味着浏览器里保存过的内容自动消失。

04 / 私人服务的门与钥匙#

先分享一个短期 demo#

已经在本机打开的小资料架,只想给两位朋友看,可以先用 Protected Quick Tunnel 的邮箱 PIN,不必先配正式域名。--allowed-mail 是可选限制;没有它的普通 Quick Tunnel 仍向拿到 URL 的人开放。电脑关机或 cloudflared 停止后,访问也停止。S109

cloudflared tunnel --url http://localhost:8080 --allowed-mail 'alice@example.com,bob@example.com'

这是供读者另外执行的网络命令,本仓库没有启动 Tunnel。先试允许邮箱、另一个不允许的邮箱,再停止连接器确认入口失效;完整步骤与开发限制见临时给几个人看本地 demo。长期私有服务继续读下面的 Access 路线。

能到达,不等于有权使用#

Access 可以保护一个 hostname 或指定路径,让用户先完成身份验证。应用依赖该身份时,应验证 JWT / 签名令牌的签名、issuer、audience 与有效期,而不是只看请求头是否存在。S48

拿到可信身份之后,应用继续决定角色、资源和动作。没有必要机械地再叠几份 bearer;额外凭据应当服务于单独撤销、机器作用域或动作确认,而不是仅仅增加层数。

对机器客户端,Service Tokens 能避免模拟网页登录。按用途单独签发,设置有效期和撤销方式,再映射到允许的操作范围。浏览器里的长期秘密、多人共用的万能 key,都不适合作为这种边界。S49

严格 Service Token 认证(定点核验于 2026-10-05)。 启用严格设置后,带 Service Token 请求头的请求只按 Service Auth 策略判定:不再接受 Allow 策略或用户 cookie;认证/授权失败返回 401/403,不再 302 跳转登录;成功请求也不会得到可复用的 CF_Authorization cookie,调用方每次都须继续携带 Service Token 请求头。在 2026-10-05 或之后创建的新组织强制启用且不能关闭;此前的组织仍可自行配置。远程 MCP 的 OAuth 属于另一条路线,不要与 Service Token 混为一谈。S49 S116

不只测“自己能打开”#

上线前也试匿名用户、已登录但没有资格的用户、过期 token 和错误 audience。再列出所有替代入口:默认开发域名、其他 Custom Domain、预览地址、源站直连。保护一个域名,不会自动证明另一条路也安全。

Cookie 会话的写请求还要处理 CSRF/Origin。私人数据应在权限检查以后读取,而不是先取得完整内容,再靠界面藏按钮。

已有服务器:Tunnel 只改变访问方式#

Tunnel 由源站连接器主动向 Cloudflare 建立连接,把指定 hostname 的请求送到原应用。它不替原设备运行程序,不备份磁盘;笔记本关机后,程序仍会停。S47

ingress:
  - hostname: app.example.com
    service: http://127.0.0.1:8080
  - service: http_status:404

这只是示例结构。端口要对应实际监听,最后一条为未知入口提供兜底;源站若还另开公网端口,仍需检查是否绕过访问限制。

顺序可以很朴素:先确认本机 HTTP 正常,再检查连接器与 Tunnel,最后从外部验证 hostname 和权限。Quick Tunnel 适合短暂试验,长期入口使用可管理的命名配置。升级、日志和恢复方式依然属于服务器维护的一部分。

普通 HTTP ingress 不受 2026 年私有路由与连接端点变更影响;若另有脚本自行维护私有网段路由或读取 tunnel 连接,见实施参考的维护提示。该提示不新增可执行集成。S117

MCP 与私网各有自己的入口#

远程 MCP 的 OAuth 发现、授权与 token 验证不是普通浏览器登录。Workers OAuth Provider v1 可作为授权服务与资源服务拆分的实现候选;连接成功后,仍要检验错误受众、过期令牌与跨资源请求。S71

WARP 是设备接入与流量策略;Mesh 面向加入组织的设备和私网;Tunnel 发布明确选择的服务。Mesh 当前仍有 beta 标识。与现有 VPN 共存时,先用非关键设备观察路由和 DNS,保留不依赖待改路径的恢复入口。S61 S62

05 / 保存内容,也保存它的来历#

一份文件,不只是一串字节#

假设要保存一份文档。原件可以放在 R2,目录与当前版本放在 D1:谁拥有它、对应哪个对象、大小和 hash 是什么、现在是否仍可读取。大对象与结构化状态分开之后,查目录不必每次加载原件。S37 S38

要保存的东西 常见位置 为什么要留下
原件、媒体、导出 R2/已有文件存储 以后能重新读取与处理
目录、权限、版本指针 D1/已有数据库 知道当前哪一版有效
检索索引 Vectorize/托管检索 帮助找到候选,而不是代替原文
备份与恢复说明 独立可取回的位置 原服务失效时仍能使用

这是建议的分工,不要求替换已有数据库。完整 SQL 示例保留在实施参考中。

小资料架的第二份《更新与撤下笔记》可以做这项练习:先改写一句话、重建网页,再确认阅读与下载来自同一原件。扩展到在线系统后,下面的当前指针和读取资格才需要数据库持久化。

将资料架扩展为有版本系统:新原件和索引准备好才切当前指针;读取先核对资格,撤下先停止返回,再清理索引与缓存。
将资料架扩展为有版本系统:新原件和索引准备好才切当前指针;读取先核对资格,撤下先停止返回,再清理索引与缓存。 · 打开全尺寸 SVG

这是扩展设计,静态例子没有运行图中的数据库、任务或权限机制。

更新、撤回与删除不要混成一个按钮#

更新可以新增版本,再把当前指针切过去;撤回首先让内容不再对读者可见;物理删除才移除原件或派生数据。把三者分开,才能解释某个旧引用为什么存在,也更容易恢复误操作。

R2 bucket 默认保持私有,通过授权入口或有时效的访问方式取文件。对象 key 尽量使用不含真实姓名、邮箱等含义的标识;上传还要限制大小、类型和校验结果。生命周期规则先限定 prefix,避免一条清理规则影响所有历史对象。S52

备份应该回答“能恢复什么”#

D1 Time Travel 有计划相关的保留期,原地恢复会改变数据库。执行前保存当前状态和目标 bookmark,明确要恢复到哪一刻。需要更长保留时,另行安排导出;数据库有虚拟表或全文索引时,还要核对导出、导入的当前限制,不能假定所有内容都能一条命令来回。S50 S51

一个可用的演练是恢复到隔离目标,再检查代表性记录、原件 hash、版本与权限。数据库恢复成功但文件缺失,或文件齐全但权限回到旧状态,都不算恢复完了。

06 / 一次任务,可能执行不止一次#

先想清楚用户在等什么#

为小资料架新增第四份文档、生成预览或索引时,可以沿下面的任务记录处理;已有三份静态页面没有后台任务。

用户上传文档后,网页可以先显示“已接收”,后台再生成预览或索引。Queues 适合将接收与处理分开;Workflows 适合有多个步骤、等待与恢复的流程;Durable Objects 适合按实体协调;Cron 负责按时间触发。S53 S55 S56 S58

不是每个应用都需要四种。一次短请求就能完成的事,可以继续直接执行。

为什么只记一个“处理过”会丢任务#

考虑这样一段程序:先登记任务 ID,再做工作;重复收到同一 ID 就跳过。如果登记后进程退出,任务虽然“见过”,却永远没有做完。

反过来也有问题:外部动作先成功,登记之前连接断掉,重试可能再做一次。解决方法不是挪一行代码,而是留下任务现在处于什么状态。

接收、执行与完成分开记录。示意主线;完整状态与失败分支见邻近正文。
接收、执行与完成分开记录。示意主线;完整状态与失败分支见邻近正文。 · 打开全尺寸 SVG · 打开纵版 SVG
当前状态 人能读懂的含义 下次收到同一任务时
等待处理 已经收下,还没开始 可以领取
执行中 某次执行正在处理 先检查它是否仍有效
已完成 结果已核实保存 返回已有结果
可以重试 确认失败,再试不会扩大损失 受预算限制地重试
等待核对 外部动作结果未知 不盲目再做
已取消 后续执行不应再开始 保留取消事实

这些是本手册建议的状态,不是平台统一规定。实现中还需要区分不同 attempt,离线模型用 generation / 执行代次标识每次领取:旧执行者即使迟到,也不能覆盖新一次的结果。租约过期只是恢复的一个条件,不证明旧程序已经停止。

想一想:租约到期后,新 worker 已领取,是否就能保证旧 worker 不会再产生外部动作?

展开答案与解释

答案:不能。 租约与代次控制本地领取和结果提交,不能让旧程序停止,也不能撤回它的外部请求。可重做的本地任务与不可逆外部动作需要分别设计恢复条件。

数据库与队列之间留一个投递记录#

写入数据库和发送队列是两件事。任务已写下、队列却没收到时,需要有地方看见这份待投递工作。常见做法是在同一次数据库提交里写任务和 outbox,再由投递器发送;重复发送由消费者的状态记录承接。

Outbox 可以理解为“准备寄出的任务清单”。它保住待投递意图,不保证所有系统恰好执行一次。清单本身也要能查积压、重试与终止。

Queues 可能重复投递;重试耗尽后,DLQ 可以保存需要调查的消息。Workflows 的步骤也可能重试,所以外部服务仍要有自己的幂等机制。S53 S54 S55

结果未知,应该有一个明确位置#

服务商支持 idempotency / 幂等 key 时,一次逻辑动作使用同一个 key,并按其契约查询或重试。不支持幂等、也无法查结果的外部动作,超时后先标为等待核对;离线模型将这一状态写作 uncertain / 结果未知。

离线示例 job-state 演示领取、迟到提交和未知结果的处理。可先用网页模拟观察合成情景,再按恢复任务单复现本地输出。模型仍有“外部请求发出后、写入 uncertain 前崩溃”的窗口,不能作为不可逆动作的完整自动重试器。上线之前,还需要注入真实失败:领取后退出、保存结果后丢 ACK、外部成功但客户端超时、取消与执行竞争。检查的是任务没消失、重复没扩大损失,而不只是成功路径能跑通。

Workflows 当前 Paid 包含每月 50 万步骤与 1 GB·月状态,步骤和存储自 2026-08-10 起计费;等待不计 CPU,不等于保留状态没有费用。Cron 使用 UTC,按业务日期工作的任务应明确时区与逻辑时间窗。S44 S56

这里的 CPU time是实际计算时间,Wall time是从开始到结束的总经过时间。记录等待与计算的区别,再按产品各自的计量单位核对预算。

07 / 先找回原件,再组织答案#

先问:搜哪一份世界#

小资料架只有三份自备原件,问“哪份说明撤下规则”,需要检索自己的集合;问“今天上游改了什么”,才需要互联网搜索。AI Search / Vectorize 与 Web Search API 进入的是这两种不同位置。2026-10-02 发布的 Web Search API beta 经 AI Gateway 调用,不因为名字里有 Search 就读取你的私有 bucket。S106

完整任务、来源回读与 provider 比较见自己的材料,还是互联网上的新信息。搜索结果先是候选;应用读回原页、核对日期,再把引用放进答案。费用、ZDR 与实际效果分开判断。

托管检索与自己的管线#

AI Search 可以接管一部分摄取、分块、索引和检索;Workers AI 加 Vectorize 则让应用自己安排这些环节。前者省维护,后者留下更多可修改的接口。两者都应先接受同一组真实问题的检验。S09 S10 S40 S41

准备一组小集合:精确术语、同义改写、模糊描述、旧名称、没有答案的问题,以及不该返回的内容。记录已知答案在哪里,不只挑五个漂亮结果展示。

10 月 GA 的 AI Search 已支持图片和 OCR。图片检索可用多模态路线,也可用文字描述路线;效果要用自己的材料比较。文件上限、字段数与模型条件仍需按本期来源核对。S09 S10

让每个结果带着回原处的路#

自建索引时,留下来源 ID、来源版本、chunk ID、内容 hash、embedding 模型和索引版本。升级模型建立新索引代,避免将不同语义空间里的向量混在一起比较。S64

读取身份决定允许查询的范围;候选返回后,再核对当前权限、撤回状态与版本,最后读取原文窗口。模型传来的 owner_id 不能替代服务器验证的身份。

AI Search 的 metadata filter 有字段数量和索引长度限制,复杂权限不能只靠一个任意长的字符串表示。细粒度内容需要明确分区与返回前的核验。S10

撤回不应该等待索引慢慢消失#

内容撤回后,应用读取资格应立即变化;向量和派生缓存的清理可以成为后续可重试任务。更新时先准备新原件与索引,验证后再切当前版本,避免一半新、一半旧拼成一份材料。

Vectorize mutation 已被接受,不代表所有查询马上可见。按状态和实际读回确认,比固定睡一秒钟更可靠。S64

记忆比搜索多了一层问题#

搜索问“哪里可能有相关材料”;记忆还要问“谁说的、何时有效、后来有没有更正、适用于谁”。这些条件不会由 embedding 自动补齐。

Cloudflare Agent Memory 当前仍是 private beta,与 AI Search 的 GA 分开看。取得接入前,不将它写成已可用依赖。S60

自己的记忆设计可以先保留自动抽取建议与原始来源,让人查看当前有效内容。测试旧偏好变更、同名人物、上下文冲突和明确禁止召回,比只测几条事实问答更能看见问题。

08 / 模型、路由与三种缓存#

先弄清谁在回答、谁在计费#

Workers AI 提供模型推理;AI Gateway 组织经过它的调用、凭据、观测与路由。通过 binding 或受控凭据,可以减少应用直接持有 provider key;Gateway 的访问资格本身仍是敏感能力。S41 S45 S15

资料架问“撤下规则在哪里”时,允许动作可以是读标题、读第二份原文、或停止并报告材料不足。完整输入见Clef / Jev 的首个有限决策任务;离线阅读例子没有调用模型。

先记录模型、时间、结果、token 和费用。确实需要正文调试时,再限定内容和保留期。首次创建 Gateway 在 2026-09-24 或之后的账户走新的 Workers Logs 规则;Unified Billing 充值另收 5%。S15

小判断可以比较三款模型,不必先换平台#

Clef、Clef-flash 与 Jev 都可以从 Cloudflare 接入,但前两款是 CF 托管模型,Jev 是第三方 TypeSafe 模型。先挑一个明确判断:例如下一步读标题、读原文,还是材料不足。模型只提建议,程序按照允许的操作集合执行。S17 S18 S73

用同一份材料和题目比较,记录实际响应版本、错误、延迟与计费输入。第一轮不要同时换模型、换平台、改题目,否则不知道变化从哪里来。下一轮固定 Jev,再比较原厂、CF 或已有 Gateway,才是在比较接入路线。S74 S76 S79

有限输出免去了文字解析,却不会自动消除误判。Jev 文档说明 confidence 从概率分布计算而来;两个模型都返回 0.9,不证明它们在你的材料上有相同正确率。阈值应用单独的验证集合校准,数值、日期和权限规则能直接计算的部分交给代码。S77 S78

路线(接入 → 模型) 模型选择器 输入 USD / 百万 token 来源
Cloudflare → Jev typesafe/jev 0.042 S73
Cloudflare → Clef-flash @cf/cloudflare/clef-flash 0.09 S18
Cloudflare → Clef @cf/cloudflare/clef 0.24 S17

完整比较与可离线检查的请求形状,分别在 comparisons/clef-vs-jev.md 和 examples/decision-routing/。这些材料没有冒充真实推理验收。

“缓存命中”究竟复用了什么#

类型 复用的东西 需要确认
完整回答缓存 上一次的整份输出 内容与权限变化后是否仍有效
Provider prompt cache 可复用的输入前缀计算 命中条件由模型与提供商决定
应用结果缓存 自己计算的结构化结果 key 是否带了用户、版本与配置

三者不能从同一个 HIT/MISS 推断。尤其是有新消息、实时状态或权限变化的对话,旧答案即使便宜,也可能已经不适用。

允许换模型的任务,再试 AutoRouter#

AutoRouter 可在限定模型池中选择;beta 路由本身免费,推理照常计费。适合先放在可重试、错误可检测的小任务上,并记录实际命中模型。S13

User Insights 帮助查看流经 Gateway 的归属与成本,异常标记不自动阻止调用。它不能代替本地、订阅、直接 API 等其他使用记录。S14

有限选择可以单独试 Clef#

Clef 系列适合分类、筛选和下一步建议,不一定要为一个小判断生成长解释。先准备正例、反例与无法判断项,让模型只提出建议,再看误判代价是否可接受。概率仍需在自己的材料上校准。S16 S17 S18

09 / 让 agent 的工作持续,给工具安排环境#

不同运行层,负责不同的事情#

普通 API、字段变换与轻量计算可以留在 Worker。需要系统包、原生程序或完整 Linux 时再用 Containers。Agents SDK 提供身份、状态、连接与执行能力;它不是另一台 Linux 机器。S58 S59

一次任务最好带着明确输入进入:哪个版本、允许做什么、预算多少、成果保存在哪里、怎样取消。临时执行者得到这次任务的能力,不必持有长期管理账户的钥匙。

harness 保存工作,环境执行工具#

如果资料更新任务读到一半进程重启,要保留的是对话、未完成工作与下一步;如果工具要跑系统命令,需要的是执行环境。这两份状态不能靠一张磁盘快照代替。PiHarness 把 Pi 的 loop、transcript 和 inbox 接入 DO SQLite,由 Agents Lifecycle 在有未完成工作时唤醒;Containers / Sandbox 仍承担需要 Linux 的工具环境。S105

PiHarness 为 beta,Pi Durable 为 experimental。官方工具示例的 replay: "safe" 用在无副作用的字数统计,不能推导邮件、付款或发布都可随意重放。把它和第 6 章的未知结果一起读,再看agent 运行分工,选择是否研究这条实现,而不是因新 SDK 自动迁移。S104

同一个工作区,先核对 SDK 版本#

Artifacts 保存可审查的文件历史,Sandbox 提供 Linux 工具环境。当前 Artifacts 的组合示例固定模板 #v0,使用旧 Sandbox SDK 的 getSandbox() 与 setEnvVars();Sandbox 1.0 则要求应用自己的 Durable Object 与 this.ctx.container。这些是两代 Sandbox 运行接口,不能混写。核验于 2026-10-05。S114 S115

可以按任务建立仓库,向获准运行会话提供短期、限仓库的写入 token。Builds 与 Preview 要明确配置,推送文件不等于成果被接受。版本历史、文件系统快照与 agent 任务状态分别保存不同事实,需要定义衔接。S07 S114

1.0 要重新看生命周期#

Sandbox 1.0 由应用自己的 Durable Object 控制 ctx.container。命令使用参数数组,每次指定工作目录和环境;新镜像未必含有旧镜像的全部工具,旧进程也不会因为 Worker 更新就自动替换。S72

网络能力同样需要按新版文档设置。将长期凭据留在控制层,只在获准请求上使用,比把它们写进镜像更易限制。配置后仍要测试实际允许与拒绝的访问。S72

做一次完整的小实验#

选一个没有私人凭据的公开仓库版本,装好固定依赖,先跑确定性的检查。然后保存文件快照,从这份基线分出两个环境,各做一个小修改,交回补丁与结果。

快照只保存文件,不保存运行中程序,绑定镜像版本,当前 30 天保留期会在恢复时刷新。建立基线前清理不应被复制的材料与凭据。S05

需要历史的文件可用 Artifacts 保存,大型媒体可用对象存储。完成后关闭,再恢复一次:文件能否回来,旧任务有没有被误重跑,成果是否仍可读?这些才是“可恢复”的具体含义。S07

停下来也是任务的一部分#

Containers 的 CPU 按实际活跃使用计,内存和磁盘按配置及运行时长计。执行两分钟、多等十分钟,不能仍按两分钟预算。停止容器也不会撤销已经发出的外部请求。S06

10 月的 DO pending-I/O 更新可保护部分等待操作,期间仍计时长费用;它不代替持久任务恢复。S70

想一想:任务计算两分钟、等待网络十分钟,能否将所有资源都按两分钟估算?

展开答案与解释

答案:不能。 总经过时间是十二分钟,CPU 计算时间与等待时间需要分开记录;内存、磁盘、状态保留及其他调用按各自规则计量。记录这两个时间,不等于已经测得真实账单。

Cloudflare OS 则适合观察更完整的文件、工具与工作空间。当前自部署源码和托管候补是两种状态,研究 Gatekeeper、导出与升级即可,不必立即承载关键工作。S20

10 / 发布以后,真的用一遍#

检查哪一版,就发布哪一版#

生产发布保留一条明确负责的路径:可以是 GitHub Actions,也可以是 Workers Builds;另一边提供检查或预览。这样不容易出现两个系统同时发布,或检查的是 A、上线的却是 B。

Workers Builds 当前 Paid 包含每月 6,000 分钟、6 并发,单次限 20 分钟;设备专属和不同操作系统的测试,仍放在对应环境。S35 S65

预览也会使用真实资源#

DO 与 Containers 当前支持部分预览自动隔离,其他资源要逐项看绑定。D1、R2、KV、队列、Vectorize 指向同一目标时,换一个 URL 并不会得到另一份数据。S63

外部 PR 用合成数据和独立测试身份,避免直接取得生产 token。测试结束也要清理预览文件、队列与临时资源。

从进入到离开,而不只看首页#

Browser Run 可用于固定视口下的页面读取和操作。一个有用的检查过程是:进入、执行主要动作、保存、刷新、重开、取消,再故意触发一次错误。桌面与窄屏、键盘与触控都要考虑。S36

截图证明某一刻画面是什么样;导出后重新打开,才知道保存是否成立。两种证据都重要,不能互相替代。

Kitesurf 可以用于独立浏览实验,但不能代替最终目标浏览器。登录任务可以使用获准会话,没必要把整份个人浏览器资料交给临时环境;发布、支付等动作仍须有具体授权。S19

11 / 沿着一条请求,找到问题发生的地方#

从一次慢请求开始#

小资料架昨天很快,今天“搜索资料”用了十二秒。先记录请求 ID、部署版本、路径和时间范围,再把成功与失败的请求放在一起比较:慢在入口、Worker、索引读回、权限核验还是生成?总耗时不能回答这些问题。

Cloudflare Traces 的 open beta 可展示支持范围内的规则、转换、缓存、路由、Worker 与源站处理。应用内部的检索和生成仍需自己的阶段记录,不将平台 span 当作每个内部步骤都已自动覆盖。S99

平时少采,调查时定向采#

设置较低的 baseline,再用 Trace Rules 对需要调查的路径或临时 header 提高采样。规则按第一条匹配生效;保存草稿和 Deploy 是两个动作。入站 trace context 默认拒绝,放开后也不证明请求身份可信。S101

查询、调查、通知接成一条路#

SQL API beta 给多种 dataset 一个共同查询入口;当前每个 statement 只读一个 dataset,并需要下界时间条件。可以切 dataset 用请求身份对照,不声称跨 dataset JOIN 已开放。官方 SQL / Observability MCP 供有权限的人与 agent 调查,修改生产配置仍另有授权。S102 S103

Workers Issues 继续承接错误与版本;Alerts 给持续故障或积压一个可行动的入口。日志保留请求 ID、阶段耗时、结果和重试次数,正文与个人信息按实际需要限制。一次调查该怎样走,以及采样、保留与费用的完整解释见观测与调查。S11 S12 S98

12 / 算清持续成本#

先按单位,再按美元#

Workers Paid 最低每账户每月 $5,多项目共享包含量;R2、浏览器、模型、容器和日志各自计量,Zero Trust 也是另一种计划。启用 Paid 不等于取得所有企业功能。S34 S38 S41 S67

使用形态 首先计量 容易漏掉
网站与少量 API 动态请求、CPU、构建 日志和重复构建
资料库与检索 摄取、存储、查询、模型 重复分块、生成、旧索引
临时工作台 总运行时间、规格、模型 空闲、失败重试、产物保留

D1 计行,不只看 SQL 次数;R2 计对象操作;向量需要乘维度;队列还会因重试增加操作量;容器的空闲内存仍在运行时间里。这些单位比“每月应该只花几美元”更有用。S06 S37 S38 S39 S40

R2 价格:流量免费,存储和操作仍要算#

R2 Standard 的标价为 $0.015 / GB-month、Class A $4.50 / 百万次、Class B $0.36 / 百万次;每月包含 10 GB-month、100 万 A、1,000 万 B。Infrequent Access 有不同单价、取回费用与 30 天最低保存期,不享受这份 Standard 免费量。直接从 R2 出站不收费,接上其他计量服务后仍可能产生它们的费用;最终账单还有单位向上取整。S112

Observability:当前与已公布的费用分开读#

固定资料日期:2026-10-03。

条款 Free Paid
当前 Workers Logs S111 200,000 events / 日;3 天 20,000,000 events / 月;超出 $0.60 / 百万;7 天
已公布;将在 2026-12-01 生效 S100 0.5 GB 摄取 / 日;7 天 50 GB 摄取 + 12 GB-month / billing cycle;超出 $0.25 / GB + $0.10 / GB-month

上表共用 费用记录与生效事件。当前 pricing docs 的 Paid 存储包含量为 12 GB-month,发布博客仍写 10;采用文档口径并保留差异。未采样安全 dataset 不消费共享包含量;Enterprise 在合同续约时迁移。按字节计费后,大 attributes 和完整正文也增加摄取量,不只数 span。S100

给每次实验记一笔小账#

记录输入规模、次数、实际运行时间、资源与保留产物。先合并账户下的总用量,扣除一次共享包含量,再按项目分配观察。小规模便宜,不保证索引全量重建或重试风暴也便宜。

设定可以执行的停止条件:任务截止时间、最大并发、模型调用数、数据保留期。账单通知提醒趋势,不是全账户硬封顶。

免费也有三种含义#

免费计划可能在达到上限后停止;Paid 包含量之外可能继续计费;beta 免费可能有未来起算日。Artifacts 的来源存在 10 月 14/15 日一天冲突,AI Search 新计费自 11 月 1 日开始,要把核验日与生效日同时留下。S07 S08 S10

普通 KV 与 KV Instant 也不能混看。后者面向特殊读重型负载,写入、删除、列举每次 $0.10,存储每 MB·月 $100,不适合作为普通个人状态库的默认选项。S42 S25

13 / 坏了、恢复、暂时不用#

沿着请求走,不同时改所有东西#

看到的现象 先看这里
域名在不同设备解析不同 DNS、代理、解析器与权威记录
302 到登录页 Access 的应用与路径
403/401 响应来自边缘还是应用,再查对应身份
404 hostname、路由、ingress 与对象是否存在
429 配额、限流与重试方式
5xx/超时 请求 ID、各阶段耗时、依赖健康
页面仍是旧版 实际部署、路由与浏览器缓存
任务有记录却没结果 outbox、领取状态、租约与未知结果
容器文件消失 生命周期、镜像、快照与持久成果

状态码是线索,不是诊断。一次只验证一个原因,恢复后重新测拒绝路径,避免“能打开了”掩盖权限被顺手放宽。

让恢复目标具体一点#

例如“把测试资料集合恢复到指定版本,不重新执行历史外部任务”。保留当前状态与备份身份,再验证记录、文件 hash、权限和待处理工作。恢复中遇到未知结果,就留下等待核对状态,不把它改成成功或未发生。

停用有一个顺序#

先关闭新入口和自动触发,再处理执行中的任务;保存成果、撤销凭据,检查容器、浏览器会话、预览、队列和临时对象。最后按需要删除资源,或保留只读内容。

同时检查域名是否仍指向废弃服务,备份能否在不依赖原服务时读取,外部模型和日志是否还有保留设置。一项应用停止访问,不一定意味着所有关联费用都停止。

14 / 继续维护这份手册#

保留问题,更新做法#

实施时要分清几处容易混淆的边界:队列登记不等于任务完成;调用者标签不证明身份;快照不保存进程;Preview 不证明数据隔离。

截至本期资料日期,Sandbox 1.0 路线、AI Search GA 与新计费、Gateway 按首次创建日区分的日志规则、Cloudflare OS 托管候补分别有各自的开放条件;实施前应按来源和目标账户再核对。S72 S09 S10 S15 S20

两种读者,不必挤在同一页#

报告与本手册先让人理解用途、过程和取舍。实施参考保存精确字段、源码、命令、状态转移与失败检查;它可以更直接地给 agent 使用,却不能把文档当作部署授权。两层共用来源登记和例子,不各自维护一份互相漂移的事实。

需要什么 仓库入口
本期产品变化 2026.10 首发选编;10-03与10-02历史观察
人的阅读版 guides/handbook.md
实施细节、完整代码和状态约束 reference/implementation.md
离线示例与测试 examples/、tests/
来源、日期与变化记录 catalog/、来源说明

这里的检查分为资料与示例的本地验证、实际云端验证两类。本包包含前者,不包含账户登录、部署、迁移或模型实测。新的实践结果应按自己的输入、版本和范围补充,不无声地改写旧期判断。

来源索引#

原有条目沿用 2026-10-02 的核验范围;新增四主题与 R2 费用来源查阅于 2026-10-03;S114–S117 的接口与认证说明定向核验于 2026-10-05。完整范围与来源差异见来源说明。资料查阅不等于账户、模型或云端实测。

  • S02 · cf CLI 发布
  • S03 · cf CLI 文档
  • S05 · Containers 文件系统快照
  • S06 · Containers 价格
  • S07 · Artifacts 公开测试发布
  • S08 · Artifacts 价格
  • S09 · AI Search GA
  • S10 · AI Search 限制与价格
  • S100 · Cloudflare Observability 价格
  • S101 · Cloudflare Traces 采样与传播配置
  • S102 · SQL API 查询
  • S103 · SQL API 限制
  • S104 · PiHarness 发布
  • S105 · PiHarness 状态与 Lifecycle
  • S106 · Web Search API 发布
  • S109 · Protected Quick Tunnels 发布
  • S11 · Workers Issues 发布
  • S111 · Workers Logs 迁移前计费
  • S112 · R2 存储类别与价格
  • S113 · Workers 新项目脚手架
  • S12 · Workers Issues 文档
  • S13 · AutoRouter 发布
  • S14 · AI Gateway User Insights
  • S15 · AI Gateway 价格与日志
  • S16 · Clef 与强化学习平台发布
  • S17 · Clef 模型卡
  • S18 · Clef-flash 模型卡
  • S19 · Kitesurf 更新
  • S20 · Cloudflare OS 托管候补
  • S25 · KV Instant 私测与价格
  • S34 · Workers 价格
  • S35 · Workers Builds 限制与价格
  • S36 · Browser Run 价格
  • S37 · D1 价格
  • S38 · R2 价格
  • S39 · Queues 价格
  • S40 · Vectorize 价格
  • S41 · Workers AI 价格
  • S42 · KV 价格
  • S44 · Workflows 价格
  • S45 · Workers Bindings
  • S46 · Workers Static Assets
  • S47 · Cloudflare Tunnel
  • S48 · Access JWT 验证
  • S49 · Access Service Tokens
  • S116 · Access 严格 Service Token 认证
  • S114 · Artifacts:Sandbox SDK 示例
  • S115 · Sandbox SDK 1.0:替换 Sandbox 类
  • S117 · Tunnel routes 与 connections API 变更
  • S50 · D1 Time Travel
  • S51 · D1 数据导出
  • S52 · R2 对象生命周期
  • S53 · Queues 重试与批处理
  • S54 · Queues 死信队列
  • S55 · Workflows 执行规则
  • S56 · Cron Triggers
  • S57 · Service Bindings
  • S58 · Agents SDK
  • S59 · Sandbox SDK
  • S60 · Agent Memory
  • S61 · Cloudflare Mesh
  • S62 · Split Tunnels
  • S63 · Workers 预览资源隔离
  • S64 · Vectorize Client API
  • S65 · Workers Builds
  • S66 · Workers 入门
  • S67 · Zero Trust 计划
  • S70 · Durable Objects pending I/O 保活
  • S71 · Workers OAuth Provider v1
  • S72 · Sandbox SDK 1.0 迁移差异
  • S73 · Jev:Cloudflare 第三方模型目录
  • S74 · TypeSafe:Jev 版本、价格与上下文预算
  • S76 · OpenRouter:Jev 的两种接口
  • S77 · TypeSafe:confidence 的含义
  • S78 · TypeSafe:Jev 1.13 已知能力边界
  • S79 · Cloudflare AI Gateway:统一 REST API
  • S98 · Cloudflare Observability 新平台发布
  • S99 · Cloudflare Traces 发布

关于这一版#

这是面向个人使用的独立参考资料,不是 Cloudflare 官方出版物。产品事实保留来源,场景与判断属于编辑分析。

术语 / FIELD NOTES

在词表中继续阅读