Files
my-project/doc/COORDINATION_DEPLOYMENT.md
T

435 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OpenClaw 协同部署指南
## 概述
协同部署涉及以下层面:
1. **多 Gateway 部署** - 同一主机运行多个 Gateway 实例
2. **多 Agent 部署** - 单 Gateway 管理多个隔离 Agent
3. **节点(Nodes)管理** - 远程设备作为节点接入
4. **远程访问** - SSH 隧道、Tailscale 等
---
## 一、多 Gateway 部署
### 何时需要多 Gateway
- 需要更强的隔离(如救援 Bot)
- 需要冗余备份
- 不同实例需要不同配置
### 隔离要求
| 配置项 | 说明 | 必需 |
|--------|------|------|
| `OPENCLAW_CONFIG_PATH` | 独立配置文件 | ✅ |
| `OPENCLAW_STATE_DIR` | 独立状态目录 | ✅ |
| `agents.defaults.workspace` | 独立工作目录 | ✅ |
| `gateway.port` | 独立端口 | ✅ |
### 使用 Profile(推荐)
```bash
# 主 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
```
### 手动配置示例
```bash
# 主实例
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 状态检查
```bash
openclaw --profile main status
openclaw --profile rescue status
openclaw --profile rescue browser status
```
---
## 二、多 Agent 部署
### 架构
```
┌─────────────────────────────────────────────────────────┐
│ Gateway │
│ - 消息路由 │
│ - Agent 调度 │
└────────────────────────┬────────────────────────────────┘
│
┌────────────────┼────────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Agent 1 │ │ Agent 2 │ │ Agent 3 │
│ 主助手 │ │ 家庭 Bot│ │ 工作 Bot│
└─────────┘ └─────────┘ └─────────┘
```
### 配置示例
```json5
{
"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 路由规则
匹配顺序:
1. `match.peer`(具体对话)
2. `match.guildId` / `match.teamId`
3. `match.accountId`(具体账号)
4. `match.accountId: "*"`(整个通道)
5. 默认 Agent
### Agent 工具限制
```json5
{
"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 │
│ 节点 │ │ 节点 │ │ 节点 │
└─────────┘ └─────────┘ └─────────┘
```
### 节点配对
```bash
# 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
```
### 节点命令
#### 屏幕截图
```bash
openclaw nodes canvas snapshot --node <id> --format png
openclaw nodes canvas snapshot --node <id> --format jpg --max-width 1200
```
#### 摄像头拍照
```bash
openclaw nodes camera list --node <id>
openclaw nodes camera snap --node <id>
openclaw nodes camera snap --node <id> --facing front
```
#### 屏幕录制
```bash
openclaw nodes screen record --node <id> --duration 10s --fps 10
```
#### 位置信息
```bash
openclaw nodes location get --node <id>
openclaw nodes location get --node <id> --accuracy precise
```
#### 系统命令(节点主机)
```bash
openclaw nodes run --node <id> -- echo "Hello"
openclaw nodes notify --node <id> --title "Title" --body "Message"
```
### 节点绑定 Exec
```bash
# 全局默认
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 隧道
#### 创建隧道
```bash
# 本地 18789 -> 远程 127.0.0.1:18789
ssh -N -L 18789:127.0.0.1:18789 user@gateway-host
```
#### 隧道建立后的操作
```bash
# 查看远程 Gateway 状态
openclaw health
openclaw status --deep
# 发送消息
openclaw message send --target +15555550123 --message "Hi"
```
### 远程 Gateway 配置
```json5
{
"gateway": {
"mode": "remote",
"remote": {
"url": "ws://127.0.0.1:18789",
"token": "your-token"
}
}
}
```
### Tailscale 访问
```bash
# 推荐:保持 loopback 绑定 + Tailscale Serve
openclaw gateway --tailscale serve
# 查看状态
openclaw gateway status
```
### 远程访问模式
| 模式 | 说明 | 适用场景 |
|------|------|----------|
| SSH 隧道 | 通用方案 | 临时访问 |
| Tailscale | 内网穿透 | 长期使用 |
| VPN | 专用网络 | 企业环境 |
---
## 五、协同部署清单
### 部署前检查
- [ ] 确定 Gateway 数量和角色
- [ ] 确定 Agent 数量和用途
- [ ] 规划端口分配(间隔至少 20 端口)
- [ ] 配置网络访问(SSH/Tailscale)
- [ ] 准备各实例的认证信息
### 配置模板
#### 主 Gateway(主 Agent)
```json5
{
"gateway": { "port": 18789, "mode": "local", "bind": "loopback" },
"agents": {
"list": [{ "id": "main", "default": true, "workspace": "~/.openclaw/workspace" }],
"bindings": [{ "agentId": "main", "match": { "channel": "telegram" } }]
}
}
```
#### 救援 Gateway(隔离 Agent)
```json5
{
"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 无法连接
```bash
# 检查本地隧道
lsof -nP -iTCP:18789 -sTCP:LISTEN
# 检查远程 Gateway
ssh user@host "openclaw gateway status"
```
#### 节点不响应
```bash
# 检查节点状态
openclaw nodes status
# 检查节点连接日志
openclaw logs | grep -i node
```
#### Agent 路由错误
```bash
# 查看绑定配置
openclaw agents list --bindings
# 检查消息路由
openclaw logs | grep -i routing
```
#### 工具调用被拒绝
```bash
# 检查工具限制
openclaw sandbox explain
# 检查 Agent 工具配置
openclaw config get agents.list
```
---
## 七、相关文档
- [CLI 命令参考](./CLI_COMMAND_REFERENCE.md)
- [Gateway 配置详解](./GATEWAY_CONFIGURATION.md)
- [故障排查指南](./TROUBLESHOOTING_GUIDE.md)
- [日志配置指南](./LOGGING_GUIDE.md)
- [系统架构](./SYSTEM.md)
- [多机部署](./MULTI-MACHINE.md)
---
*最后更新: 2026-02-04*