自建 E2B 实战:用阿里云计算巢搭建 AI Agent 沙箱

简介: 基于阿里云计算巢自建 E2B,图文演示集群部署、沙箱生命周期、模板构建、Computer Use 与弹性伸缩,帮助 AI Agent 接入自己的云上执行环境。

E2B 为 AI Agent 提供可按需创建的隔离执行环境。

本文基于阿里云计算巢,从 0 部署 E2B 集群版,并依次完成集群检查、Sandbox 与 Template 调用、Computer Use 验证以及扩缩容配置。

计算巢自动化交付 E2B 集群的六个步骤

一、E2B 简介

E2B(Environment to Build) 是一个面向 AI Agent、编程助手和自动化测试等场景的开源云端沙箱引擎。每个 Sandbox 运行在独立的 Firecracker microVM 中,用于隔离和执行不可信代码。

核心特性

  • 🔒 安全隔离:基于 Firecracker microVM,每个 Sandbox 拥有独立内核并通过 KVM 实现硬件虚拟化隔离;沙箱内可授予 root 权限,但不会直接获得宿主机权限。
  • ⚡ 毫秒级启动:从预构建的 VM 快照恢复,跳过镜像拉取和环境初始化,并结合 userfaultfd 按需加载内存页,实现快速启动。
  • ⏸️ 暂停与恢复:Pause 会保存内存、磁盘和 CPU 状态并释放沙箱计算资源,快照异步上传至 OSS;Resume 可恢复文件系统、内存和运行中的进程,但外部网络连接需要重新建立。
  • 📈 弹性伸缩:API Worker 与 Client Worker 独立部署,通过阿里云 ESS 按需扩缩容;Client Worker 可选择弹性裸金属服务器或支持嵌套虚拟化的 ECS。
  • 📦 模板系统:支持通过 Docker 镜像或自定义 Dockerfile 构建 Template,预置代码执行、桌面操作等模板,也可按业务需求自定义。
  • 🔌 多端 SDK:提供 Python SDK、TypeScript SDK 和 CLI,兼容 E2B 开源 API,可集成到 Agent 应用中。

二、E2B 集群版整体架构

本文使用的计算巢 E2B 集群版基于官方 E2B 2026.29 版本适配构建,对应阿里云发行版本 2026.29.aliyun.1。下文截图和示例以该版本为基础,实际界面与配置以部署版本为准。

E2B 集群版主要由 Server、API Worker 和 Client Worker 三类节点组成:Server 负责集群管理与任务调度,API Worker 对外提供 API 和 Dashboard,Client Worker 负责创建并运行 Sandbox。RDS、Redis 和 OSS 分别为集群提供数据存储、缓存和对象存储。

阿里云计算巢自建 E2B 集群版架构

Agent 通过 SDK 或 CLI 调用 API,请求由 API Worker 处理后交给 Client Worker,最终在 Firecracker microVM 中启动 Sandbox。API Worker 与 Client Worker 分别由独立的 ESS 伸缩组管理,可以根据 API 请求量和 Sandbox 容量分别扩容。

三、🚀 部署流程

前置条件

⚠️ 已开通阿里云账号,并具备 ECS、RDS、Redis、VPC 等资源的创建权限。

1. 一键创建实例

访问计算巢 E2B 社区版创建页面,选择集群版,然后按照页面顺序完成以下配置。

选择计算巢 E2B 集群版并配置服务实例

可以选择弹性裸金属服务器,或支持嵌套虚拟化的 ECS 部署 E2B:

  • 弹性裸金属服务器:原生提供硬件虚拟化能力。
  • 普通 ECS:必须选择支持嵌套虚拟化的实例规格,并提前开通该能力。

⚠️ 注意:部署前请确认实例规格支持嵌套虚拟化,并已满足相应开通条件,否则可能导致部署失败。支持范围与开通方式请参见为 ECS 实例开启嵌套虚拟化功能。

配置 E2B 集群资源与实例规格

2. 确认资源配置

系统将自动生成费用预估明细。确认配置无误后,点击 下一步:确认订单,核对信息后点击 立即创建。

⚠️ 注意:E2B 需要使用域名进行访问。您可以根据使用场景配置公网或内网访问:

  • 公网访问:准备域名、DNS 解析和 TLS 证书,并确保公网入口可达。
  • 内网调试:配置内网或本地域名解析及对应证书,通过可达 VPC 的客户端调用。

API 域名和动态 Sandbox 子域名都需要正确解析。使用自签证书时,客户端需信任对应 CA;是否能从公网访问取决于网络和 DNS 配置。

生成 TLS 证书:生成方式可参考计算巢 E2B 部署文档。

🕐 部署过程约需 10~20 分钟,实际耗时取决于资源创建和初始化进度。

四、部署成功后的检查

1. 获取访问地址与凭证

部署完成后,在计算巢控制台的实例详情页查看输出,其中比较重要的是 E2B 根域名与 API Key,并分别配置到以下环境变量:

  • E2B_DOMAIN
  • E2B_API_KEY

这两个内容用于通过 SDK 访问 E2B 集群。服务实例输出中的字段名称以实际版本为准。

计算巢服务实例输出与访问入口

2. 登录 E2B Dashboard

点击 DashboardUI,使用计算巢输出的账号与密码登录。本文版本预置邮箱为 admin@e2b.com,初始化密码以实例输出为准。

使用计算巢输出的预置账号登录 E2B Dashboard

登录后先查看 Sandboxes 页面。这里可以观察当前存活的 Sandbox 数、每秒启动速率、历史峰值和并发曲线。

E2B Dashboard 的 Sandboxes 监控页面

然后进入 Templates,确认 base、code-interpreter-v1、browser-use、desktop 等需要使用的 Template 已经构建完成。

E2B Dashboard 中可用的 Sandbox Templates

3. 通过 Nomad 检查 Jobs

通过计算巢提供的安全代理打开 NomadUI,使用计算巢输出的 NomadToken 登录,检查 Jobs 是否都正常运行:

通过 Nomad 检查集群 Jobs

五、使用自建 E2B 跑通核心用例

部署检查完成后,分别验证 Sandbox 生命周期、Template 构建链路和 Computer Use。

先安装 SDK,并配置连接信息:

python -m pip install "e2b==2.30.0" "e2b-desktop==2.4.1"

export E2B_DOMAIN="<your-domain>"
export E2B_API_KEY="e2b_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# 仅在自建环境使用自签 CA 时需要
export SSL_CERT_FILE="/path/to/ca-fullchain.pem"

已安装 E2B CLI 时,还可以查看模板与沙箱列表:

e2b template list
e2b sandbox list

用例一:演示 Sandbox 完整生命周期

使用预置的 base Template,依次演示创建、执行命令、暂停、恢复和删除。恢复后再次读取暂停前写入的文件,用于确认 Sandbox 状态已正确保留:

import os

# 使用自签 CA 时,在启动 Python 前配置 SSL_CERT_FILE。
from e2b import Sandbox

connection = {
   
    "domain": os.environ["E2B_DOMAIN"],
    "api_key": os.environ["E2B_API_KEY"],
}

sandbox = Sandbox.create(
    template="base",
    timeout=60,
    **connection,
)
sandbox_id = sandbox.sandbox_id

try:
    print('[1/5] 创建 sandbox:', sandbox_id)
    result = sandbox.commands.run(
        'printf "hello from my own E2B" | tee /tmp/lifecycle.txt'
    )
    print("[2/5] 执行命令")
    print("  stdout:", result.stdout)

    print("[3/5] 暂停 Sandbox")
    print("  paused:", sandbox.pause())

    print("[4/5] 恢复 Sandbox")
    sandbox = Sandbox.connect(sandbox_id, timeout=60, **connection)
    result = sandbox.commands.run("cat /tmp/lifecycle.txt")
    print("  resumed_stdout:", result.stdout)
finally:
    Sandbox.kill(sandbox_id, **connection)
    print("[5/5] 删除 sandbox:", sandbox_id)

正常输出类似:

[1/5] 创建 sandbox: xxx
[2/5] 执行命令
  stdout: hello from my own E2B
[3/5] 暂停 Sandbox
  paused: True
[4/5] 恢复 Sandbox
  resumed_stdout: hello from my own E2B
[5/5] 删除 sandbox: xxx

Sandbox.connect() 会在目标 Sandbox 处于暂停状态时自动将其恢复。脚本运行期间可以在 Dashboard 中观察状态变化,并查看事件、日志、终端和文件系统;脚本退出后,Sandbox 应从运行列表中消失。

在 Dashboard 中查看 Sandbox 生命周期与执行状态

这个用例验证了完整生命周期链路:Create → Command → Pause → Resume → Kill。

用例二:构建 Template,并从 Template 创建 Sandbox

Template 用于固化基础镜像、依赖、文件、环境变量和启动命令。以下示例创建一个临时 Template,构建完成后再从它创建 Sandbox:

import os

from e2b import Sandbox, Template, default_build_logger, wait_for_timeout

connection = {
   
    "domain": os.environ["E2B_DOMAIN"],
    "api_key": os.environ["E2B_API_KEY"],
}

template_name = "demo"

template = (
    Template()
    .from_base_image()
    .set_envs({
   "HELLO": "hello from my own template"})
    .set_start_cmd('echo "$HELLO"', wait_for_timeout(1_000))
)

build = Template.build(
    template,
    template_name,
    cpu_count=2,
    memory_mb=2048,
    on_build_logs=default_build_logger(),
    **connection,
)

print("template_id:", build.template_id)
print("build_id:", build.build_id)

sandbox = Sandbox.create(template=template_name, timeout=120, **connection)
try:
    result = sandbox.commands.run("printf 'template sandbox is ready'")
    print("sandbox_id:", sandbox.sandbox_id)
    print("stdout:", result.stdout)
finally:
    sandbox.kill()

构建过程中可以在 Templates / Builds 查看状态与日志。

在 Dashboard 中查看 Template 构建状态

用例三:创建 Computer Use 桌面

e2b-desktop 在 Sandbox 生命周期上封装了桌面、鼠标键盘和 VNC Stream。以下示例创建一个 Desktop Sandbox,启动带临时密码的 noVNC 服务,并输出可以在浏览器中打开的 URL:

import os

from e2b_desktop import Sandbox

connection = {
   
    "domain": os.environ["E2B_DOMAIN"],
    "api_key": os.environ["E2B_API_KEY"],
}

desktop = Sandbox.create(
    template="desktop",
    resolution=(1024, 720),
    dpi=96,
    timeout=300,
    **connection,
)

try:
    desktop.stream.start(require_auth=True)
    auth_key = desktop.stream.get_auth_key()
    stream_url = desktop.stream.get_url(auth_key=auth_key)

    # 执行一次真实桌面动作:打开网页并移动鼠标。
    desktop.open("https://example.com")
    desktop.wait(2_000)
    desktop.move_mouse(512, 360)

    print("View desktop at:", stream_url)
    print("screen_size:", desktop.get_screen_size())
    print("cursor_position:", desktop.get_cursor_position())
    input("在浏览器中打开 URL,验证完成后按回车清理资源:")
finally:
    try:
        desktop.stream.stop()
    finally:
        desktop.kill()

在浏览器中打开 stream_url,即可查看并操作 Sandbox 中的 Linux 桌面,验证完整的 Computer Use 链路。

通过浏览器查看并操作 Sandbox 桌面

六、⚖️ 扩缩容配置

E2B 集群版基于阿里云弹性伸缩(ESS)实现 API Worker 和 Client Worker 节点的动态扩缩容,以应对不同的负载需求。

手动扩缩容

本文版本部署完成后,系统预置以下四条弹性伸缩规则,可在阿里云 ESS 控制台手动执行:

规则名称 作用 调整数量
api-scaling-out API Worker 扩容 +1
api-scaling-in API Worker 缩容 -1
client-scaling-out Client Worker 扩容 +1
client-scaling-in Client Worker 缩容 -1

操作步骤:

  1. 进入阿里云计算巢实例详情页,点击 资源 Tab,筛选“弹性伸缩:伸缩组”。

从计算巢资源列表找到伸缩组

  1. 找到对应的伸缩组(client 或 api)。
  2. 进入 伸缩规则 页面,选择对应规则点击 执行。

在 ESS 中执行扩缩容规则

自动扩缩容!

本文版本的自动扩缩容规则如下,实际阈值和启用状态以服务实例配置为准:

  • 伸缩组平均内存使用率连续 1 分钟达到 75% 时,新增 1 台 ECS;
  • 伸缩组平均 CPU 使用率连续 2 分钟达到 70% 时,新增 1 台 ECS;
  • 伸缩组平均内存使用率连续 10 分钟低于 30% 时,缩容 1 台 ECS(默认不开启)。

七、总结

基于阿里云计算巢部署的 E2B 集群版,提供隔离、快速、可弹性扩展的 Sandbox 运行环境。Firecracker microVM 负责隔离不可信代码,快照机制支持快速启动和状态保存,ESS 则提供节点弹性伸缩能力。

本文完成了从集群部署、Dashboard 与 Nomad 检查,到 Sandbox 生命周期、Template 构建和 Computer Use 桌面验证的完整实践,并介绍了扩缩容配置。

如果你正在构建 AI Agent、AI 编程助手、在线代码执行平台,或有执行不可信代码的需求,可以通过计算巢部署 E2B 集群,快速开始验证和接入。有任何问题或建议,欢迎交流。

参考

如果您有任何反馈或疑问,欢迎加入 计算巢 E2B 用户交流群(钉钉群号:198895003834),与工程师即时沟通。

相关文章
|
1月前
|
人工智能 监控 安全
零代码改造:让 AI Agent Sandbox 不再是黑盒
OBI 基于 eBPF 在内核与库函数层零代码拦截通信,自动生成调用链与指标,内置 OpenAI、Anthropic、Gemini、Qwen 及自定义 LLM 网关的 GenAI 语义追踪,覆盖 LLM、工具、MCP 与 RAG 全链路,从性能、成本、安全三个维度透视沙箱执行。
332 10
|
人工智能 安全 Apache
QwenPaw:你的私人 AI 助理 —— 数据归你、记忆进化、多端触达的开源个人智能体
QwenPaw 是一款开源、本地优先的AI个人智能体(Apache 2.0),数据归属用户、记忆自主进化、支持钉钉/飞书/微信等多端触达。3行命令即可部署,内置Coding IDE、Persona人格、定时任务、MCP工具生态与多Agent协作,真正属于你的私有AI助理。
QwenPaw:你的私人 AI 助理 —— 数据归你、记忆进化、多端触达的开源个人智能体
|
25天前
|
存储 人工智能 运维
自建 E2B 进阶:预热池、存储与运维
介绍计算巢自建 E2B 的预热池、OSS 挂载、用户工作区、集群监控与钉钉告警,结合并发创建实测和控制台操作,展示 AI Agent 沙箱的配置与使用方法。
自建 E2B 进阶:预热池、存储与运维
|
4月前
|
JSON Java 中间件
【AgentScope Java新手村系列】(13)工具分组
工具分组 — Toolkit 注册全量工具,ToolsConfig 按 allow/deny 精确匹配过滤,同一套工具两个角色两个视野。
488 2
|
3月前
|
运维 Java Linux
阿里云计算巢MC我的世界服务器零基础搭建全教程,Java/基岩双版本一键部署实操指南
《我的世界》凭借自由创造、多人联机、海量模组拓展的核心玩法,长期拥有庞大玩家群体,但绝大多数玩家尝试家用电脑搭建联机服时都会遇到难以解决的痛点:家用宽带无公网IP、上行带宽极低、多人同时在线卡顿严重、电脑关机服务器直接下线、内网穿透工具不稳定频繁掉线。想要稳定和全国各地好友长期联机,云服务器是最优解决方案。2026年阿里云依托计算巢平台上线我的世界专属一键部署服务,无需编写代码、无需手动配置Java运行环境、不用调试防火墙端口,全程可视化点击操作,零基础游戏玩家几分钟即可搭建专属稳定MC服务器,同时完整兼容Java原版、模组整合包、基岩版三大主流游戏类型,搭配10M不限流量BGP多线带宽
787 0
|
3月前
|
存储 弹性计算 运维
阿里云账号:服务器轻量应用服务器和ECS有什么区别!
本文由阿里云官方授权代理商零度云撰写,用通俗比喻与五大维度对比,深度解析轻量应用服务器(精装公寓)与云服务器ECS(毛坯别墅)的本质区别:定位、带宽计费、网络隔离、存储可靠性及运维门槛。附真实场景选型指南与3步决策树,助开发者、创客及中小企业按需选择,避免踩坑。
|
3月前
|
人工智能 自然语言处理 安全
2026企业级Agent平台深度解析
2026年是企业级AI智能体规模化落地关键年。瓴羊AgentOne平台以“大模型×好数据×强场景”为核心,提供低代码编排、全栈安全与生态集成能力,内置20+开箱即用Agent,覆盖营销、客服、分析等全链路场景,助力企业高效构建智能经营体系。(239字)
|
3月前
|
中间件 Java API
【AgentScope Java新手村系列】(17)长期记忆系统
长期记忆 — 废弃 LongTermMemory,改用 MEMORY.md + Compaction 压缩 + MemoryFlush 冲刷 + @Tool 主动写。三层机制互补,框架自动维护,业务方按需定制。
602 0
|
4月前
|
缓存 前端开发 JavaScript
阿里云 OSS 实战:从零搭建静态网站托管 + CDN 加速完整指南
本文分享阿里云OSS+CDN托管静态站点的实战方案:省去服务器运维,提升国内访问速度至50ms内;涵盖Bucket配置、SPA路由适配、自动化部署(CLI/GitHub Actions)、HTTPS与CDN缓存策略,并附成本估算(约¥18/月)和常见坑点解析,适合前端开发者快速落地。
1306 0

热门文章

最新文章