多服务器
从单一 sh0 控制台使用安全的 SSH 隧道管理和部署到多台服务器。
概述
sh0 支持自带服务器(BYOS)模式,你可以将多台远程服务器(节点)连接到主 sh0 实例。主服务器充当控制平面,管理所有已连接节点上的部署和路由。
此架构让你能够:
- 在多台服务器间分配工作负载以获得更好的性能
- 将应用放置在更靠近不同地理区域用户的位置
- 隔离工作负载(例如在专用硬件上运行数据库)
- 扩展到超出单台服务器的资源
Multi-server architecture diagram showing primary node and remote nodes
Note
远程节点只需安装 Docker 和 SSH 访问。sh0 处理其余一切——你不需要在远程节点上安装 sh0 二进制文件。
添加远程节点
要将远程服务器添加为节点:
- 在控制台中导航到 设置 → 节点。
- 点击 添加节点。
- 输入节点详情:主机名或 IP、SSH 端口和 SSH 用户。
- 提供 SSH 私钥或从密钥管理器中选择现有密钥。
- 点击 连接。sh0 将验证连接并注册节点。
Add node form with hostname, SSH port, and authentication fields
通过 API:
curl -X POST https://your-server:9000/api/nodes \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "eu-node-1",
"hostname": "10.0.1.50",
"ssh_port": 22,
"ssh_user": "deploy",
"ssh_key_id": "key_abc123"
}' Warning
SSH 用户必须有权限在远程节点上运行 Docker 命令。可以将用户添加到
docker 组或为 Docker 配置免密 sudo。SSH 隧道设置
sh0 通过 SSH 隧道与远程节点通信。隧道将 Docker API 请求从主服务器转发到远程节点的 Docker socket,保持所有流量加密。
添加节点时隧道自动建立。sh0 使用 SSH TOFU(首次信任)进行主机密钥验证——首次连接时会显示服务器指纹并要求你确认。
Primary Server (sh0)
|
|-- SSH Tunnel (encrypted) --> Remote Node 1
| |-- Docker Socket
| |-- Container A
| |-- Container B
|
|-- SSH Tunnel (encrypted) --> Remote Node 2
|-- Docker Socket
|-- Container C SSH tunnel status showing connected nodes and latency
Tip
sh0 会在隧道断开时自动重新连接。重新连接在几秒内完成,远程节点上运行的容器不受影响——仅管理操作会短暂不可用。
节点健康监控
sh0 持续监控所有已连接节点的健康状况。监控内容包括:
- SSH 连接:检查隧道是否活跃且响应正常。
- Docker 状态:验证远程节点上的 Docker 守护进程是否正在运行。
- 资源使用:跟踪每个节点的 CPU、内存和磁盘使用情况。
- 容器健康:监控节点上运行的所有容器。
Node health dashboard showing CPU, memory, disk, and container status for each node
当节点变为不健康时,sh0 通过配置的通知渠道(邮件、Slack、Discord 或 webhooks)发送告警。你可以在节点设置中为每个节点配置告警阈值。
部署到指定节点
创建或配置应用时,你可以指定应在哪个节点上运行。这在应用的部署设置中配置。
Node selection dropdown in the app deployment settings
选项:
- 主节点(默认):在主 sh0 服务器上部署。
- 指定节点:将应用固定到指定的远程节点。
- 任意节点:让 sh0 选择可用资源最多的节点。
curl -X PUT https://your-server:9000/api/apps/my-app \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"node_id": "node_eu1"}' Note
部署到远程节点时,sh0 通过 SSH 隧道将构建好的 Docker 镜像从主服务器传输到远程节点。这一过程自动完成——无需容器镜像仓库。
节点感知路由
主服务器的 Caddy 反向代理处理到所有节点上容器的路由。当请求到达某个域名时,Caddy 会将其路由到正确的节点和容器,无论容器在哪里运行。
对于副本分布在多个节点上的应用,Caddy 在所有节点上的所有健康副本之间进行负载均衡。在规划架构时应考虑主代理和远程节点之间的延迟。
Tip
为获得最低延迟,请将反向代理(主 sh0 服务器)放在大多数用户所在的区域,使用远程节点处理后台任务或区域部署。
管理多台服务器
控制台中的节点面板提供所有服务器的集中视图:
Nodes management panel showing all connected servers with their status and resource usage
在此面板中你可以:
- 查看节点指标:每个节点的 CPU、内存、磁盘和网络使用情况。
- 列出容器:查看特定节点上运行的所有容器。
- 排空节点:在维护前将所有容器优雅地迁移出节点。
- 移除节点:断开远程节点(容器必须先迁移或停止)。
- 终端访问:直接从控制台打开到任意节点的 SSH 终端。
Danger
移除仍有运行中容器的节点会导致这些容器不可达。在移除之前请先排空节点,确保所有应用已迁移到其他节点。