技术文档摘要
<a href="./#gh-dark-mode-only" target="_blank">
<img width="100%" src="./assets/microsandbox-banner-xl-dark.png" alt="microsandbox-banner-xl-dark">
</a>
<a href="./#gh-light-mode-only" target="_blank">
<img width="100%" src="./assets/microsandbox-banner-xl.png" alt="microsandbox-banner-xl">
</a>
<div align="center"><b>——— 轻松安全地执行不可信用户/人工智能代码 ———</b></div>
<br />
<div align='center'>
<a href="https://docs.microsandbox.dev" target="_blank">
<img src="https://img.shields.io/badge/documentation-%2300acee.svg?color=ff4500&style=for-the-badge&logo=gitbook&logoColor=white" alt=documentation style="margin-bottom: 5px;"/>
</a>
<a href="https://discord.gg/T95Y3XnEAK" target="_blank">
<img src="https://img.shields.io/badge/discord -%2300acee.svg?color=mediumslateblue&style=for-the-badge&logo=discord&logoColor=white" alt=discord style="margin-bottom: 5px;"/>
</a>
</div>
<div align='center'>
<img src="https://img.shields.io/badge/macos-working-green?style=for-the-badge" alt=macos style="margin-bottom: 5px;"/>
<img src="https://img.shields.io/badge/linux-working-green?style=for-the-badge" alt=linux style="margin-bottom: 5px;"/>
<img src="https://img.shields.io/badge/windows-wip-red?style=for-the-badge" alt=windows style="margin-bottom: 5px;"/>
</div>
<br/>
<img height="20" src="https://octicons-col.vercel.app/package/A770EF"> Microsandbox
Microsandbox 使得在硬件隔离且快速启动的执行环境中运行不可信的工作负载变得简单。
安全地运行不可信代码是困难的。传统的解决方案——容器、虚拟机或云沙箱——各自在速度、隔离或控制方面进行权衡。Microsandbox旨在提供所有这些方面的最佳效果。
[!WARNING]
该项目仍处于实验阶段。请预期会有破坏性更改、缺失的功能以及粗糙的边缘。
<br/>
<img height="18" src="https://octicons-col.vercel.app/sparkle/A770EF"> 关键特性
- <img height="15" src="https://octicons-col.vercel.app/shield-lock/A770EF"> 强隔离:通过 microVMs 实现硬件级别的虚拟机隔离。
- <img height="15" src="https://octicons-col.vercel.app/zap/A770EF"> 即时启动:启动时间低于 200 毫秒。
- <img height="15" src="https://octicons-col.vercel.app/package/A770EF"> OCI 兼容:运行标准容器镜像。
- <img height="15" src="https://octicons-col.vercel.app/home/A770EF"> 自托管:在您的基础设施中独立部署。
- <img height="15" src="https://octicons-col.vercel.app/dependabot/A770EF"> AI 就绪:通过 MCP 无缝集成代理和 AI 工作流。
Microsandbox 被设计为代理网络的执行骨干——快速、安全且灵活。
<br/>
<img height="18" src="https://octicons-col.vercel.app/device-desktop/A770EF"> 演示
<div align='center'>
<h4>沙箱环境</h4>
<video src="https://github.com/user-attachments/assets/23618f92-5897-44d1-bfa6-1058f30c09ef" width="100%" controls></video>
<sup><small><a href="https://asciinema.org/a/itQE92vIJiyq1PAPnaGURzDpv" target="_blank">[ASCIINEMA →]</a></small></sup>
</div>
<div align='center'>
<h4>与 Claude 一起使用</h4>
<img alt="Claude MCP 演示" src="https://gips2.baidu.com/it/u=1144444485,1295508042&fm=3081&app=3081&f=GIF?w=500&h=281" width="100%"></img>
</div>
<br/>
<img height="13" src="https://octicons-col.vercel.app/north-star/A770EF"> 入门指南
前提条件
<img height="14" src="https://octicons-col.vercel.app/download/A770EF"> 1. 下载 microsandbox
curl -sSL https://get.microsandbox.dev | sh
<img height="14" src="https://octicons-col.vercel.app/play/A770EF"> 2. 启动服务器
msb server start --dev
<img height="14" src="https://octicons-col.vercel.app/cache/A770EF"> 3. 拉取环境镜像 [可选]
msb pull microsandbox/python
基础知识
microsandbox 提供了一系列灵活的命令,使其易于管理和访问沙箱,具体如下:
<img height="14" src="https://octicons-col.vercel.app/stopwatch/A770EF"> 临时沙箱
对于实验或一次性任务,临时沙箱提供了干净的环境,在退出时不留痕迹。例如,可以通过运行以下命令基于 microsandbox/python 镜像创建一个沙箱:
msx python # 或 `msb exe --image python`
<img height="14" src="https://octicons-col.vercel.app/pause/A770EF"> 系统范围的沙箱
这提供了运行长期存在的沙箱的选项,这些沙箱会自动设置为系统范围内的可执行文件。这也使得频繁使用的沙箱非常方便访问——无需导航到特定目录或记住复杂的命令。
msi python py-data # 或 `msb install --image alpine py-data`
py-data # 从任何目录运行沙箱
如果未指定别名,则默认使用镜像名称。在上述示例中,这将是 python。如果存在具有相似名称的沙箱,则会返回错误。
[!TIP]
运行 msb <子命令> --help 查看子命令的所有可用选项。
例如,msb add --help。
<br/>
<img height="18" src="https://octicons-col.vercel.app/package-dependencies/A770EF"> SDK <sup><sup>BETA</sup></sup>
<img height="14" src="https://octicons-col.vercel.app/move-to-bottom/A770EF"> 1. 安装 SDK
查看未来语言支持的开放问题。
| 语言 | 指令 |
|---|
| Python | pip install microsandbox |
| Rust | cargo add microsandbox |
| JavaScript | npm install microsandbox |
<img height="14" src="https://octicons-col.vercel.app/file-binary/A770EF"> 2. 执行代码
第一次运行会拉取环境镜像,因此会花费一些时间。您可以提前拉取镜像以实现即时运行。有关如何使用 SDK 的更多信息,请参阅 SDK 说明。
Python
import asyncio
from microsandbox import PythonSandbox
async def main():
async with PythonSandbox.create(name="test") as sb:
exec = await sb.run("name = 'Python'")
exec = await sb.run("print(f'Hello {name}!')")
print(await exec.output()) # 输出 Hello Python!
asyncio.run(main())
JavaScript
import { NodeSandbox } from "microsandbox";
async function main() {
const sb = await NodeSandbox.create({ name: "test" });
try {
let exec = await sb.run("var name = 'JavaScript'");
exec = await sb.run("console.log(`Hello ${name}!`)");
console.log(await exec.output()); // 输出 Hello JavaScript!
} finally {
await sb.stop();
}
}
main().catch(console.error);
Rust
use microsandbox::{SandboxOptions, PythonSandbox};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let options = SandboxOptions::builder().name("test").build();
let mut sb = PythonSandbox::create(options).await?;
let exec = sb.run(r#"name = "Python""#).await?;
let exec = sb.run(r#"print(f"Hello {name}!")"#).await?;
println!("{}", exec.output().await?); // 输出 Hello Python!
sb.stop().await?;
Ok(())
}
<br/>
<img height="18" src="https://octicons-col.vercel.app/space/A770EF"> 项目沙箱 <sup><sup>BETA</sup></sup>
除了 SDK 之外,microsandbox 支持基于项目的开发,采用开发者熟悉的包管理器工作流程。可以将其视为 npm 或 cargo,但针对的是沙箱!
快速演示
<div align="center">
<a href="https://asciinema.org/a/7eOFf2Ovigi473FsKgr3Lpve1" target="_blank"><img src="https://github.com/user-attachments/assets/3a9d1de4-2370-4d5a-a40d-9aa7315aa934" width="100%"/></a>
</div>
设置指南
<img height="14" src="https://octicons-col.vercel.app/plus-circle/A770EF"> 1. 创建沙箱项目
每个沙箱项目都需要一个位于项目目录根部的文件 Sandboxfile,作为您沙箱环境的配置清单。要初始化一个,运行:
msb init
<img height="14" src="https://octicons-col.vercel.app/file-added/A770EF"> 2. 在项目中添加一个沙箱
继续在您的 Sandboxfile 中注册一个新的名为 app 的 python 沙箱。
msb add app \
--image python \
--cpus 1 \
--memory 1024 \
--start 'python -c "print(\"hello\")"'
<img height="14" src="https://octicons-col.vercel.app/codescan/A770EF"> 3. 检查 Sandboxfile
新创建的沙箱 app 应该已注册在您的 Sandboxfile 中。如果之前已有 Sandboxfile,则会被追加到其中。它应该类似于这样:
sandboxes:
app:
image: python
memory: 1024
cpus: 1
scripts:
start: python -c "print(\"hello\")"
<img height="14" src="https://octicons-col.vercel.app/zap/A770EF"> 4. 运行项目定义的沙箱
接下来是运行项目中定义的沙箱。这将执行沙箱的默认 start 脚本。为了更多控制,可以直接指定要运行的脚本,例如 msr app~start。
msr app # 或 `msb run --sandbox app`
当运行项目沙箱时,所有在沙箱内所做的文件更改和安装都会自动保存到 ./menv 目录中。这意味着您可以随时停止并重新启动沙箱而不丢失工作。您的开发环境将完全保留您离开时的状态。
<br/>
<img height="18" src="https://octicons-col.vercel.app/light-bulb/A770EF"> 卸载
要卸载 microsandbox,请运行:msb self uninstall。使用 --force 标志。这将删除 $HOME/.microsandbox 目录及其所有内容,有效地清理所有缓存的 microsandbox 数据,如镜像、层和数据库。
参考 维护文档 获取其他类型的清理方法。
<br/>
<img height="18" src="https://octicons-col.vercel.app/light-bulb/A770EF"> 用例
想知道如何在下一个项目中使用 microsandbox,请查看我们的示例 用例。
<br/>
<img height="18" src="https://octicons-col.vercel.app/gear/A770EF"> 贡献
有兴趣为 microsandbox 做贡献吗?请查阅我们的 开发指南,了解如何设置开发环境、构建项目、运行测试和创建发布。关于贡献指南,请参阅 CONTRIBUTING.md。
<br/>
<img height="18" src="https://octicons-col.vercel.app/law/A770EF"> 许可
本项目根据 Apache 许可证 2.0 授权。
<br/>
<img height="18" src="https://octicons-col.vercel.app/heart/A770EF"> 致谢
特别感谢所有帮助我们每天改进 microsandbox 的贡献者、测试者和社区成员!我们要感谢以下项目和社区,它们使 microsandbox 成为可能: