服务器 & 实例管理
Sprint 2.5 实现。管理所有 OpenClaw 节点服务器、Docker 容器与 AI 实例。
核心概念
服务器(Server)
└── Docker 容器(Container)
└── OpenClaw 实例(OC Instance)
└── 绑定员工(User)
一台服务器可运行多个 Docker 容器,每个容器是一个独立的 OpenClaw 进程,绑定到一位或多位员工。
功能模块
🖥️ 服务器管理
| 功能 | 说明 |
|---|---|
| 登记服务器 | IP、区域、规格、SSH 凭证(加密存储) |
| 状态监控 | CPU / 内存 / 磁盘实时显示 |
| 容器列表 | 该服务器上所有 Docker 容器一览 |
| 告警阈值 | CPU > 80% / 磁盘 > 85% 触发通知 |
🐳 Docker 容器管理
| 功能 | 说明 |
|---|---|
| 容器列表 | 名称 / 镜像 / 状态 / 端口 / 创建时间 |
| 启动/停止/重启 | 调 Docker Remote API 执行 |
| 实时日志 | WebSocket 日志流 |
| 新建/删除 | 填参数 → 自动拉镜像 → 启动(软删除) |
🤖 OpenClaw 实例管理
| 功能 | 说明 |
|---|---|
| 实例列表 | 跨服务器汇总,健康状态徽章 |
| 实例配置 | 模型 / Gateway Port / Token |
| 健康检查 | 每 60 秒 ping,连续 3 次失败告警 |
| 员工绑定 | 实例 ↔ 员工多对多 |
| 用量归集 | 每个实例的 Token 消耗图表 |
Docker 接入方案:Remote API + TLS
选择 方案 B — Docker Remote API(非 SSH 命令):
目标服务器开启 Docker TCP Socket(TLS 加密,仅内网)
admin-api → HTTPS 调用 Docker API(tcp://35.243.76.69:2376)
优点:
- 标准化 REST API,响应快
- 无需每次建 SSH 连接
- TLS 双向认证,安全
配置步骤(每台服务器):
- 生成 CA + Server + Client TLS 证书
- 修改 Docker daemon 启用 TCP + TLS:
/etc/docker/daemon.json:
{
hosts: [unix:///var/run/docker.sock, tcp://0.0.0.0:2376],
tls: true,
tlscacert: /etc/docker/tls/ca.pem,
tlscert: /etc/docker/tls/server-cert.pem,
tlskey: /etc/docker/tls/server-key.pem
} - admin-api 持有 client.pem + client-key.pem 调用 API
数据库设计
-- 服务器
CREATE TABLE servers (
id VARCHAR(36) PRIMARY KEY DEFAULT (UUID()),
name VARCHAR(100),
ip VARCHAR(45),
region VARCHAR(50), -- gcp-japan / gcp-hk
provider VARCHAR(50), -- gcp / aws / aliyun
cpu_cores INT,
memory_gb INT,
disk_gb INT,
status VARCHAR(20) DEFAULT 'active',
ssh_user VARCHAR(50),
ssh_port INT DEFAULT 22,
docker_port INT DEFAULT 2376,
created_at DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3),
deleted_at DATETIME(3)
);
-- Docker 容器
CREATE TABLE containers (
id VARCHAR(100) PRIMARY KEY,
server_id VARCHAR(36) REFERENCES servers(id),
name VARCHAR(100),
image VARCHAR(255),
status VARCHAR(20), -- running/stopped/error
port_mapping VARCHAR(255),
created_at DATETIME(3),
deleted_at DATETIME(3)
);
-- OpenClaw 实例
CREATE TABLE oc_instances (
id VARCHAR(100) PRIMARY KEY,
container_id VARCHAR(100) REFERENCES containers(id),
server_id VARCHAR(36),
name VARCHAR(100),
gateway_port INT,
gateway_token VARCHAR(255), -- 加密存储
model VARCHAR(100),
health_status VARCHAR(20) DEFAULT 'unknown',
last_health_at DATETIME(3),
created_at DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3),
deleted_at DATETIME(3)
);
后台页面结构
/servers 服务器列表(卡片视图,CPU/内存 mini 图)
/servers/:id 服务器详情
├── 基础信息 + 实时资源占用
├── 容器列表(含状态徽章)
└── 实例列表
/instances 所有 OpenClaw 实例(跨服务器汇总)
/instances/:id 实例详情
├── 健康状态 + 最近心跳
├── 绑定员工列表
├── 用量图表(本周/本月)
└── 日志面板(WebSocket 实时)
/instances/new 新建实例(选服务器 → 填配置 → 一键部署)
Sprint 计划
Sprint 2.5(员工管理完成后):
- Docker Remote API TLS 配置(小龙节点)
- servers / containers / oc_instances 表迁移
- admin-api:服务器 CRUD + Docker API 调用
- admin 前台:服务器列表 + 实例列表
- 健康检查 cron(60 秒轮询)
- 实例日志 WebSocket