跳到正文
Hacker News· handfuloflight·· 9 天前AI 评分62

open-compute 发布单机自托管 Cloudflare Workers 兼容平台

Open-Compute: Celld Alternative

AI 导读

open-compute 发布一个单机自托管的 Cloudflare Workers 兼容平台,以单个二进制文件 ocd 承载运行时、控制平面、调度器和产品绑定,默认用 SQLite 与本地文件系统存储,S3 兼容存储可选。

正文 · AI 翻译

open-compute

一个二进制文件。一个守护进程。隔离的实例。
一个自托管、兼容 Cloudflare Workers 的单机平台。

CI Apache-2.0 verified workerd fork 2256 stable members and overloads Rust 1.98 macOS | Linux

网站 · 文档 · 兼容性 · 架构

英语 · 简体中文


Workers 平台,运行在你自己的硬件上

你已经知道如何编写 Cloudflare Workers。open-compute 运行兼容的 Workers 编程模型——模块化 workers、熟悉的绑定以及 cf 工作流——在你拥有的一台机器上。

一个二进制文件。一个共享守护进程。每个实例一个对象权威。 本地文件系统是默认选项;兼容 S3 的存储是可选的。

没有 Kubernetes。没有 Redis。没有服务网格。没有需要照看的分布式控制平面。没有供应商锁定。

   Everyone else                        open-compute
   ─────────────                        ────────────
   gateway + router                     ┌──────────────┐
   control plane                        │              │
   scheduler service          ═══>      │  ocd (1 bin) │
   Redis / Valkey cluster               │              │
   Postgres                             └──────────────┘
   K8s + operators                       + SQLite + Local/S3 objects

workerd 是运行时,不是平台。 它出色地执行隔离的 Workers——然后就到此为止。没有多租户路由,没有持久状态,没有调度,没有部署生命周期,没有控制 API。每个想在自己的基础设施上运行 Workers 的人都必须构建那一层。

open-compute 就是那一层——而且它以一个文件的形式交付。

  • 一个二进制文件,一切都在里面。 运行时、控制平面、调度器以及每个产品绑定。把它复制到主机上,指向一个目录,你就在提供流量服务了。
  • 快,因为它是 workerd。 Worker 代码运行在固定版本、经过校验和验证的 workerd 分支上。隔离实例在毫秒内启动——而不是每个请求一个进程或容器。
  • 无需运行其他东西。 SQLite 掌管平台元数据,本地存储默认掌管对象字节。兼容 S3 的存储是可选的;两种模式都不需要数据库或缓存边车。
  • 固定且经过验证。 运行时及其资产在构建和启动时固定并验证。生产启动保持离线。
  • 完全属于你。 你拥有代码、数据和机器。外部服务是可选的,并且需要显式配置。

证据,而非承诺

这里的兼容性是测量出来的,而非断言。在托管 API 允许直接比较的地方,相同的测试夹具会同时针对 open-compute 和真实的 Cloudflare 运行。

2,256 跨 Workers 运行时和产品绑定跟踪的稳定 API 成员和重载
10 与真实 Cloudflare 逐请求比较的产品界面:Workers、Cache、KV、D1、R2、Durable Objects、Queues、Vectorize、AI Search 和 Observability
90%+ 要求的行覆盖率,验收测试中包含真实进程、SQLite 和固定版本的 workerd 运行时

兼容性

使用你已经熟悉的绑定编写标准模块化 workers(export default { fetch })。有关确切行为和单节点差异,请参阅兼容性指南。

运行时与绑定

模块 状态
Workers █████████▉ 99% ✅
Workers 标准限制 █████████▉ 99% ✅
KV █████████▉ 99% ✅
R2 █████████▉ 99% ✅
D1 █████████▉ 99% ✅
Durable Objects █████████▉ 99% ✅
Alarms █████████▉ 99% ✅
Queues █████████▉ 99% ✅
Cron █████████▉ 99% ✅
Workflows █████████▉ 99% ✅
静态资产 █████████▉ 99% ✅
服务绑定 █████████▉ 99% ✅
Cache █████████▉ 99% ✅
Images █████████▉ 99% ✅
版本元数据 █████████▉ 99% ✅
WebSocket 休眠 █████████▉ 99% ✅
Vectorize █████████▉ 99% ✅
Markdown 转换 █████████▉ 99% ✅
AI Search █████████▉ 99% ✅
Artifacts █████████▉ 99% ✅
动态 Workers █████████▉ 99% ✅

管理

界面 状态
Cloudflare v4 API █████████░ 90% — 本地 /client/v4 可与 cf 和官方 SDK 配合使用
cf 固定版本的 1.0.0-beta.12 部署并管理文档中支持的产品
仪表板 ████████░░ 80% — 基于同一 /client/v4 API 构建的运维 UI
Workers 日志 / 实时 tail █████████░ 90% — 日志、查询、仪表板实时 Tail 在单节点上运行

部分

模块 状态
Workers AI ██░░░░░░░░ 20% — 仅 Markdown 转换和 AI Search
浏览器运行 CDP 和托管浏览器、快速操作、DevTools、实时视图和自定义 AI;运维指南

规划中

设计正在进行中;绑定和 API 尚不可部署。

模块 状态
容器 ██░░░░░░░░ 20% — 规划中。

尚未

需要这些能力的上传或配置将失败关闭。

模块 状态
通用 Workers AI 推理 ░░░░░░░░░░ 0% — 尚未。
Hyperdrive ░░░░░░░░░░ 0% — 尚未。
Analytics Engine ░░░░░░░░░░ 0% — 尚未。
Workers for Platforms ░░░░░░░░░░ 0% — 尚未。
Pipelines ░░░░░░░░░░ 0% — 尚未。
Rate Limiting ░░░░░░░░░░ 0% — 尚未。
mTLS 证书 ░░░░░░░░░░ 0% — 尚未。
Tail Workers / traces / Logpush ░░░░░░░░░░ 0% — 尚未。

Cloudflare 的 API 广泛而复杂。99% ✅ 意味着已记录的公共 API 表面完全对齐;它并不承诺每个行为细节都与 Cloudflare 完全相同。 open-compute 仍处于早期阶段。如果你发现与 Cloudflare 不匹配的行为,请提交 issue。单节点差异列在兼容性指南中。实时表面:ocd capabilities --json。

快速开始

使用 AI 编码代理进行设置

将此提示复制到 Codex、Claude Code 或其他编码代理中:

Read https://open-compute.dev/llms.txt and install the current open-compute release on this machine. Configure one local instance, inspect any existing installation first, preserve its configuration and instance data, ask before using sudo or making destructive changes, then run ocd status and report the result.

llms.txt 包含最低限度的设置和使用说明,并在需要时提供详细文档的链接。

手动设置

为你的用户安装发布二进制文件,创建默认的用户自有实例,并启动其登录范围的服务:

curl -fsSL https://open-compute.dev/install.sh | sh
ocd setup --yes
ocd status
ocd dashboard

对于在登录前启动的全主机服务,请显式选择系统范围:

curl -fsSL https://open-compute.dev/install.sh | sudo sh
sudo ocd setup --system --yes

使用 cloudflare.config.ts 和官方 cf + Vite 插件 v2 工作流。Node.js 22.18+ 运行 cf;ocd cf 选择部署目标。CI 固定 cf 1.0.0-beta.12;1.0.x 之外的用户版本仅发出警告:

npm install --save-dev cf@1.0.0-beta.12 @cloudflare/vite-plugin@beta vite typescript
npm run dev
npm run build
ocd cf deploy --prebuilt --mode production

生产环境仍然是一个发布可执行文件和一个共享守护进程,具有显式的每实例配置和数据目录。运行时负载已嵌入并验证;守护进程启动不会下载或搜索 PATH 以获取 workerd。

有关完整的安装路径、远程目标、CI、环境、tail 和回滚,请参阅入门和开发。

架构

open-compute architecture

组件 角色
ocd 控制平面:入口、API、调度器、监督器和部署权威
workerd 固定、校验和验证的 Worker 运行时
SQLite 本地权威状态 — 无外部数据库,无最终一致性
本地 / S3 对象权威 捆绑包、静态资产、R2 字节、Artifacts、快照、备份、缓存主体和 AI 源

租户恰好获得其部署所声明的内容——别无其他。没有 SQLite 或本地对象路径,没有 S3 凭证,没有内部令牌,没有同级租户。在能力层强制执行,而非约定。

用 Rust 构建,为热路径而设计

主机是一个单一的异步 Rust 进程——没有 GC 暂停,没有解释器,没有套接字与你的 Worker 之间的 sidecar 跳转。

  • 全程异步。 tokio 多线程运行时,使用 axum + hyper 服务于两个平面。请求体以 bytes 流式传输,无需缓冲整个负载。
  • unsafe_code = "forbid"。 工作区范围——整个平台都是安全 Rust。加上 missing_docs = "deny"、unused_must_use = "deny" 和 Clippy -D warnings 覆盖所有目标和特性。
  • 为速度而构建的发布版。 完整 LTO、codegen-units = 1、panic = "abort"、剥离符号——一个紧凑的静态链接产物。
  • 进程内状态。 rusqlite 在 ocd 中嵌入 SQLite;事务是函数调用,而非网络往返。外键保持启用,WAL 保持本地所有。
  • 关键之处零拷贝。 已验证的运行时负载是内容寻址的,只物化一次,然后在重启间重用。

具有强制边界的分层 crate

依赖方向在 CI 中检查——架构不会悄悄腐化:

core ── storage ── artifacts ── runtime      (siblings, lower level)
                    └── workers              (may use core/storage/artifacts, never runtime)
                          └── service        (composition root: CLI, HTTP, workerd bridge)

ocd 编译运行时配置,将 workerd 作为受监督的子进程启动,并通过仅限回环通道通信。它负责就绪状态、优雅关闭、重启退避和恢复。

部署是不可变且内容寻址的。workerLoader 键是部署身份,因此晋升和回滚只是移动指针——它们从不改变已在运行的内容。

仪表盘

open-compute Dashboard in dark and light mode

仪表盘管理通过 /client/v4 暴露的计算、存储、AI 和平台资源。它还在注册到当前 ocd 守护进程的实例之间切换。

原生扩展

当 Worker 需要本地硬件、专有库或内部守护进程时,操作员可以注册一个原生扩展:一个带有小型 JavaScript 外观的原生 Provider 进程,通过 cf Service Bindings(bindings.worker + props)暴露给 Workers。

  • 没有新的 Binding 类型。 Workers 看到的是标准的 Service Binding;每个 binding 的 props 携带配置。
  • 直接数据路径。 ocd 验证会话,然后 workerd 和 Provider 通过 Cap'n Proto 直接通信。
  • 故障关闭。 会话身份、提供者路径和平台句柄永远不会进入租户代码、argv 或日志。

扩展教程 引导完成完整设置。仓库还包含一个小型 Rust 参考 Provider。

它不是什么

诚实的边界胜过生产中的意外:

  • 不是 Cloudflare 的全球边缘。 在你运行的基础设施上的一个节点——没有 Anycast,没有跨区域复制,没有 POP 网络。这种权衡正是为你带来强本地一致性的原因。
  • 不是通用的即插即用。 兼容性逐面跟踪,每个偏差都有文档记录,而不是被掩盖。
  • 不是多副本 HA 集群。 一个守护进程、一台机器,以及按设计隔离的每实例权限。

文档

目标 从这里开始
理解设计 架构和项目指南
检查 API 支持 兼容性 · Worker API 索引
跟踪不支持的功能 不可用
构建和部署 Workers 开发
下载和发布 GitHub Releases · 项目指南
在生产中运行 开始使用 · 运维
运维和恢复 运维 · 事件指南
贡献 贡献指南 · 行为准则

安全

使用 SECURITY.md 私下报告漏洞。

  • 每个用户或系统范围一个 ocd,每个实例数据目录都有独占锁。
  • 内部令牌永远不会出现在 argv、环境、日志、状态或指标中。
  • 租户出站可以访问主机可路由的公共、私有、回环、链路本地和元数据 IP;操作员通过主机防火墙、命名空间、容器或 VM 负责目标过滤。

赞助商

本项目由 Lynx AI 赞助。

许可证

Apache-2.0。打包的 open-compute workerd 分支仍受适用的上游 Cloudflare workerd 许可约束。

来源:Hacker News · github.com