跳转到主要内容
私有化部署商业版及以上适用
Teable Agent Runtime 为 AI 对话应用构建器 提供沙箱及应用运行时服务。本指南介绍如何使用 Docker Compose,在一台 Linux 服务器上部署完整服务栈。 部署内容包括 AI 沙箱引擎、App Runtime、Git 仓库服务、制品存储和 TLS 网关。本文提供全部配置文件,无需 Kubernetes 或额外的代码仓库。
Agent Runtime 的私有化部署仍处于早期阶段。本指南面向愿意率先体验的用户,并会根据实际部署反馈持续迭代。当前运行时通过 Teable Infra 使用 OpenSandbox,不再使用 Vercel Sandbox 或 Vercel Snapshot。如需部署协助,请联系 support@teable.ai
如需使用应用构建器预览和发布应用,请部署本文提供的完整服务栈。只运行 opensandbox-server 无法提供应用构建器所需的应用运行时、Git 仓库、制品存储和网关。

架构

对外只暴露 Caddy 网关的 80/443 端口,其余服务均在内部 Docker 网络中:
服务说明内部端口
caddyTLS 终止 + 全部路由(控制台、沙箱/应用预览、S3、git)对外 80/443
opensandbox-serverAI 沙箱引擎(Docker 模式),通过宿主 docker.sock 按需创建沙箱容器8090
infra-service控制台 UI + Infra API + App Runtime Docker 后端 + 内置应用网关8080
git-registryApp Builder 的 git smart-http 服务(与 infra-service 共用镜像)8080
minio (可选)内置 S3 兼容制品存储(可换成外部 S3,请参阅选择制品存储9000 / 9001
minio-init (可选)一次性任务:等待 MinIO 就绪并创建制品桶不适用
域名路由(均由根域名 BASE_DOMAIN 自动拼出):
地址用途
https://<BASE_DOMAIN>控制台 UI + Infra API + 沙箱引擎 API(/v1/*
https://{appId}.app.<BASE_DOMAIN>已部署应用的访问入口
https://{sandboxId}-{port}.sandbox.<BASE_DOMAIN>沙箱端口预览
https://s3.<BASE_DOMAIN>制品存储(内置 MinIO 模式;预签名 URL 指向这里)
https://git.<BASE_DOMAIN>git smart-http(外部手动 clone 用,可选)

开始前的准备

服务器要求

最低推荐
vCPU48
内存8 GB16 GB
磁盘80 GB NVMe120+ GB NVMe
操作系统Ubuntu 22.04/24.04(x86_64)同左
软件Docker Engine 24+、Docker Compose v2.24+、OpenSSL同左
容量背景:每个活跃的构建会话运行一个沙箱容器(上限 2 vCPU / 4 GiB);每个已部署应用同样上限 2 vCPU / 4 GiB(实际常用几百 MB)。基础服务共占约 1 到 1.5 GiB 内存。磁盘大头是容器镜像 (预热后约 15 到 20 GB)加沙箱/应用的可写层,建议监控剩余空间。

DNS 与防火墙

在 DNS 供应商处添加 4 条 A 记录,全部指向云主机公网 IP(通配证书只覆盖一级子域名, 所以 4 条都需要):
域名托管在 Cloudflare 时,这 4 条记录请设置为仅 DNS(灰云),不要开代理(橙云)。
防火墙只放行入站 22(SSH)、80、443,其余端口一律不对外。

容器镜像

本部署默认使用 GHCR + Docker Hub所有镜像均为公开仓库,无需 docker login。Teable 镜像中的 <tag> 不是固定值;请分别打开对应的 GHCR Package 页面, 使用该页面 Installation 命令中显示的版本标签。不同镜像的标签需要分别确认,不要假设相同。

Docker Compose 管理的镜像

用途镜像模板Package page
控制台 + Infra API + App Runtime(infra-service 与 git-registry 共用,后者只是换了启动入口)ghcr.io/teableio/teable-infra-service:<tag>GHCR
AI 沙箱引擎本体(OpenSandbox,Docker 运行时模式;Teable 构建版)ghcr.io/teableio/opensandbox-server:<tag>GHCR
TLS 边缘网关(自备证书模式用官方镜像;Cloudflare 模式本地构建,请参阅选择 TLS 模式caddy:2.9.1Docker Hub
内置制品存储(仅内置 MinIO 模式;生产建议钉 digest)minio/minio:latestDocker Hub
一次性建桶工具(仅内置 MinIO 模式)minio/mc:latestDocker Hub

运行时镜像

以下镜像不由 compose 启动,而是由服务在运行期通过宿主 docker.sock 按需创建容器时使用。 均为公开镜像,守护进程可直接匿名拉取;建议按照预拉取运行时镜像预拉到本地,避免首次创建沙箱/部署应用时的 冷启动拉取延迟:
用途镜像模板Package page
沙箱基准镜像(每个 AI 构建会话在其中运行)ghcr.io/teableio/teable-sandbox-agent:<tag>GHCR
应用运行基准镜像(每个已部署应用的容器镜像;不配置则应用无法部署ghcr.io/teableio/teable-app-runtime:<tag>GHCR
沙箱内执行代理 execd(引擎自动注入进每个沙箱容器)ghcr.io/teableio/opensandbox-execd:v1.0.19-fix-1064GHCR
沙箱出网 sidecar egress(DNS 模式,引擎按需为每个沙箱创建)opensandbox/egress:v1.0.12Docker Hub
execd 必须使用上表中由 Teable 构建的修复版镜像 opensandbox-execd:v1.0.19-fix-1064,不要替换为上游的 opensandbox/execd 镜像。

选择制品存储

模式配置说明
内置 MinIO(默认).envS3_ENDPOINT 留空、COMPOSE_PROFILES=minio自动启动 MinIO 并建桶;预签名 URL 统一走 https://s3.<BASE_DOMAIN>
外部 S3S3_ENDPOINT 填供应商 URL、COMPOSE_PROFILES=(置空)内置 MinIO 不再启动;S3_ACCESS_KEY / S3_SECRET_KEY / S3_BUCKET 须填供应商签发的值,桶要预建;供应商若仅支持 virtual-host style 另填 S3_FORCE_PATH_STYLE=false

创建部署文件

部署目录

在服务器上创建一个部署目录(下文以 teable-runtime/ 为例),配置文件部分提供前四个文件的完整内容:
含密钥的文件是 .envcompose.override.yaml,请勿外发、勿提交到版本库。

配置文件

.env

.env

compose.yaml

原样复制,无需修改(所有环境相关的值都取自 .env):

Caddyfile

默认按 static(自备证书)模式写好;cloudflare 模式按照文件顶部注释和选择 TLS 模式调整两处:
Caddyfile

opensandbox.toml

原样复制:
opensandbox.toml

部署 Agent Runtime

配置 .env 并生成密钥

编辑配置文件中的 .env,填写以下必填项:
  • BASE_DOMAIN / INFRA_HOST:填写根域名,INFRA_HOST 通常与 BASE_DOMAIN 相同。
  • 镜像:按照容器镜像中的清单填写;每个 Teable 镜像的 <tag> 从对应 GHCR package 页面的 Installation 命令复制;
  • 密钥项,用下面的命令生成后填入:

选择 TLS 模式

模式准备证书续期
static(自备证书,默认)fullchain.pem + privkey.pem 放进 certs/。须为单张多 SAN 证书,覆盖 <BASE> / *.<BASE> / *.app.<BASE> / *.sandbox.<BASE> 四个名字(通配符只盖一级)。手动:替换 certs/ 文件后执行 docker compose exec caddy caddy reload -c /etc/caddy/Caddyfile
cloudflare(DNS-01 自动签发)域名 DNS 托管在 Cloudflare;准备一个 API Token(权限 Zone:Read + DNS:Edit)。Caddy 全自动
static 模式:上方配置文件默认使用此模式,放好证书即可,无需其他改动。 可用以下命令自检证书与私钥是否匹配、SAN 是否覆盖四个名字:
cloudflare 模式需做 4 处调整:
  1. 官方 Caddy 镜像不带 DNS 插件,先把下面内容存为 Dockerfile.caddy 并在本机构建一次:
    Dockerfile.caddy
  2. .envCADDY_IMAGE=teable-caddy-cloudflare:2.9.1,并填 ACME_EMAILCLOUDFLARE_API_TOKEN
  3. Caddyfile:按文件顶部注释,取消全局块(email + acme_dns cloudflare)的注释;
  4. Caddyfile:删除 (site_tls) 片段里的 tls /certs/... 一行(证书改由 ACME 全自动管理)。
Cloudflare 模式必须持久化 caddy-data 卷。该卷用于存储证书和 ACME 账号;如果丢失,Caddy 会在重建后重新申请证书,可能触发 Let’s Encrypt 的频率限制。

生成 Git 服务签名密钥

git 服务使用一对 Ed25519 密钥签发/验证访问令牌。多行 PEM 放不进 .env,因此通过 compose.override.yaml 注入(Docker Compose 会自动加载它)。在部署目录执行:
生成的 compose.override.yaml 结构如下(PEM 内容为你生成的密钥):
compose.override.yaml
要轮换密钥,重新执行本节命令即可。
openssl genpkeyAlgorithm ed25519 not found(如 macOS 自带的 LibreSSL), 可改用 Docker 生成密钥对,再执行上面的拼装命令:

创建共享工作区卷

Agent 共享工作区使用一个外部卷(compose 声明为 external,不会自动创建/删除):

预拉取运行时镜像

全部为公开镜像,无需 docker login:
execd 和 egress 的镜像地址必须与 opensandbox.toml 中的配置完全一致。

启动服务

验证部署

检查服务状态

控制台 UI:浏览器打开 https://<BASE_DOMAIN>(或你填的 INFRA_HOST),用 api-key 登录, key 即 .env 中的 OPENSANDBOX_API_KEY

对接 Teable

在 Teable 部署中添加以下环境变量:
TEABLE_INFRA_API_KEY 必须与 Agent Runtime .env 中的 OPENSANDBOX_API_KEY 使用相同的值。SANDBOX_OPENSANDBOX_IMAGE 也必须与 Agent Runtime 配置的沙箱镜像一致。 TEABLE_INFRA_API_URL 必须指向 Teable Infra 根地址,不能包含路径。更新环境变量后,重启 Teable。

故障排查

问题检查项
Teable 提示 Agent Runtime 未配置确认上方 4 个 Teable 环境变量均已设置,然后重启 Teable。
沙箱或应用预览出现 DNS、TLS 或 404 错误确认 4 条 DNS 记录均指向服务器,并且证书覆盖所有必需域名。
首次创建沙箱或部署应用较慢在首次使用前预拉取全部运行时镜像。
服务状态异常运行 docker compose ps,再通过 docker compose logs <service> 查看对应服务日志。
如需部署协助,请联系 support@teable.ai,并提供 docker compose ps 的输出和相关服务日志。

日常运维

查看日志和管理服务

升级

修改 .env 中的镜像 tag,然后执行 docker compose pull && docker compose up -d 沙箱、应用基准镜像或 execd/egress 更新后,请按照预拉取运行时镜像重新拉取。

备份数据

建议定期备份以下数据卷,尤其是 minio-datacaddy-data
内容
opensandbox-state沙箱引擎状态(SQLite)
infra-stateApp Runtime 状态与草稿
git-registry-datagit 仓库数据
minio-data制品文件(内置 MinIO 模式)
teable-agent-juicefsAgent 共享工作区(external 卷,部署时创建)
caddy-data / caddy-configTLS 证书、ACME 账号、Caddy 配置
docker compose down -v 会同时删除数据卷,包括制品、Git 仓库和证书。请谨慎使用。

安全与限制

安全须知

  • 含密钥的文件只有 .envcompose.override.yaml切勿提交到版本库或外发
  • 整栈共用一把 OPENSANDBOX_API_KEY;如需分权,请分别替换各服务的对应环境变量。
  • docker.sock 挂载进 opensandbox-server 与 infra-service(Docker 后端必需),等价于宿主 root 权限,请只在专用、可信的主机上部署。
  • 唯一公网面是 Caddy 的 80/443;MinIO 控制台(9001)不对外,需要时用 SSH 隧道访问。
  • 沙箱与宿主共享内核,不是多租户强隔离边界;对外开放多租户场景请为沙箱引擎配置 gVisor / Kata 等强隔离运行时。

能力边界

可用:沙箱引擎全功能;应用主链路(创建 → 激活 → 网关访问 → 删除,含 dashboard、日志、 S3 制品);git 推拉;控制台 api-key 登录 + Infra API;文件页与 S3 兼容接口。 不可用 / 受限(Docker 模式取舍):应用 host-prefix 改名(返回 501)、scale-to-zero 闲置缩容(no-op)、引擎 key 轮换 / server 滚动升级、控制台 Kubernetes 观测页(显示为空属正常)。
最后修改于 2026年7月14日