跳转到主要内容
这个脚本会把 .env.example 复制成 .env,把仍是模板值的密码和 JWT 密钥换成随机值,然后把整栈拉起来。 它是幂等的——改完 .env 再跑一次即可。

会起来哪些服务

Postgres 必须带着 shared_preload_libraries=timescaledb 启动,compose 文件里已经设了。 但如果数据卷最初是用普通 postgres 初始化的,它的 postgresql.conf 里不会有这一项, hypertable 迁移就会失败。要么从干净的卷开始,要么手动补上这项设置。

开始之前

1

配置共享存储

设置 TUNEPLANE_STORAGE_ROOT=/srv/tuneplane。控制平面与每台 Node 在相同路径挂载共享工作存储。作业只获得授权范围内的挂载,不会获得整个存储根目录。
2

启动控制平面

API 和 worker 无需 GPU、NVIDIA 运行时、Docker CLI 或 Docker socket,任务通过已注册的 Fleet 执行。
3

接入计算资源

注册 Node Fleet,再按Node 安装指南接入计算机器。单台计算机器也走同样的流程。Kubernetes 和 Slurm 集群分别注册为各自的 Fleet。

推荐配置

其余项都有可用的默认值,这几项没有。
.env
TUNEPLANE_INGEST_URL 必须使用计算节点可访问的控制平面地址;回环地址指向计算节点自身。
数据库和 Redis 的主机名是 compose 服务名,只在 tuneplane-internal 网络内可解析。 整栈用 compose 拉起来;单独 docker run 应用镜像会报 failed to resolve host 'postgres'。

确认成功

然后打开控制台。首次访问会走引导流程创建第一个管理员。

从一台机器往外走

控制平面可以一直部署在这台无 GPU 的机器上。需要扩容时,增加 Node,或注册 Kubernetes、Slurm 集群对应的 Fleet。是否把控制平面迁入 Kubernetes 是独立的部署选择。

原生训练指标采集

启用 Compose 的 gateway profile 可启动网关:同一个进程在 8444 端口接收采集器遥测、 在 8443 端口提供 Node 控制通道,两者各自独立限流。 训练任务使用固定版本的 Rust 采集器,不需要额外的客户端证书签发服务。 启动时自动持久化网关 TLS 身份并提供公开 CA。将 TUNEPLANE_NODE_GATEWAY_TARGET 设置为节点可访问的 host:8443,加入时自动下发信任配置,私钥保留在控制平面。 所有副本必须共享 PostgreSQL、TUNEPLANE_SECRET_ENC_KEY 和 TUNEPLANE_WEB_JWT_SECRET。 使用 scripts/build-rust-collector.py 构建匹配执行主机的采集器,将完整产物目录 放在平台管理的工作存储中,不能放进任务包或训练输出。.env 配置示例:
启用自动网关 TLS、且未显式设置任一网关的信任包时,启动过程自动提供公开 CA,并在每次启动任务时下发给采集器。只有使用外部管理的证书时才需要设置 TUNEPLANE_TELEMETRY_TRUST_BUNDLE。TUNEPLANE_TELEMETRY_SPOOL_BYTES 默认 256 MiB,TUNEPLANE_TELEMETRY_DRAIN_SECONDS 默认 30 秒,仅需调整限制时配置。Node 加入流程配置的是 Node 控制连接,不能替代上面三项遥测配置。 目标地址为 host:port,不带 URL 协议前缀;主机名必须与证书匹配,且执行主机能够访问。 信任包包含公开的签发 CA 证书链。网关副本共享数据库和固定的 TUNEPLANE_WEB_JWT_SECRET。仅在不启用原生采集时留空目标地址;必需的采集源会拒绝启动。 在每台执行主机的持久化本地磁盘上预建缓冲根目录,权限为 0700,归执行服务账户所有。 不要使用 NFS、容器可写层或临时存储。平台自动创建各次启动和各成员的子目录、签发独立续期凭据, 并以只读方式挂载授权文件。共享存储的 UID 必须允许任务读取自己的 0600 授权文件; 应对齐服务 UID,不要通过放宽凭据权限解决问题。 Node 或 Slurm Fleet:
缓冲可在原主机的进程或容器重启后保留,不保证主机磁盘永久损坏后的恢复。 退出时按配置期限补传,未完成的数据保留在缓冲中,必需采集会报告失败。 不要删除仍有待确认记录的目录。授权文件和缓冲目录不属于训练产物。 续期受执行租约、attempt 替换、撤销及任务终止后的五分钟收尾窗口约束。 采集器必须匹配执行主机架构;混合架构环境需要分别提供兼容的部署配置, 错误的二进制会被拒绝,不会安装进训练环境。

分离存储磁盘

使用可选 overlay 将不同用途放到不同物理位置。所有 bind 的源与目标保持相同绝对路径。 gateway 使用只读挂载,训练任务仅获得执行器授予的子目录。 在 .env 中添加以下配置。API、worker 和 Node 必须使用相同值。
先完成磁盘或 NAS 挂载,再创建子目录。新安装使用镜像默认 UID 10001 时:
后续 Compose 命令也要保留两个 -f 参数。overlay 不会创建缺失的 bind 源目录。 它也支持存储布局列出的更细粒度缓存和状态覆盖,启动前需逐一准备目录。 已有外部挂载可保留原路径和所有权,通过 Storage Connection 注册,并以相同宿主机路径 只读挂载进 API/worker。不要对已有外部数据集或模型库递归更改所有者。 这是新安装示例。现有部署需先迁移文件和已保存的引用,再切换根目录。 宿主机目录存在不代表 NAS 挂载成功,应配置挂载依赖并执行预检。 overlay 不部署 S3 存储,也不迁移数据库数据。 代码沙箱是可选能力。默认 Compose 部署不接入宿主容器运行时;训练需要代码执行服务时, 可配置外部 TUNEPLANE_SANDBOX_ENDPOINT。显式启用平台自带沙箱时,需要另外提供 Docker 或 Podman 访问能力。 Node 加入时可自动保存网关地址和 CA。在控制平面设置 TUNEPLANE_NODE_GATEWAY_TARGET=网关域名:8443,并将 TUNEPLANE_NODE_GATEWAY_TRUST_BUNDLE 指向 API 容器可读取的公共 CA 文件, 例如现有存储挂载下的 /srv/tuneplane/platform/node-gateway-ca.pem。 该文件不能包含私钥;网关私钥仅保留在 gateway。