10 KiB
10 KiB
OpenClaw 协同部署指南
概述
协同部署涉及以下层面:
- 多 Gateway 部署 - 同一主机运行多个 Gateway 实例
- 多 Agent 部署 - 单 Gateway 管理多个隔离 Agent
- 节点(Nodes)管理 - 远程设备作为节点接入
- 远程访问 - SSH 隧道、Tailscale 等
一、多 Gateway 部署
何时需要多 Gateway
- 需要更强的隔离(如救援 Bot)
- 需要冗余备份
- 不同实例需要不同配置
隔离要求
| 配置项 | 说明 | 必需 |
|---|---|---|
OPENCLAW_CONFIG_PATH |
独立配置文件 | ✅ |
OPENCLAW_STATE_DIR |
独立状态目录 | ✅ |
agents.defaults.workspace |
独立工作目录 | ✅ |
gateway.port |
独立端口 | ✅ |
使用 Profile(推荐)
# 主 Gateway
openclaw --profile main setup
openclaw --profile main gateway --port 18789
openclaw --profile main gateway install
# 救援 Gateway
openclaw --profile rescue setup
openclaw --profile rescue gateway --port 19789
openclaw --profile rescue gateway install
手动配置示例
# 主实例
OPENCLAW_CONFIG_PATH=~/.openclaw/main.json \
OPENCLAW_STATE_DIR=~/.openclaw-main \
openclaw gateway --port 18789
# 救援实例
OPENCLAW_CONFIG_PATH=~/.openclaw/rescue.json \
OPENCLAW_STATE_DIR=~/.openclaw-rescue \
openclaw gateway --port 19789
端口映射(衍生端口)
基础端口 = gateway.port
| 服务 | 端口偏移 |
|---|---|
| browser control | +2 |
| canvas host | +4 |
| CDP 端口范围 | +9 ~ +108 |
多 Gateway 状态检查
openclaw --profile main status
openclaw --profile rescue status
openclaw --profile rescue browser status
二、多 Agent 部署
架构
┌─────────────────────────────────────────────────────────┐
│ Gateway │
│ - 消息路由 │
│ - Agent 调度 │
└────────────────────────┬────────────────────────────────┘
│
┌────────────────┼────────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Agent 1 │ │ Agent 2 │ │ Agent 3 │
│ 主助手 │ │ 家庭 Bot│ │ 工作 Bot│
└─────────┘ └─────────┘ └─────────┘
配置示例
{
"agents": {
"list": [
{
"id": "main",
"default": true,
"name": "主助手",
"workspace": "~/.openclaw/workspace",
"sandbox": { "mode": "off" }
},
{
"id": "family",
"name": "家庭 Bot",
"workspace": "~/.openclaw/workspace-family",
"sandbox": {
"mode": "all",
"scope": "agent"
},
"tools": {
"allow": ["read"],
"deny": ["exec", "write", "edit"]
}
},
{
"id": "work",
"name": "工作 Bot",
"workspace": "~/.openclaw/workspace-work"
}
],
"bindings": [
{ "agentId": "main", "match": { "channel": "telegram" } },
{ "agentId": "family", "match": { "channel": "whatsapp" } },
{ "agentId": "work", "match": { "channel": "discord" } }
]
}
}
Agent 路由规则
匹配顺序:
match.peer(具体对话)match.guildId/match.teamIdmatch.accountId(具体账号)match.accountId: "*"(整个通道)- 默认 Agent
Agent 工具限制
{
"agents": {
"list": [
{
"id": "public",
"tools": {
"profile": "read-only",
"allow": ["read", "message"],
"deny": ["exec", "write", "browser"]
}
}
]
}
}
工具组速查
| 组名 | 包含工具 |
|---|---|
group:runtime |
exec, bash, process |
group:fs |
read, write, edit, apply_patch |
group:sessions |
sessions_list, sessions_history, sessions_send |
group:memory |
memory_search, memory_get |
group:ui |
browser, canvas |
group:messaging |
message |
三、节点(Nodes)管理
节点概念
节点是连接到 Gateway 的辅助设备(macOS/iOS/Android/无头主机),提供:
- 屏幕截图(Canvas)
- 摄像头拍照/录像
- 位置信息
- 系统命令执行
- 通知推送
节点架构
┌─────────────────────────────────────────────────────────┐
│ Gateway │
│ - 接收消息 │
│ - 运行 Agent │
│ - 路由工具调用 │
└────────────────────────┬────────────────────────────────┘
│ WebSocket
┌────────────────┼────────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Mac │ │ iPhone │ │ Android │
│ 节点 │ │ 节点 │ │ 节点 │
└─────────┘ └─────────┘ └─────────┘
节点配对
# 1. 在节点设备上启动
openclaw node run --host <gateway-host> --port 18789 --display-name "Mac Node"
# 2. 在 Gateway 主机上审批
openclaw nodes pending
openclaw nodes approve <requestId>
# 3. 查看节点状态
openclaw nodes status
openclaw nodes list
节点命令
屏幕截图
openclaw nodes canvas snapshot --node <id> --format png
openclaw nodes canvas snapshot --node <id> --format jpg --max-width 1200
摄像头拍照
openclaw nodes camera list --node <id>
openclaw nodes camera snap --node <id>
openclaw nodes camera snap --node <id> --facing front
屏幕录制
openclaw nodes screen record --node <id> --duration 10s --fps 10
位置信息
openclaw nodes location get --node <id>
openclaw nodes location get --node <id> --accuracy precise
系统命令(节点主机)
openclaw nodes run --node <id> -- echo "Hello"
openclaw nodes notify --node <id> --title "Title" --body "Message"
节点绑定 Exec
# 全局默认
openclaw config set tools.exec.host node
openclaw config set tools.exec.node "<node-id>"
# Agent 级别
openclaw config set agents.list[0].tools.exec.node "<node-id>"
四、远程访问
SSH 隧道
创建隧道
# 本地 18789 -> 远程 127.0.0.1:18789
ssh -N -L 18789:127.0.0.1:18789 user@gateway-host
隧道建立后的操作
# 查看远程 Gateway 状态
openclaw health
openclaw status --deep
# 发送消息
openclaw message send --target +15555550123 --message "Hi"
远程 Gateway 配置
{
"gateway": {
"mode": "remote",
"remote": {
"url": "ws://127.0.0.1:18789",
"token": "your-token"
}
}
}
Tailscale 访问
# 推荐:保持 loopback 绑定 + Tailscale Serve
openclaw gateway --tailscale serve
# 查看状态
openclaw gateway status
远程访问模式
| 模式 | 说明 | 适用场景 |
|---|---|---|
| SSH 隧道 | 通用方案 | 临时访问 |
| Tailscale | 内网穿透 | 长期使用 |
| VPN | 专用网络 | 企业环境 |
五、协同部署清单
部署前检查
- 确定 Gateway 数量和角色
- 确定 Agent 数量和用途
- 规划端口分配(间隔至少 20 端口)
- 配置网络访问(SSH/Tailscale)
- 准备各实例的认证信息
配置模板
主 Gateway(主 Agent)
{
"gateway": { "port": 18789, "mode": "local", "bind": "loopback" },
"agents": {
"list": [{ "id": "main", "default": true, "workspace": "~/.openclaw/workspace" }],
"bindings": [{ "agentId": "main", "match": { "channel": "telegram" } }]
}
}
救援 Gateway(隔离 Agent)
{
"gateway": { "port": 19789, "mode": "local", "bind": "loopback" },
"agents": {
"list": [{ "id": "rescue", "workspace": "~/.openclaw/workspace-rescue" }],
"bindings": [{ "agentId": "rescue", "match": { "channel": "telegram" } }]
}
}
运维命令速查
| 任务 | 命令 |
|---|---|
| 查看所有 Gateway | openclaw --profile <name> status |
| 查看节点 | openclaw nodes status |
| 查看 Agent | openclaw agents list --bindings |
| 重启 Gateway | openclaw gateway restart |
| SSH 隧道 | ssh -N -L 18789:127.0.0.1:18789 user@host |
六、故障排查
常见问题
Gateway 无法连接
# 检查本地隧道
lsof -nP -iTCP:18789 -sTCP:LISTEN
# 检查远程 Gateway
ssh user@host "openclaw gateway status"
节点不响应
# 检查节点状态
openclaw nodes status
# 检查节点连接日志
openclaw logs | grep -i node
Agent 路由错误
# 查看绑定配置
openclaw agents list --bindings
# 检查消息路由
openclaw logs | grep -i routing
工具调用被拒绝
# 检查工具限制
openclaw sandbox explain
# 检查 Agent 工具配置
openclaw config get agents.list
七、相关文档
最后更新: 2026-02-04