Files
Sun-ZhenXing c03771751c feat(opensandbox): add initial configuration files and documentation for OpenSandbox platform
feat(elasticsearch): upgrade Elasticsearch version to 9.3.0 in environment and docker-compose files

feat(gitlab): update GitLab version to 18.8.3-ce.0 in environment and docker-compose files

feat(grafana): bump Grafana version to 12.3.2 in environment and docker-compose files

feat(jenkins): upgrade Jenkins version to 2.541-lts-jdk17 in environment and docker-compose files

fix(minio): remove unnecessary newline in docker-compose file

feat(nginx): downgrade Nginx version to 1.28.2-alpine3.22 in environment and docker-compose files

feat(ollama): update Ollama version to 0.14.3 in environment and docker-compose files

feat(prometheus): upgrade Prometheus version to 3.5.1 in environment and docker-compose files

feat(rabbitmq): update RabbitMQ version to 4.2.3-management-alpine in environment and docker-compose files
2026-02-07 18:11:02 +08:00

242 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OpenSandbox
[English](README.md) | 中文
一个通用的 AI 应用沙箱平台,提供多语言 SDK、统一的沙箱 API 以及 Docker/Kubernetes 运行时。适用于代码智能体、GUI 智能体、智能体评估、AI 代码执行和强化学习训练等场景。
## 功能特性
- **多语言 SDK 支持**:提供 Python、JavaScript/TypeScript、Java/Kotlin 和 Go 客户端 SDK
- **统一的沙箱 API**:为沙箱生命周期、命令执行和文件操作提供一致的接口
- **多种运行时选项**:支持 Docker 和 Kubernetes 运行时
- **安全加固**:内置安全特性,包括能力限制、特权提升防护和资源限制
- **灵活的配置**:支持各种网络模式、资源约束和安全配置
- **代码解释器**:预构建的镜像,支持 Python、Node.js、Java 和 Go 内核
## 快速开始
### 前置要求
- Docker EngineDocker 运行时必需)
- Docker Compose
- 足够的权限访问 Docker socket
> **使用 Colima 的 macOS 用户注意**:您需要在启动 OpenSandbox 之前设置 `DOCKER_HOST` 环境变量:
>
> ```bash
> export DOCKER_HOST="unix://${HOME}/.colima/default/docker.sock"
> ```
### 部署
1. **复制环境文件并根据需要配置:**
```bash
cp .env.example .env
```
2. **编辑 `config.toml` 设置您的 API 密钥:**
```toml
[server]
api_key = "your-secret-api-key-change-this"
```
**重要**:在生产环境中必须更改默认的 API 密钥!
3. **启动服务:**
```bash
docker compose up -d
```
4. **验证服务是否运行:**
```bash
curl http://localhost:8080/health
```
您应该收到成功的健康检查响应。
## 配置
### 环境变量
主要环境变量(完整列表见 [.env.example](.env.example)
| 变量 | 描述 | 默认值 |
| ---------------------------------- | -------------------------- | ----------------------------- |
| `OPENSANDBOX_SERVER_VERSION` | OpenSandbox 服务器镜像版本 | `v1.0.5` |
| `OPENSANDBOX_SERVER_PORT_OVERRIDE` | 主机端口映射 | `8080` |
| `DOCKER_HOST` | Docker socket 路径 | `unix:///var/run/docker.sock` |
| `OPENSANDBOX_SERVER_CPU_LIMIT` | CPU 核心限制 | `2.0` |
| `OPENSANDBOX_SERVER_MEMORY_LIMIT` | 内存限制 | `2G` |
### 服务器配置
主配置文件为 [config.toml](config.toml)。主要配置部分:
- **[server]**HTTP 服务器设置主机、端口、日志级别、API 密钥)
- **[runtime]**:运行时类型和 execd 镜像配置
- **[docker]**Docker 特定设置,包括网络模式和安全选项
#### 网络模式
- **bridge**(推荐):容器拥有隔离的网络,支持多个沙箱
- **host**:容器共享主机网络,一次只能运行一个沙箱实例
#### 安全特性
- **能力限制**:从容器中移除危险的 Linux 能力
- **特权提升防护**:阻止容器内的特权提升
- **进程限制**:控制每个沙箱的最大进程数
- **AppArmor/Seccomp 配置文件**:可选的安全配置文件(留空使用 Docker 默认值)
## 使用方法
### 基本沙箱创建Python SDK
```python
from opensandbox import Sandbox
from datetime import timedelta
# 创建一个代码解释器沙箱
sandbox = await Sandbox.create(
"opensandbox/code-interpreter:v1.0.1",
entrypoint="/opt/opensandbox/code-interpreter.sh",
env={"PYTHON_VERSION": "3.11"},
timeout=timedelta(minutes=10)
)
async with sandbox:
# 执行 Python 代码
result = await sandbox.execute(
"python",
"-c",
"print('Hello from OpenSandbox!')"
)
print(result.stdout)
```
### API 认证
所有 API 请求都需要在 `X-API-Key` 头中包含 `config.toml` 中配置的密钥:
```bash
curl -H "X-API-Key: your-secret-api-key-change-this" \
http://localhost:8080/sandboxes
```
## 预构建镜像
OpenSandbox 提供了几个预构建的沙箱镜像:
- **opensandbox/code-interpreter**多语言代码解释器Python、Node.js、Java、Go
- **opensandbox/vscode**VS Code Server 环境
- **opensandbox/desktop**:支持 VNC 的完整桌面环境
- **opensandbox/playwright**:使用 Playwright 进行浏览器自动化
- **opensandbox/chrome**Chromium 浏览器环境
## 端口
| 端口 | 服务 | 描述 |
| ---- | ------------------ | --------------- |
| 8080 | OpenSandbox Server | HTTP API 服务器 |
## 数据持久化
- **opensandbox_data**:服务器数据和状态
## 健康检查
该服务在 `/health` 端点提供内置的健康检查:
```bash
curl http://localhost:8080/health
```
## 安全注意事项
### Docker Socket 访问
此服务需要访问 Docker socket`/var/run/docker.sock`)以创建和管理沙箱容器。这是一个高权限操作。
**安全影响:**
- 具有 Docker socket 访问权限的容器可能会控制主机系统
- 仅在受信任的环境中部署
- 在生产环境中考虑使用 Docker-in-Docker 或 rootless Docker 以获得额外的隔离
**替代方案:**
- 使用 Kubernetes 运行时而不是 Docker 运行时(需要 Kubernetes 集群)
- 使用受限用户权限和资源配额进行部署
### API 密钥安全
- **切勿在生产环境中使用默认 API 密钥**
- 安全存储 API 密钥(例如,使用 Docker secrets、密钥管理器的环境变量
- 定期轮换 API 密钥
- 限制网络暴露(使用防火墙规则、反向代理)
### 资源限制
始终配置适当的 CPU 和内存限制以防止资源耗尽:
```yaml
deploy:
resources:
limits:
cpus: '2.0'
memory: 2G
```
## 故障排除
### Docker Socket 连接问题
**错误**Failed to initialize Docker service
**解决方案**
- 确保 Docker Desktop/Engine 正在运行
- 在使用 Colima 的 macOS 上:设置 `DOCKER_HOST=unix://${HOME}/.colima/default/docker.sock`
- 检查 Docker socket 权限:`ls -l /var/run/docker.sock`
### 健康检查失败
**错误**Health check timeout
**解决方案**
- 检查容器日志:`docker compose logs opensandbox-server`
- 验证服务是否成功启动:`docker compose ps`
- 如果服务需要更多时间初始化,增加 docker-compose.yaml 中的 `start_period`
### 沙箱创建失败
**错误**Failed to create sandbox
**解决方案**
- 确保 execd 镜像可访问:`docker pull opensandbox/execd:v1.0.5`
- 检查可用的系统资源CPU、内存、磁盘空间
- 查看服务器日志以获取详细的错误消息
## 许可证
此项目是 OpenSandbox 套件的一部分。详情请参阅主 [LICENSE](https://github.com/alibaba/OpenSandbox/blob/main/LICENSE) 文件。
## 参考资料
- [OpenSandbox GitHub 仓库](https://github.com/alibaba/OpenSandbox)
- [OpenSandbox 文档](https://github.com/alibaba/OpenSandbox/tree/main/docs)
- [Docker 安全](https://docs.docker.com/engine/security/)
## 支持
如有问题和疑问:
- [GitHub Issues](https://github.com/alibaba/OpenSandbox/issues)
- [官方文档](https://github.com/alibaba/OpenSandbox)