跳转至

多个 Gateway

大多数安装场景只需要一个 Gateway——单个 Gateway 即可处理多个消息连接和智能体。只有在需要更强的隔离或冗余(例如救援机器人)时,才使用隔离的 profile/端口运行独立的 Gateway。

救援机器人快速入门

最简单的救援机器人设置如下:

  • 将主机器人保留在默认 profile 上。
  • 在 --profile rescue 上运行救援机器人,并使用其独立的 Telegram 机器人令牌。
  • 将救援机器人放在不同的基础端口上,例如 19789。

这样,即使主机器人宕机,救援机器人也能调试或应用配置更改。基础端口之间至少留出 120 个端口,以确保派生的浏览器/CDP 端口永远不会冲突。每个实例的端口范围可达 base + 110:其浏览器控制端口是 base + 2,该端口的 CDP 范围一直延伸到 base + 110。

# Rescue bot (separate Telegram bot, separate profile, port 19789)
openclaw --profile rescue onboard
openclaw --profile rescue gateway install --port 19789

如果你的主机器人已在运行,通常只需这些操作。如果初始化流程已经安装了救援服务,请跳过最后的 gateway install。

在 openclaw --profile rescue onboard 过程中:

  • 使用专门用于救援账户的独立 Telegram 机器人令牌。它很容易保持仅限操作员访问,与主机器人的渠道和应用安装相互独立,并提供了基于私信(DM)的简单恢复路径。
  • 保留 rescue profile 名称。
  • 使用一个比主机器人至少高 120 的基础端口。
  • 接受默认的救援工作区,除非你已经自行管理了一个。

--profile rescue onboard 更改了哪些内容

--profile rescue onboard 会运行正常的初始化流程,但将所有内容写入独立的 profile,因此救援机器人拥有自己的:

  • Profile/配置文件
  • 状态目录
  • 工作区(默认:~/.openclaw/workspace-rescue)
  • 托管服务名称
  • 基础端口(以及派生端口)
  • Telegram 机器人令牌

其余交互提示与普通初始化流程完全相同。

通用多 Gateway 设置

同样的隔离模式适用于一台主机上的任意一对或一组 Gateway。为每个额外的 Gateway 分配自己的命名 profile 和基础端口。

openclaw setup 会在尚未配置的 profile 上运行初始化流程。它执行与前面救援机器人所用的 onboard 命令相同的首次运行任务。当你想在已经配置好的 profile 上运行初始化流程时,请使用 onboard。

# main (default profile)
openclaw setup
openclaw gateway --port 18789

# extra gateway
openclaw --profile ops setup
openclaw --profile ops gateway --port 19789

两侧都使用命名 profile 也同样可行:

openclaw --profile main setup
openclaw --profile main gateway --port 18789

openclaw --profile ops setup
openclaw --profile ops gateway --port 19789

服务也遵循相同的模式:

openclaw gateway install
openclaw --profile ops gateway install --port 19789

使用救援机器人快速入门来建立备用操作员通道。对于跨不同渠道、租户、工作区或运维角色的多个长期运行的 Gateway,请使用通用 profile 模式。

隔离检查清单

请确保以下各项在每个 Gateway 实例中保持唯一:

Setting 用途
OPENCLAW_CONFIG_PATH 每个实例的配置文件
OPENCLAW_STATE_DIR 每个实例的会话、凭据和缓存
agents.defaults.workspace 每个实例的工作区根目录
gateway.port (or --port) 每个实例唯一
派生的浏览器/CDP 端口 见下文

共享其中任何一项都会导致配置、状态或端口冲突。Gateway 启动时会强制要求唯一的状态目录所有权,即使设置了 OPENCLAW_ALLOW_MULTI_GATEWAY=1 也不例外。

Warning

仅设置 OPENCLAW_STATE_DIR 并不能隔离托管 Gateway 服务。服务名称遵循 profile,而非状态目录。在进行初始化流程或服务安装测试时,请使用专用的命名 profile 和唯一端口,或者使用隔离的机器。不要针对临时状态目录安装或重启默认服务。

端口映射(派生)

基础端口 = gateway.port(或 OPENCLAW_GATEWAY_PORT / --port)。

  • 浏览器控制服务端口 = base + 2(仅回环)。
  • 托管的 widget 文档和 A2UI 渲染器资源由 Gateway HTTP 服务器自身提供(与 gateway.port 相同的端口)。
  • 浏览器 profile 的 CDP 端口会自动分配,范围为 browser control port + 9 到 + 108。

如果你在配置或环境变量中覆盖以上任何一项,则必须保持每个实例唯一。

浏览器/CDP 注意事项(常见陷阱)

  • 不要在多个实例上将 browser.cdpUrl 固定为相同的值。
  • 每个实例都需要自己的浏览器控制端口和 CDP 范围(由其 gateway 端口派生)。
  • 如需显式指定 CDP 端口,请为每个实例设置 browser.profiles.<name>.cdpPort。
  • 对于远程 Chrome,请使用 browser.profiles.<name>.cdpUrl(每个 profile、每个实例分别设置)。

手动环境变量示例

OPENCLAW_CONFIG_PATH=~/.openclaw/main.json \
OPENCLAW_STATE_DIR=~/.openclaw \
openclaw gateway --port 18789

OPENCLAW_CONFIG_PATH=~/.openclaw/rescue.json \
OPENCLAW_STATE_DIR=~/.openclaw-rescue \
openclaw gateway --port 19789

快速检查

openclaw gateway status --deep
openclaw --profile rescue gateway status --deep
openclaw --profile rescue gateway probe
openclaw status
openclaw --profile rescue status
openclaw --profile rescue browser status
  • gateway status --deep 可以发现旧安装遗留的 launchd/systemd/schtasks 服务。
  • doctor --deep 还会在无法检查可识别的服务定义或原生服务管理器时进行报告。请恢复检查权限并重新运行 Doctor;不完整的扫描并不能证明不存在其他服务。检查警告绝不授权进行服务清理。
  • gateway probe 出现类似 multiple reachable gateway identities detected 的警告文本,在两种情况下是预期的:你故意运行了多个隔离的 Gateway,或者 OpenClaw 无法证明可达的探测目标是同一个 Gateway。通过 SSH 隧道、代理 URL 或配置的远程 URL 访问同一个 Gateway,只是一个 Gateway 的多种传输方式,即使传输端口不同也是如此。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw