E2B Bridge 运行时

worker-bridge-e2b 将 OnlyBoxes 控制节点连接到远程 E2B 沙箱。worker 在本地管理 session 与任务分发,由 E2B 提供实际执行环境。

适用场景

  • 希望使用托管的远程沙箱,不在 worker 主机上运行 Docker 或 KVM
  • 需要为 Python 与终端任务准备不同的 E2B 模板
  • 可以接受远程执行带来的网络延迟和外部服务依赖

工作原理

  1. Worker 通过 gRPC 连接 OnlyBoxes 控制节点。
  2. Worker 通过 E2B Control API 创建、续期和销毁沙箱。
  3. 命令执行和文件读取通过沙箱内的 envd 完成。
  4. pythonExec 每次请求使用一个新沙箱;terminalExec 会话在租约到期前复用同一沙箱。

前置条件

  • E2B API Key
  • 提供 Python 和 uv 的 E2B Python 模板
  • 提供 /bin/bashpython3 的 E2B 终端模板
  • 能够访问 OnlyBoxes 控制节点与 E2B 端点

启动 worker

GitHub Releases 页面 下载与系统架构匹配的 worker-bridge-e2b 二进制,然后运行:

WORKER_CONSOLE_GRPC_TARGET=<console_grpc_target> \
WORKER_ID=<worker_id> \
WORKER_SECRET=<worker_secret> \
WORKER_E2B_API_KEY=<e2b_api_key> \
WORKER_E2B_PYTHON_TEMPLATE=<python_template_id_or_alias> \
WORKER_E2B_TERMINAL_TEMPLATE=<terminal_template_id_or_alias> \
./onlyboxes-worker-bridge-e2b

worker 默认要求 TLS。只有在可信的明文开发链路中才应设置 WORKER_CONSOLE_INSECURE=true

配置文件

设置 WORKER_CONFIG_FILE 可以显式指定 config.toml;未设置时,worker 会依次查找程序文件同目录和当前工作目录下的 config.toml

配置优先级为:WORKER_* 环境变量、E2B 兼容环境变量别名、config.toml、内置默认值。

id = "wk_..."
secret = "..."
console_grpc_target = "console.internal:50051"
e2b_api_key = "..."
e2b_python_template = "python-template"
e2b_terminal_template = "terminal-template"
terminal_max_active_sessions = 0

[labels]
region = "cn"

全部配置项见带注释的配置模板

环境变量

连接与身份

变量必填默认值说明
WORKER_IDDashboard 中的 Worker ID
WORKER_SECRET创建 worker 时的一次性密钥
WORKER_CONSOLE_GRPC_TARGET127.0.0.1:50051控制节点 gRPC 地址
WORKER_CONSOLE_INSECUREfalse仅在可信环境中设为 true 以允许非 TLS 连接
WORKER_NODE_NAME自动生成可读的节点名称
WORKER_LABELSJSON 或逗号分隔的 key=value 标签

E2B

变量必填默认值说明
WORKER_E2B_API_KEYE2B Control API Key;别名:E2B_API_KEY
WORKER_E2B_PYTHON_TEMPLATEpythonExec 使用的模板;别名:E2B_PYTHON_EXEC_TEMPLATE
WORKER_E2B_TERMINAL_TEMPLATE终端 session 使用的模板;别名:E2B_TERMINAL_EXEC_TEMPLATE
WORKER_E2B_API_URLhttps://api.e2b.appControl API 基础 URL;别名:E2B_API_URL
WORKER_E2B_DOMAINe2b.app沙箱域名后缀;别名:E2B_DOMAIN
WORKER_E2B_SANDBOX_URL覆盖 envd 基础 URL;别名:E2B_SANDBOX_URL
WORKER_E2B_REQUEST_TIMEOUT_SEC60Control API 与 envd 建连超时
WORKER_E2B_PYTHON_TIMEOUT_SEC300一次性 Python 沙箱的生命周期;别名:E2B_SANDBOX_TIMEOUT_SEC

终端

变量必填默认值说明
WORKER_TERMINAL_LEASE_MIN_SEC60请求可指定的最短 session 租约
WORKER_TERMINAL_LEASE_MAX_SEC1800请求可指定的最长 session 租约
WORKER_TERMINAL_LEASE_DEFAULT_SEC300默认 session 租约
WORKER_TERMINAL_OUTPUT_LIMIT_BYTES1048576每路输出流与文件读取的大小限制
WORKER_TERMINAL_EXPORT_MAX_BYTES0(无限制)导出文件大小上限
WORKER_TERMINAL_EXPORT_MODEsandboxsandbox 由 E2B 直接上传;worker 由 worker 转发文件
WORKER_TERMINAL_SESSION_MAX_INFLIGHT128单个 session 允许的并发操作数
WORKER_TERMINAL_MAX_ACTIVE_SESSIONS0(无限制)当前 worker 进程管理的 terminal session 数量上限

Worker 会声明仅供 Console 内部使用的 terminalLeaseRenew 能力。它接收 {"session_id":"required","lease_ttl_sec":300},以单调方式延长已有租约、同步 E2B sandbox timeout,并在不执行命令的情况下返回确认后的绝对到期时间。该能力拥有独立的 max_inflight,其声明值取自 WORKER_TERMINAL_EXEC_MAX_INFLIGHT 配置。

WORKER_TERMINAL_MAX_ACTIVE_SESSIONS 与单 session 和 capability 并发上限相互独立。0 表示不限制;正数会统计创建中、可用、销毁中以及 E2B cleanup 进行中的 session。容量已满时已有 session 仍可使用,新建 session 返回 429 session_capacity_exceeded。该限制只作用于当前 worker 进程,不是同一 E2B API Key 下所有 worker 的全局配额;负数或非法值回退为 0

终端命令共享沙箱文件系统,但每次调用都在独立的 /bin/bash -l -c 进程中执行,不会在调用之间保留当前目录、shell 变量或进程环境。

能力并发

变量必填默认值说明
WORKER_ECHO_MAX_INFLIGHT128echo 并发调用数
WORKER_PYTHON_EXEC_MAX_INFLIGHT32pythonExec 并发调用数
WORKER_TERMINAL_EXEC_MAX_INFLIGHT64terminalExec 并发调用数
WORKER_TERMINAL_RESOURCE_MAX_INFLIGHT128terminalResource 并发调用数

心跳与日志

变量必填默认值说明
WORKER_HEARTBEAT_INTERVAL_SEC5心跳间隔秒数
WORKER_HEARTBEAT_JITTER_PCT20心跳抖动百分比
WORKER_CALL_TIMEOUT_SECceil(2.5 * interval)console hello 与心跳确认超时
WORKER_LOG_LEVELinfodebug / info / warn / error
WORKER_LOG_FORMATjsonjson / text
WORKER_LOG_ADD_SOURCEfalse是否包含源文件和行号

相关文档