Onlyboxes 是一个面向个人与小型团队的自托管代码执行沙箱平台。
系统采用控制面(console)与执行面(worker)分离架构,并同时提供 REST API 与 MCP 接口。
console)+ 执行节点(worker)pythonExec:Python 代码执行terminalExec:有状态终端会话readImage:模型可读的图片[!WARNING]
当前版本中,console (gRPC + HTTP) 不提供内建 TLS/mTLS 支持。
worker默认会拒绝不安全的 console 端点;只有显式设置WORKER_CONSOLE_INSECURE=true才允许明文连接。请将 console 的 HTTP(
:8089)和 gRPC(:50051)端点放在反向代理/网关之后,并对外部流量强制开启 TLS。
在单台机器上部署 console + worker-docker:
curl -fsSL https://onlybox.es/install.sh | bash
安装器将自动完成:
docker compose up -d 启动 consolenormal workerworker-docker release 二进制,默认使用最新版本,也可被 --tag 覆盖可用参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--tag |
最新发布版本 | 可选的 Release 版本覆盖参数 |
--workdir |
$PWD/onlyboxes |
工作目录 |
--yes / -y |
false |
非交互模式,跳过确认 |
--console-http-port |
8089 |
Console HTTP 端口(宿主机侧) |
--console-grpc-port |
50051 |
Console gRPC 端口(宿主机侧) |
--service-name |
onlyboxes-worker-docker |
systemd 服务名称 |
运行要求:Linux、systemd、Docker Engine、Docker Compose v2、Python 3。
worker-docker 依赖)下载 docker-compose.yml 文件:
```bash mkdir -p onlyboxes-console && cd onlyboxes-console wget https://raw.githubusercontent.com/Coooolfan/onlyboxes/refs/heads/main/docker/docker-compose.yml
```
修改 docker-compose.yml,至少替换:
CONSOLE_HASH_KEYCONSOLE_DASHBOARD_PASSWORD启动服务:
bash
docker compose up -d
默认访问地址:
http://127.0.0.1:8089127.0.0.1:50051http://127.0.0.1:8089。


WORKER_SECRET 仅一次可见)。

Open in Startup Tool with Id and Secret 携带 id 与 key 进入启动命令编辑工具
[!WARNING] worker 支持不同运行时与运行环境,当前版本仅提供
worker-docker。本小节以此 docker 运行时为例。
worker-docker 二进制:https://github.com/onlyboxes/onlyboxes/releases/latest将控制台中创建 worker 返回的参数替换到启动命令中,并将最后一行的可执行文件路径替换为你下载的二进制文件。
WORKER_CONSOLE_INSECURE=true 才允许明文连接。```bash
WORKER_CONSOLE_INSECURE=true \ WORKER_CONSOLE_GRPC_TARGET=127.0.0.1:50051 \ WORKER_ID= \ WORKER_SECRET= \ /path/to/onlyboxes-worker-docker ```
online。README/API.zh-CN.md。/mcp 与执行类 API 会按预期返回 401。http://127.0.0.1:8089/mcp,并设置 token,确认可以正常工作。

Q: worker 启动后状态一直是 offline?
A: 检查 worker 的 WORKER_CONSOLE_GRPC_TARGET 是否正确指向 console 的 gRPC 地址,确保网络连通性。
Q: worker 可以部署在控制台所在的机器上吗? A: 可以。
Q: worker 可以使用 docker 部署/运行吗? A: 理论可以。但不推荐,因为 worker 需要访问宿主机的 Docker 守护进程。或者您需要自行解决 docker in docker 的问题。
:8089、:50051 提供强制 TLS 支持。CONSOLE_DB_PATH)。配置参考,了解所有配置项,根据需求调整配置。console)| 环境变量 | 默认值 | 说明 |
|---|---|---|
CONSOLE_HTTP_ADDR |
:8089 |
控制台与 REST API 监听地址 |
CONSOLE_GRPC_ADDR |
:50051 |
Worker 注册 gRPC 监听地址 |
CONSOLE_HASH_KEY |
(必填) | 用于哈希 worker_secret 和访问 token 的 HMAC 密钥 |
CONSOLE_DB_PATH |
./db/onlyboxes-console.db |
SQLite 数据库路径 |
CONSOLE_DB_BUSY_TIMEOUT_MS |
5000 |
SQLite busy timeout |
CONSOLE_TASK_RETENTION_DAYS |
30 |
已完成任务保留天数 |
CONSOLE_ENABLE_REGISTRATION |
false |
是否允许管理员创建非管理员账号 |
CONSOLE_DASHBOARD_USERNAME |
(空) | 仅首次初始化管理员账号时生效 |
CONSOLE_DASHBOARD_PASSWORD |
(空) | 仅首次初始化管理员账号时生效 |
worker-docker)| 环境变量 | 默认值 | 说明 |
|---|---|---|
WORKER_ID |
(必填) | 由 POST /api/v1/workers 下发 |
WORKER_SECRET |
(必填) | 由 POST /api/v1/workers 一次性下发 |
WORKER_CONSOLE_GRPC_TARGET |
127.0.0.1:50051 |
Console gRPC 目标地址 |
WORKER_CONSOLE_INSECURE |
false |
false 表示要求 TLS 端点;仅在需要明文 console gRPC 时设置为 true |
WORKER_HEARTBEAT_INTERVAL_SEC |
5 |
心跳周期 |
WORKER_HEARTBEAT_JITTER_PCT |
20 |
心跳抖动百分比 |
WORKER_PYTHON_EXEC_DOCKER_IMAGE |
ghcr.io/astral-sh/uv:python3.12-bookworm-slim |
pythonExec 运行镜像 |
WORKER_TERMINAL_EXEC_DOCKER_IMAGE |
coolfan1024/onlyboxes-runtime:default |
terminalExec 运行镜像 |
WORKER_TERMINAL_OUTPUT_LIMIT_BYTES |
1048576 |
单路输出流字节上限 |
/api/v1/console/*/api/v1/workers*/api/v1/commands/echo、/api/v1/commands/terminal/api/v1/tasks*POST /mcpcd console
CONSOLE_HASH_KEY=$(openssl rand -hex 32) go run ./cmd/console
yarn --cwd web install
yarn --cwd web dev
前端开发默认地址为 http://127.0.0.1:5178,并将 /api/* 代理到 http://127.0.0.1:8089。
README/API.zh-CN.mdconsole/README/overview.mdworker/worker-docker/README/overview.mdapi/README/proto.mdweb/README.md.github/workflows/package-release.ymlcoolfan1024/onlyboxes:<version> 与 coolfan1024/onlyboxes:latestcoolfan1024/onlyboxes-runtime:<version>-default、<version>-default-cn 与 <version>-lobehub;稳定别名为 default、default-cn、lobehub 和 latest(等同于 default)worker-docker 只有在显式设置 WORKER_CONSOLE_INSECURE=true 时才会走明文连接。:8089)和 gRPC(:50051)放在反向代理/网关之后,对公网或外部链路强制 TLS。WORKER_SECRET 与 token 明文都只在创建时返回一次。console 重启后会失效。$ claude mcp add onlyboxes \
-- python -m otcore.mcp_server <graph>