团队部署
选择部署方式
| 从源码启动 | Docker(单台服务器) | 自行生产部署 | |
|---|---|---|---|
| 命令 | python start.py | python ops/self-host/deploy.py up | 自己运行 Hub |
| 数据库 | SQLite | Compose 里的 PostgreSQL 16 | 你自己的 PostgreSQL |
| 谁能访问 | 本机 | 这台服务器;团队通过你的 HTTPS 代理访问 | 你的团队 |
| 密钥 | 生成在数据目录里 | 生成在 deployment.json 里 | 你的密钥管理或环境配置 |
| 指南 | 从源码启动 | 用 Docker 自部署 | 本页 |
大部分单台服务器的团队用 Docker 启动器就够了。如果你要用自己的进程管理、反向代理和数据库运行 Hub,请看本页。
生产环境要求
设置 SODUWORK_ENV=production 后,以下条件只要有一条不满足,Hub 就会拒绝启动:
| 配置项 | 要求 |
|---|---|
DATABASE_URL | PostgreSQL,例如 postgresql+asyncpg://soduwork:<PASSWORD>@db.example.com:5432/soduwork。不允许使用 SQLite |
ADMIN_PASS | 已设置,且不是公开的默认值 |
AUTH_SECRET | 强随机的签名密钥,不是公开的默认值 |
CORS_ORIGINS | 明确列出来源,不允许 * |
DEVICE_AUTH_COMPAT | false |
HUB_PUBLIC_URL | 用户访问的 HTTPS 地址,例如 https://work.example.com |
开发环境以外,Hub 不会替你生成缺失的密钥。
另外还要设置:
CONNECTOR_OAUTH_KEY,用于加密连接器的授权信息。- 单实例部署时设置
DB_MIGRATION_MODE=auto,启动时自动执行版本化迁移。不要对同一个数据库同时运行两个迁移。
这些值请放在密钥管理工具或环境配置里,不要写进会提交的文件。请使用专用的数据库,以及权限最小的数据库账号。
运行 Hub
cd hub-backend
python -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python -m uvicorn app.main:app --host 127.0.0.1 --port 9080
在 hub-frontend/ 运行 npm ci && npm run build 构建管理端。hub-frontend/dist 存在时,Hub 会在同一个地址提供它。存活检查用 GET /healthz,就绪检查用 GET /readyz。
反向代理
在 Hub 前面放一个 HTTPS 反向代理:
- 把 HTTPS 转发到 Hub 的本机端口。
- 支持 WebSocket 升级,客户端和 Runner 都使用 WebSocket。
- 允许长时间的流式响应和文件上传。
- 公开地址里不要加
/api或凭据。
上线后,通过代理检查登录、文件上传、WebSocket 连接和流式对话。
工作在哪里执行
Hub 不需要运行 Agent。本机工作在各自的客户端里执行,云端工作在登记的执行机上执行(见 Runner 与云端环境)。Docker 部署里设置了 HUB_LOCAL_EXECUTION_ENABLED=false,让 Agent 不在 Hub 容器内运行。
多个 Hub 节点
启动器只部署单节点。多个 Hub 节点需要你自己设计共享的文件存储和协调机制。