Moltworker 云端部署实录:Cloudflare Workers 托管 OpenClaw,$5 起步但要算清 $34.5 的持续账单

一、为什么要把个人 Agent 搬上边缘云

过去半年,关于 OpenClaw 的讨论几乎都集中在”它有多能干”上:能帮你读邮件、盯网页、整理文件、跑脚本、在多个工具之间来回切换。但真正把 OpenClaw 长期跑起来的人会遇到另一个问题——它住在哪里。

大多数人的第一版是:在自己笔记本上跑,或者租一台 $5 的 VPS,nohup 一个进程或者挂一个 pm2。能用,但用三天就开始烦:笔记本合盖就断线,VPS 的时区、证书、系统升级、日志轮转都要自己管,公网 IP 暴露还需要额外做一道鉴权,一个不小心 Agent 的接口就挂在互联网上裸奔。

Moltworker 就是 Cloudflare 对这个问题的回答。它是 Cloudflare 开源的一个参考实现(Proof of Concept,概念验证),用 Cloudflare 全家桶把 OpenClaw 托管起来:Workers 做入口与编排、Sandbox Containers 跑 Agent 本体、R2 存会话与文件、Browser Rendering 提供真实浏览器、AI Gateway 做模型请求的统一出口、Zero Trust 做访问控制。

1.1 三个朴素但真实的动机

我不打算把”上云”说得多么高大上。把 OpenClaw 搬到 Cloudflare 上,能解决的其实是三个很具体的问题。

第一,无服务器意味着不用管机器。没有 SSH、没有系统补丁、没有 systemd、没有磁盘打满。对于一个”7×24 跑着但大部分时间闲着”的个人 Agent 来说,运维成本其实是最大的一块隐性支出。你不用维护,就是省钱。

第二,边缘节点带来更低的往返延迟。Cloudflare 的 Workers 跑在离用户最近的节点上,Agent 的入口层(接收消息、鉴权、转发)在全球任意位置都能在很低的延迟内响应。对个人用户来说,这一条的意义不如企业大,但如果你常出差、常在海外,感受会很明显。

第三,安全边界是内置的。这一点最容易被忽略,但在我看来最重要。个人 Agent 天然有很高的权限:它能读写你的文件、调用你的账号、执行你的命令。把它随手绑在一个公网 IP 上,风险极高。而 Moltworker 的参考架构里,Zero Trust 是标配,不是选配。

1.2 先泼一盆冷水:这仍然是 PoC

在往下讲部署之前,我必须把一句判断放在最前面:Moltworker 是参考架构,不是开箱即用的商业产品。它的价值在于”告诉你这条路可以怎么走”,而不是”给你一个按钮就能上线”。

具体表现是:你需要自己读 wrangler 配置、自己接 R2 的 bucket、自己在 AI Gateway 里建网关、自己在 Zero Trust 里建应用和策略。文档给你的是路径,不是成品。如果你期待”部署完就能用”,大概率会失望;如果你期待”用一份干净的可控架构学习如何托管 Agent”,那它非常合适。

1.3 一个容易踩的坑:$5 不等于 $5

另一个必须提前说清的事是价格。Workers Paid 计划是 $5/月起,这是真的。但”$5 起”和”持续运行要多少钱”是两个完全不同的问题。按标准的持续运行形态计算,Moltworker 的月度成本大约在 $34.50 左右,主要来自沙箱容器长时间占用、Browser Rendering 的调用、R2 存储与出站、AI Gateway 的请求以及模型本身的费用。

我在后面的成本拆解里会把它逐项展开。这里先把结论放出来:$5 是门票,$34.50 才是账单。很多教程只讲前者,这是不负责任的。

二、Moltworker 的六大组件:逐个拆开讲

理解 Moltworker 的最好方式,不是从部署命令开始,而是从架构开始。它的六个组件各自解决一个明确的问题,理解了这个分工,后面的配置项就都顺理成章了。

2.1 Workers:入口与编排层

Workers 是整个 Moltworker 的门面。它负责接收外部请求(Webhook、HTTP 调用、定时触发事件)、做初步的鉴权与路由、再把具体任务下发到沙箱容器里执行。它不跑 Agent 本体,这一点很关键——Workers 的运行环境是有资源上限的,不适合长时间驻留的重任务。

Worker 的角色更像是”调度员”:来了一个任务,它决定把哪个容器实例唤醒、用什么参数、结果写回哪里。这种入口与执行分离的设计,是从 Serverless 的经验里长出来的,好处是入口层可以无限横向扩展,坏处是多了一层状态传递的复杂度。

2.2 Sandbox Containers:真正跑 OpenClaw 的地方

沙箱容器是 Moltworker 里最”重”的部分,也是成本的主要来源。OpenClaw 需要一个完整的运行环境:Node 运行时、文件系统、可以执行命令的 shell、可能还有浏览器。这些都不能在 Worker 隔离环境里跑,必须落到容器里。

Cloudflare 的 Sandbox Containers 提供了带生命周期管理的容器能力:可以按需启动、闲置回收、状态挂载。这正好匹配个人 Agent 的使用特征——短时高并发、长时低占用。

2.2.1 为什么沙箱而不是”自己的 Docker 主机”

你可以自己在 VPS 上跑 Docker,效果差不多。区别在于:沙箱容器把”隔离、回收、调度”这三件事变成了平台职责,你不用写任何容器生命周期管理代码。代价是你被绑定在 Cloudflare 的容器模型里,控制粒度不如自建。

2.3 R2:会话、文件与快照的家

Agent 是有记忆的。OpenClaw 的会话历史、上传的文件、生成的产物、临时快照,都需要一个持久化存储。Moltworker 用 R2 来承担这一层。

选择 R2 的逻辑很直接:它和 Workers 在同一个平台,绑定配置只有几行;它没有传统云存储那种高额出站费用,对”读多写少、出站不少”的 Agent 场景更友好;它还天然可以作为沙箱容器的持久化挂载点。

2.4 Browser Rendering:给 Agent 一双真实的浏览器

OpenClaw 的很多能力依赖真实浏览器:打开网页、点击、截图、抓取需要 JS 渲染的内容、处理登录态。Browser Rendering 提供了托管的无头浏览器池,Agent 不用自己装 Chromium、不用管版本、不用处理内存泄漏。

这一项在成本上容易被低估。浏览器会话是按时间的,不是按请求的。一个没有及时关闭的页面,会持续计费。这是后面我要专门提醒的一个细节。

2.5 AI Gateway:模型请求的统一出口

Agent 的大脑是模型。AI Gateway 位于 Agent 和模型供应商之间,做三件事:统一路由(一个入口对接多家模型)、缓存与重试、观测(记录每次调用的延迟、token、错误率)。

对个人部署者来说,最实用的价值是可观测。当你发现账单超预期时,第一件事就是看 AI Gateway 的日志——是哪个任务在疯狂调用模型、是不是缓存失效了、是不是某个循环没退出。没有这层,你就是在盲猜。

2.6 Zero Trust:把 Agent 关进门内

最后一个组件是访问控制。Zero Trust 负责在 Worker 前面加一道身份验证:只有通过身份验证的请求,才能到达 Agent 的入口。

这一步在参考架构里是必做项,而不是可选项。因为个人 Agent 的权限边界很宽,一旦暴露在公网且没有鉴权,攻击者可以直接让它执行命令。Zero Trust 提供的是”身份 + 策略”的最小闭环,配合 Cloudflare Access 可以对应用做邮箱域限制、一次性 PIN、SSO 等方式的访问控制。

2.7 六大组件职责一览

把上面的六个组件压缩成一张表,方便你在配置时对照检查。

组件 在 Moltworker 中的角色 关键配置项 成本特征 常见坑
Workers 入口、鉴权转发、任务编排、定时触发 wrangler.toml 的 routes、compatibility_date、绑定 按请求数与 CPU 时间,属于基础计划覆盖范围 把重任务写进 Worker 导致 CPU 超限
Sandbox Containers 运行 OpenClaw 本体与命令执行环境 容器规格、闲置超时、挂载点 按容器运行时长,是账单大头 闲置回收没配好,空跑烧钱
R2 会话历史、文件、快照持久化 bucket 名称、绑定名、生命周期规则 按存储量与操作次数 生命周期没设,快照无限累积
Browser Rendering 托管无头浏览器,供 Agent 操作网页 浏览器会话数、超时设置 按会话时长与并发 页面未关闭导致持续计费
AI Gateway 模型请求统一出口、缓存、观测 网关 ID、提供商凭据、缓存策略 网关本身低,模型费用另计 把模型密钥直接写进 Worker 环境变量
Zero Trust 访问控制与身份验证 Access 应用、策略、身份源 小团队通常落在免费额度 策略写成 “Everyone”,等于没设

三、开工前的准备:账号、计划与本地环境

部署 Moltworker 的第一步不是敲命令,而是把账号和环境理顺。这一步做扎实,后面会少踩很多坑。

3.1 Cloudflare 账号与 Workers Paid 开通

Moltworker 需要 Workers Paid 计划,$5/月起。免费计划的 Workers 无法支撑沙箱容器和 Browser Rendering 这套组合,所以必须升级。

操作路径大致是:登录 Cloudflare Dashboard → 进入 Workers & Pages → 在计划页选择 Workers Paid → 绑定支付方式 → 确认升级。升级是按账号生效的,不是按单个 Worker 生效的,所以一个账号下所有 Worker 共享这个 $5 基础费。

需要提醒的是:$5 只是基础订阅,超出部分按用量计费。沙箱容器、Browser Rendering、R2 这些服务的用量都会脱离基础费单独结算。你可以在 Dashboard 的 Billing 里设置用量告警,这是防止账单失控的第一道保险。

3.2 需要提前开通的服务

把以下服务在 Dashboard 里逐个确认开通,避免部署到一半才发现某个服务没启用:

  • R2:首次使用需要在 R2 页面同意条款并创建 bucket。R2 有免费额度,但需要显式开通。
  • Browser Rendering:在 Workers & Pages 的 Browser Rendering 页面申请开通,通常需要等待审核或直接可用。
  • AI Gateway:在 AI → AI Gateway 里创建一个网关,记下网关 ID。
  • Zero Trust:首次进入需要设置团队域名(team domain),这个域名会成为你访问应用的子域前缀。

3.3 本地环境准备

本地需要 Node.js(建议 20 以上)、npm 或 pnpm、git,以及 wrangler CLI。wrangler 是 Cloudflare 的官方命令行工具,几乎所有操作都通过它完成。

# 1. 检查本地环境
node -v
npm -v
git --version

# 2. 安装 wrangler(全局或项目内皆可,建议锁定版本)
npm install -g wrangler

# 3. 登录 Cloudflare 账号(会打开浏览器授权)
wrangler login

# 4. 确认登录状态与账号信息
wrangler whoami

wrangler whoami 会输出当前账号的 ID 与邮箱,把 Account ID 记下来,后面配置文件里会用到。如果你在 CI 或服务器上部署,可以用 CLOUDFLARE_API_TOKEN 环境变量替代交互式登录,Token 需要在 Dashboard 里创建,权限选择 Workers、R2、AI Gateway 等相关项。

四、克隆仓库与部署流程

环境就绪后,进入真正的部署环节。Moltworker 的仓库托管在 Cloudflare 的 GitHub 组织下,克隆后用 wrangler 部署。

4.1 克隆与依赖安装

# 1. 克隆 Moltworker 参考实现
git clone https://github.com/cloudflare/moltworker.git
cd moltworker

# 2. 查看目录结构,重点看 wrangler 配置与 src
ls -la
cat README.md

# 3. 安装依赖(以 npm 为例)
npm install

# 4. 如果是 monorepo 结构,注意进入对应的子目录
# cd packages/worker

克隆之后第一件事是读 README 和 wrangler 配置文件,而不是急着 deploy。Moltworker 作为参考实现,配置文件里预留了大量占位符,你需要逐个替换成自己的资源 ID。直接 deploy 十有八九会因为绑定缺失而报错。

4.2 创建资源:bucket 与网关

配置文件里的绑定依赖真实存在的资源,所以要先创建它们。

# 创建 R2 bucket(名称与 wrangler.toml 中保持一致)
wrangler r2 bucket create moltworker-data

# 查看已创建的 bucket
wrangler r2 bucket list

# 列出当前账号下的 AI Gateway(需在 Dashboard 先创建)
wrangler ai-gateway list 2>/dev/null || echo "请在 Dashboard → AI → AI Gateway 创建网关"

# 查看当前账号下的容器/沙箱相关资源
wrangler containers list 2>/dev/null || echo "若该子命令不可用,请以当前 wrangler 版本帮助为准"

注意:wrangler 的子命令会随版本演进,部分命令(如容器、AI Gateway 的管理命令)在不同版本里名称或可用性不同。遇到命令不存在时,以 wrangler --help 和官方文档为准,不要照抄过时的教程。

4.3 配置与首次部署

资源就绪后,填写配置(下一节给出模板),然后先做一次 dry-run,再正式部署。

# 1. 本地类型检查与打包,不真正上传
npx wrangler deploy --dry-run --outdir dist

# 2. 本地开发预览(会用本地模拟绑定,便于调试)
npx wrangler dev

# 3. 正式部署
npx wrangler deploy

# 4. 查看部署状态与最近日志
npx wrangler deployments list
npx wrangler tail

wrangler tail 是排查问题的主力工具,它会实时输出线上 Worker 的日志。首次部署后建议开着它,用浏览器访问一次入口,确认请求链路是否正常。

4.4 部署后的验证清单

部署成功不等于可用。按下面的顺序逐项验证,任何一项失败都要停下来定位:

  • 访问 Worker 的默认域名,确认返回的是预期的入口页面,而不是 500 或 1101 错误。
  • 在 Dashboard 的 Workers 日志里查看是否有绑定错误(比如 R2 binding not found)。
  • 触发一次简单的 Agent 任务,确认沙箱容器被拉起,任务能返回结果。
  • 检查 R2 bucket 里是否写入了会话记录,确认持久化链路通。
  • 在 AI Gateway 的日志里确认有请求记录,确认模型调用确实走了网关。
  • 最后才配置 Zero Trust,避免在调试阶段被自己的策略挡在门外。

五、wrangler 配置模板:逐字段讲清楚

Moltworker 的配置集中在 wrangler.toml(或 wrangler.jsonc)。下面给出一份注释充分的模板,字段名以你本地仓库的实际版本为准,写法可能随版本演进略有差异。

5.1 基础配置与绑定

# wrangler.toml —— Moltworker 部署配置模板
name = "moltworker"
main = "src/index.ts"
compatibility_date = "2024-11-01"
# 新版运行时如需 Node 兼容能力,按仓库 README 启用对应 flag
# compatibility_flags = ["nodejs_compat"]

account_id = "你的_ACCOUNT_ID"

# 入口路由:自定义域名比 workers.dev 更适合生产
routes = [
  { pattern = "agent.example.com/*", zone_name = "example.com" }
]

[vars]
# 非敏感配置放 vars,敏感信息用 secret
ENVIRONMENT = "production"
AGENT_NAME = "openclaw"

# R2 绑定:bucket_name 必须与已创建的 bucket 一致
[[r2_buckets]]
binding = "MOLT_DATA"
bucket_name = "moltworker-data"

# AI Gateway 绑定:gateway id 与 provider 按实际填写
[ai]
binding = "AI"

# 沙箱容器相关配置(字段名以仓库实际结构为准)
# [containers]
# class_name = "AgentSandbox"
# max_instances = 2
# idle_timeout_seconds = 300

# 可观测性:开启日志与采样,便于排查
[observability]
enabled = true
head_sampling_rate = 1.0

几个需要额外解释的点:

5.1.1 compatibility_date 不要随手写

compatibility_date 决定了 Workers 运行时采用哪一版的兼容行为。写一个未来的日期会导致部署失败;写一个太旧的日期,可能拿不到新特性。稳妥做法是保留仓库里给的日期,或者使用 wrangler 提示的当前推荐值。不要为了”看起来新”而写一个没验证过的日期。

5.1.2 容器配置是成本闸门

如果你的仓库版本支持容器配置,max_instances 和 idle_timeout_seconds 就是控制成本的两把闸。max_instances 限制同时存在的沙箱数量,防止突发流量把账单顶穿;idle_timeout_seconds 控制空闲多久后回收。个人使用场景下,闲置超时设短一点(比如 5 分钟)能省下不少钱。

5.2 环境变量与密钥

敏感信息绝不能写进 wrangler.toml 提交到 git。正确做法是用 wrangler secret put 写入。这是 Moltworker 部署里最容易被忽视的安全细节——很多人在配置文件里直接贴模型 API Key,仓库一公开,密钥就泄露了。

# 写入密钥(交互式输入,不会出现在 shell 历史里)
npx wrangler secret put MODEL_API_KEY
npx wrangler secret put OPENCLAW_ADMIN_TOKEN
npx wrangler secret put AI_GATEWAY_URL

# 批量写入(适合 CI,从文件读取)
# echo "$MODEL_API_KEY" | npx wrangler secret put MODEL_API_KEY

# 查看已配置的密钥名称(不会显示值)
npx wrangler secret list

# 删除不再使用的密钥
npx wrangler secret delete OLD_KEY

# 本地开发时用 .dev.vars 放同样的变量,并加入 .gitignore
cat > .dev.vars <<'EOF'
MODEL_API_KEY=local-dev-key
OPENCLAW_ADMIN_TOKEN=local-dev-token
AI_GATEWAY_URL=https://gateway.ai.cloudflare.com/v1/<account_id>/<gateway_id>
EOF

echo ".dev.vars" >> .gitignore

环境变量的分工建议这样划:wrangler.toml 的 [vars] 只放非敏感的开关和标识;所有密钥、Token、网关完整 URL 都用 secret;本地开发用 .dev.vars 且确保被 git 忽略。这三层分清楚,后面就不会出现”测试环境能跑、线上报 401″的情况。

5.3 配置自检的几个动作

配置写完,先跑一遍本地开发环境和一次 dry-run。如果 dry-run 能通过,说明绑定声明在语法和类型上是正确的,剩下的就是资源是否存在、权限是否足够。

# 检查配置语法与绑定是否可解析
npx wrangler deploy --dry-run

# 本地起服务,模拟绑定行为
npx wrangler dev --local

# 检查当前账号与计划,确认 Paid 已生效
npx wrangler whoami

六、R2 与 AI Gateway 的接线

六大组件里,R2 和 AI Gateway 是两个最需要”接线”的部分。它们的配置正确与否,直接决定 Agent 能不能记住上下文、能不能正常调用模型。

6.1 R2:会话与文件的持久化

R2 在 Moltworker 里承担的不只是”存文件”,更关键的是让无状态的 Worker 有状态。容器可以被回收重建,但会话历史在 R2 里,Agent 下次醒来还能接上上下文。

6.1.1 目录结构建议

建议在 bucket 里用前缀把不同类型的数据分开,方便后续做生命周期规则和成本分析:

  • sessions/{user}/{sessionId}/:会话历史与消息记录
  • files/{user}/{uuid}/:用户上传的文件
  • artifacts/{date}/:Agent 生成或抓取的产物
  • snapshots/{date}/:容器快照与临时状态

6.1.2 生命周期规则是省钱的关键

快照和日志类数据会无限增长。给它们配上生命周期规则,比事后清理要省心一百倍。在 Dashboard 的 R2 → bucket → Settings → Object lifecycle rules 里新增规则,例如让 snapshots/ 前缀在 7 天后自动删除,让 artifacts/ 在 30 天后转存或删除。

# 查看 bucket 目录内容,确认写入是否正常
npx wrangler r2 object list moltworker-data --prefix sessions/ 2>/dev/null || \
  echo "以当前 wrangler 版本的 r2 子命令为准"

# 下载一个对象用于核对内容
npx wrangler r2 object get moltworker-data/sessions/<user>/<id>/history.json --file ./history.json

6.2 AI Gateway:让模型调用可观测

AI Gateway 的接线分两步:在 Dashboard 创建网关,然后让 Agent 的模型请求走网关地址,而不是直连供应商。

6.2.1 创建网关与拿到网关地址

在 Dashboard 的 AI → AI Gateway 里创建网关,取一个可识别的名字(比如 moltworker-openclaw),然后记下网关 ID。通用的网关地址形态是:

https://gateway.ai.cloudflare.com/v1/<account_id>/<gateway_id>
# 针对具体提供商的路径通常是:
# https://gateway.ai.cloudflare.com/v1/<account_id>/<gateway_id>/<provider>

把供应商凭据(API Key)存到网关侧或作为请求头透传,取决于你选择的管理方式。推荐把凭据存在网关侧,Worker 里只持有网关地址,这样密钥轮换只需要改一处。

6.2.2 缓存与限流策略

AI Gateway 支持缓存与限流。对个人 Agent 来说,缓存策略的收益取决于任务重复度:如果你经常让它读同一批网页、做相似总结,开缓存能明显省钱;如果任务高度一次性,缓存反而会带来”回答过时”的问题。建议先开观测,跑一周看命中率,再决定是否启用缓存。

6.2.3 用日志反查账单

这是我最看重的用法。当月底账单比预期高时,打开 AI Gateway 的请求日志,按 token 数排序,你会立刻看到是谁在烧钱。绝大多数超支都是两三个具体任务造成的:一个没有设置上限的循环、一个每次都重新拉取长文档的流程、一次忘记关掉的浏览器会话。没有网关日志,你只能靠猜。

七、用 Zero Trust 把 Agent 关进门内

前面说过,个人 Agent 的权限边界很宽。把入口暴露在公网而不加鉴权,等于把自己的电脑挂在互联网上。Zero Trust 是 Moltworker 参考架构里给这件事上的锁。

7.1 建立团队域名与身份源

首次进入 Cloudflare Zero Trust 需要设置团队域名(team domain),它会成为你在 Access 里配置应用的域名前缀。身份源(IdP)可以选择邮箱一次性 PIN(最简单,适合个人)、Google/GitHub 登录、或企业 SSO。

对个人部署,我最推荐”邮箱一次性 PIN + 邮箱白名单”。配置成本最低,安全性对个人场景足够:只有你绑定的邮箱能收到验证码,别人即使知道入口地址也进不去。

7.2 为 Worker 挂上 Access 应用

在 Zero Trust → Access → Applications 里新建一个 Self-hosted 应用,域名填你自己绑定的 agent.example.com,然后新建策略:动作选 Allow,条件选 Emails,把你自己(以及需要共享的人)的邮箱加进去。

7.2.1 最常见的两个配置错误

错误一:策略写成 Everyone。这会让你以为配了访问控制,实际上是全开。安全配置里,”看起来配了”比”没配”更危险。

错误二:忘了给 Webhook 或 API 路径放行。如果你的 Agent 需要接收外部平台的回调,这段路径不能走浏览器登录流程。正确做法是用 Access 的 Service Token(CF-Access-Client-Id / CF-Access-Client-Secret)给机器访问单独开一条通道,而不是把整个应用放开。

7.3 Zero Trust 与成本的关系

这一层还顺带解决了成本问题:不该来的请求根本到不了 Worker。没有鉴权时,爬虫和扫描器会不断打你的入口,每一次都可能触发容器唤醒。加了 Access 之后,未验证请求在边缘就被挡下,容器的空跑次数会明显下降。安全与成本在这里是一件事,不是两件事。

八、成本拆解:$5 与 $34.50 之间的距离

现在进入这篇文章最实在的部分。$5/月的 Workers Paid 是入场券,但它不包含 Moltworker 需要的全部服务用量。按标准持续运行形态估算,月度总成本在 $34.50 左右。下面逐项拆开。

8.1 先看整体结构

下表是示意性的结构拆解,用于说明”钱花在哪”,而非报价单。实际金额会随用量、模型选择、容器规格、汇率与官方价格调整而变化,请以 Cloudflare 官方定价页与你账号账单为准。

成本项 计费方式 是否含在 $5 内 在 $34.50 中的大致占比 控制手段
Workers Paid 基础订阅 按账号按月 是 基础部分 无需控制,固定支出
Workers 请求与 CPU 按请求数、CPU 时间 超出部分另计 较小 把重任务下沉到容器
Sandbox Containers 按实例运行时长与规格 否 最大一块 缩短闲置超时、限制最大实例数
Browser Rendering 按浏览器会话时长/并发 否 中等 任务结束即关闭页面,设会话上限
R2 存储与操作 按存储量、读写操作 否 较小 生命周期规则、快照自动过期
AI Gateway 网关请求(低价) 否 很小 开启缓存降低重复请求
模型 API 调用 按 token 否 可变,取决于模型 短上下文、小模型分流、缓存
Zero Trust 按席位 个人通常免费额度内 接近零 控制用户数

8.2 沙箱容器:为什么它是大头

容器的计费逻辑是”占着就在计费”,而不是”干活才计费”。OpenClaw 这种 Agent 的典型特征是:一天里可能只有几次真正需要执行任务,但为了保证随时可响应,容器容易长时间驻留。驻留时长乘以单价,就是账单的主体。

所以优化容器成本的核心不是”少用”,而是”快回收”。把闲置超时从 30 分钟压到 5 分钟,效果立竿见影;再配合 Worker 侧的按需唤醒,用户体验几乎不受影响。

8.3 Browser Rendering:容易被忽略的隐形支出

浏览器会话是按时长计的。一个很常见的写法是:打开页面、抓内容、忘了关闭。单次看不出来,但如果这个流程每天跑几十次,月末的账单会非常刺眼。养成”用完即关”的编码习惯,是控制这一项最有效的手段。

8.4 模型费用:不可预测的那一块

$34.50 这个数字里,模型费用是最多变的部分。同一套架构,用不同的模型,账单可能差出几倍。建议的做法是分层:日常简单任务走便宜的小模型,复杂推理才切到大模型,并在 AI Gateway 里配置路由规则。这样既控制成本,也控制延迟。

8.5 $34.50 什么时候值

我的判断是,下面这几种情况,$34.50/月是花得值的:

  • 你把它当成一个真实在用的个人助理,每天至少调用十几次,省下的时间价值远超这个数字。
  • 你不具备运维能力,也不想学。自己维护一台 VPS 的时间成本(系统更新、证书、监控、故障恢复)折算下来,往往高于这个差价。
  • 你在做原型验证或团队内部分享。Moltworker 的架构本身就是一份高质量参考,部署一次学到的东西,比省下的钱更值钱。
  • 你需要随时随地访问,且对安全有要求。Zero Trust 这套访问控制,自己搭一套同等水平的,成本和精力都不低。

8.6 什么时候自建更划算

反过来,下面这些情况,我更建议你自建 VPS:

  • 你对成本极度敏感,且用量很小。一台 $5 的小 VPS 挂一个 Agent,完全够用,月度支出可以压到个位数。
  • 你需要长期驻留的重任务。比如持续抓取、批处理训练、频繁读写大文件,这类负载在按量计费的云上非常贵,包月的 VPS 反而更便宜。
  • 你需要对运行时做深度定制。装特定的系统包、改内核参数、跑非标准依赖,沙箱容器会给你加上一层说不清的束缚。
  • 你有现成的 Linux 运维经验,并且愿意为可控性花时间。

8.7 一张对比表看清差距

维度 Moltworker(Cloudflare 全家桶) 自建 VPS
起步成本 Workers Paid $5/月起 通常 $5 左右/月
持续运行月成本 约 $34.50(含沙箱、浏览器、存储、网关、模型) 基础机器费 + 模型 API 费用,通常更低
运维负担 几乎为零,平台负责补丁与可用性 系统更新、证书、监控、备份全自理
弹性能力 强,按需拉起与回收 弱,受机器规格限制
访问控制 内置 Zero Trust,开箱可用 需自行配置 Nginx + 鉴权 + 证书
可控性 受平台模型约束,粒度较粗 完全可控,任意定制
适用负载 短时、突发、间歇型任务 长期驻留、持续占用型任务
成熟度 PoC 参考架构 成熟方案,社区经验多
迁移成本 较高,深度绑定平台 低,随时换机器

这张表的核心结论是:Moltworker 卖的不是便宜,是省心与弹性。你用每月约 $30 的差价,买掉了运维负担、买到了全球入口、买到了一套带 Zero Trust 的安全边界。这笔交易值不值,取决于你的时间值多少钱。

8.8 一份可执行的降本清单

如果你决定用 Moltworker,但想把 $34.50 压下来,按下面的顺序做,收益最大:

  • 把容器闲置超时调到 5 分钟以内,观察一周的任务成功率是否受影响。
  • 限制最大容器实例数为 1 到 2 个,个人使用几乎不会需要更多。
  • 给 R2 的 snapshots/ 前缀配 7 天过期规则。
  • 审查所有浏览器调用代码,确保每个会话都有关闭路径。
  • 在 AI Gateway 里做模型分层路由,简单任务走便宜模型。
  • 在 Dashboard 里设置账单告警,阈值设在你心理预期的 1.2 倍。

九、PoC 定位的限制与生产化差距

Moltworker 是一个非常好的学习样本,但如果你要把它当成生产系统,必须清楚它离”生产可用”还差什么。这一段是我认为整篇文章里最该被认真读的部分。

9.1 缺少什么:从五个角度看

9.1.1 可靠性与容错

参考实现默认不会覆盖所有失败路径:容器启动失败、任务中途崩溃、模型调用超时、R2 写入失败。生产系统需要重试、幂等、死信队列、任务状态机。这些在 PoC 里通常只做了最简处理,甚至没有。

9.1.2 多用户与隔离

个人用的 Agent 不需要多租户。但如果你打算给团队用,就要面对会话隔离、配额、权限分级、审计日志。Moltworker 的参考架构没有为这些预留完整的模型,你需要自己设计。

9.1.3 可观测性

Workers 的日志、AI Gateway 的请求记录能解决一部分问题,但完整的可观测需要指标、追踪、告警三件套。PoC 给你的是”能看日志”,不是”能定位问题”。

9.1.4 数据治理

会话历史里可能包含敏感信息。生产系统需要考虑加密、保留策略、导出与删除能力(合规要求里常有”可删除”这一条)。R2 的生命周期规则只能解决过期,解决不了”按用户删除”。

9.1.5 版本与升级

Cloudflare 的平台能力在快速演进,wrangler 的子命令、容器模型、绑定方式都可能变化。参考实现不会跟着你的业务节奏升级,你需要自己维护一份”跟随上游”的成本预算。

9.2 生产化的最短路径

如果你真要往前走,我建议按这个顺序补:先补任务状态机与重试(解决”任务丢了”),再补配额与限流(解决”账单失控”),然后补审计日志(解决”出问题查不到”),最后补多租户隔离。这个顺序是按”出问题的概率 × 后果严重度”排的,不是按技术优雅度排的。

9.3 一个务实的结论

我的建议是:把 Moltworker 当作个人 Agent 的最佳起点,而不是团队产品的底座。个人场景下,它的限制几乎都不构成问题;而它带来的省心与安全边界,恰好是个人最需要的。等到你真的要服务多用户、要 SLA 的时候,你大概率已经把架构摸清,那时候再决定是继续在 Cloudflare 上加厚,还是搬去自建,都会比现在盲选更靠谱。

十、写在最后:一份可复现的落地顺序

把全文压缩成一条可执行的路径,方便你照着做:

第一步,开通 Workers Paid,确认 R2、Browser Rendering、AI Gateway、Zero Trust 全部可用;第二步,本地装好 wrangler 并登录,记下 Account ID;第三步,克隆 Moltworker 仓库,读完 README 与配置;第四步,创建 R2 bucket 与 AI Gateway,记下标识;第五步,按模板写配置,密钥走 secret,不写进仓库;第六步,dry-run 与本地 dev 验证,再正式 deploy;第七步,用 wrangler tail 验证链路,确认 R2 写入与网关日志;第八步,最后配置 Zero Trust,策略不要写成 Everyone。

部署 Moltworker 本身不难,难的是三件事:理解六个组件为什么这样分工、把成本从 $5 的心态调整到 $34.50 的现实、以及清楚 PoC 与生产之间的那道沟。这三件事想明白了,剩下的都是操作。

十一、常见问题(FAQ)

11.1 Moltworker 部署一定要升级到 Workers Paid 吗?免费计划行不行?

是的,必须升级到 Workers Paid,$5/月起。原因不在于 Worker 本身,而在于 Moltworker 依赖的整套能力——沙箱容器、Browser Rendering、R2 的大量操作——都超出了免费计划的覆盖范围。免费计划可以用来跑一个纯文本的演示 Worker,但无法承载 OpenClaw 的完整运行环境。需要强调的是,$5 是订阅门票,沙箱容器、浏览器会话、R2、模型调用这些都会在基础费之外按用量结算,所以在做 Moltworker 部署预算时,应该按 $34.50 这个持续运行量级来规划,而不是按 $5 来规划。

11.2 部署完成后访问返回 500 或 1101 错误,怎么排查?

先分清是哪一类错误。1101 通常意味着 Worker 代码抛出了未捕获异常,最有效的办法是开一个终端跑 npx wrangler tail,然后复现一次访问,直接在日志里看堆栈。500 则更可能是配置问题,比如绑定名和代码里引用的一致但资源不存在、compatibility_date 与实际能力不匹配、或者密钥没配置导致下游调用鉴权失败。检查顺序建议是:先用 npx wrangler deploy --dry-run 确认配置可解析,再在 Dashboard 确认 R2 bucket 和 AI Gateway 确实存在且名称一致,最后核对 secret 是否全部写完(npx wrangler secret list 只显示名称不显示值,能确认存在性)。

11.3 $34.50 的账单里,最大的变量是什么?怎么控制?

最大的变量有两个:沙箱容器的驻留时长和模型调用量。前者是”占着就在计费”,后者是”说多少字就收多少钱”。控制容器成本的有效手段是缩短闲置回收时间、限制最大实例数;控制模型成本的手段是做分层路由(简单任务用便宜模型)并在 AI Gateway 里开缓存。第二大的变量是 Browser Rendering,它的计费按会话时长,最容易出问题的是”打开页面忘了关”。建议在 Moltworker 部署完成后的第一周,每天都看一下 Dashboard 的用量曲线,把异常峰值和具体任务对应起来,这样你才知道自己的钱到底花在哪。

11.4 能不能不用 Cloudflare 的 AI Gateway,直接让 Agent 调模型 API?

技术上可以,Agent 只要能访问模型接口就行。但从 Moltworker 部署的实践经验看,我强烈建议保留 AI Gateway。原因有三:第一,它是你唯一能看清”模型调用账单”的窗口,没有它,超支之后只能盲猜;第二,它把供应商凭据集中管理,密钥轮换只需要改一处,而不是去翻每个 Worker 的环境变量;第三,它提供了重试与路由能力,后面想切换模型或做降级时不用改业务代码。去掉它省下的钱很少,失去的可观测性代价很大,这笔账不划算。

11.5 Zero Trust 配好之后,外部平台的 Webhook 回调进不来怎么办?

不要为了省事把 Access 策略改成 Everyone,那等于放弃了这层保护。正确做法是给机器访问单独开通道:在 Zero Trust 里创建一个 Access Service Token,拿到 Client ID 和 Client Secret,让调用方在请求头里带上 CF-Access-Client-Id 与 CF-Access-Client-Secret。然后在应用策略里增加一条允许该 Service Token 的规则,且只作用于 Webhook 所在的路径。这样浏览器访问仍然需要人身份验证,机器回调走的是另一条受控通道。这是 Moltworker 部署中安全配置最容易做错的一处,务必在联调阶段就把它验证通。

11.6 如果只是自己一个人用,Moltworker 和自建 VPS 到底怎么选?

给你一个可以直接套用的判断标准:如果你每天调用 Agent 十几次以上、不想花时间管服务器、并且在意入口安全,选 Moltworker,$34.50 花得值;如果用量很小(一天几次)、你能接受偶尔折腾一下 Linux、并且对成本敏感,选一台 $5 的 VPS 更划算。还有一个中间路线值得考虑:先用 Moltworker 做一次 Moltworker 部署,把六个组件的分工、Zero Trust 的配置、AI Gateway 的观测都摸一遍,再决定最终形态。因为这套架构知识是通用的,你学到的东西搬到自建环境里同样有效,而部署一次的成本只有一个月账单。对大多数认真使用 OpenClaw 的人来说,这是性价比最高的路径。

THE END
喜欢就支持一下吧
点赞78 分享
评论 抢沙发
头像-知了AI
欢迎您留下宝贵的见解!
提交
头像-知了AI

昵称

取消
昵称表情代码快捷回复

    暂无评论内容