跳到主要内容

Terminals(编排层)

Terminals 是面向 Open Terminal 的企业级编排层。它会为每个用户分配一个完全隔离的 terminal 容器,而不是让所有人共享一个容器。

快速导航

工作原理

  1. 用户在 OPL 数据空间中启用 terminal
  2. OPL 数据空间把请求转给 orchestrator
  3. orchestrator 为该用户创建一个 Open Terminal 容器,或者恢复已有容器
  4. 所有流量都经由 orchestrator 代理,用户不会直接连到容器
  5. 空闲容器可按策略自动清理,数据可选持久化

它同时暴露与 Open Terminal 相同的工具接口,因此 AI 仍然能像平时一样执行命令、读文件、跑代码,只不过现在这些能力都被限定在“当前用户自己的容器”里。

部署

前置条件

用 Docker Compose 快速启动

下面这个 Compose 文件会同时部署 OPL 数据空间和 Terminals orchestrator:

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    ports:
      - "3000:8080"
    environment:
      - >-
        TERMINAL_SERVER_CONNECTIONS=[{
          "id": "terminals",
          "name": "Terminals",
          "enabled": true,
          "url": "http://terminals:3000",
          "key": "${TERMINALS_API_KEY}",
          "auth_type": "bearer"
        }]
    depends_on:
      - terminals

  terminals:
    image: ghcr.io/open-webui/terminals:latest
    environment:
      - TERMINALS_BACKEND=docker
      - TERMINALS_API_KEY=${TERMINALS_API_KEY}
      - TERMINALS_IMAGE=ghcr.io/open-webui/open-terminal:latest
      - TERMINALS_NETWORK=open-webui-network
      - TERMINALS_IDLE_TIMEOUT_MINUTES=30
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

.env 文件示例:

TERMINALS_API_KEY=change-me-to-a-strong-random-value

启动:

docker compose up -d

部署完成后, OPL 数据空间会在 http://localhost:3000 可用。用户激活 terminal 时,orchestrator 会自动为其创建独立容器。

Docker socket 访问

orchestrator 需要通过 /var/run/docker.sock 管理容器。生产环境建议配合 Docker socket proxy 来收窄权限。

常见配置项

变量默认值说明
TERMINALS_BACKENDdocker当前部署模式
TERMINALS_API_KEYOPL 数据空间与 orchestrator 共享密钥
TERMINALS_IMAGEghcr.io/open-webui/open-terminal:latest用户 terminal 的默认镜像
TERMINALS_PORT3000orchestrator 监听端口
TERMINALS_HOST0.0.0.0orchestrator 监听地址
TERMINALS_NETWORK用户容器所加入的 Docker 网络
TERMINALS_DOCKER_HOST127.0.0.1TERMINALS_NETWORK 时用于 published ports
TERMINALS_DATA_DIRdata/terminals每用户工作目录数据位置
TERMINALS_IDLE_TIMEOUT_MINUTES0空闲超时
TERMINALS_MAX_CPUCPU 上限
TERMINALS_MAX_MEMORY内存上限
TERMINALS_OPEN_WEBUI_URL若设置则改用 JWT 校验

局限性

  • 单主机场景
  • 无内建高可用
  • 依赖 Docker socket

认证方式

orchestrator 支持三种认证:

模式适用场景配置方式
OPL 数据空间 JWT生产推荐设置 TERMINALS_OPEN_WEBUI_URL
Shared API key常规部署OPL 数据空间与 orchestrator 共享 TERMINALS_API_KEY
Open仅开发环境不配置 JWT 也不配置 API key

故障排查

Terminal 无法启动

  1. 查看 orchestrator 日志
  2. 检查 TERMINALS_API_KEY 是否两边一致
  3. 如果使用私有镜像仓库,确认拉取权限已配置

认证失败

  • JWT 模式下,确认 TERMINALS_OPEN_WEBUI_URL 可达
  • API key 模式下,确认 key 两边完全一致

容器被回收得太快

调高 TERMINALS_IDLE_TIMEOUT_MINUTES,例如设为 30

Connection refused

  • Docker:确认 TERMINALS_NETWORK 已设置
  • Kubernetes:确认 orchestrator Service 对 OPL 数据空间 Pod 可达

延伸阅读

License

Terminals 需要 OPL 数据空间 Enterprise License 才能在生产中使用。