玩转openclaw之多网关

缘起

有没有遇到过在外通过飞书或者其他渠道,自动修改或者升级龙虾的时候,死了?

有没有遇到玩的很开心,老板让给每个人员工部署一个龙虾?

openclaw的多网关,就是为这种情况准备的。

原理

原理其实很简单,多网关,其实就是一个程序,多个用户,所有私有文件都分离,理解上,实现原理非常类似于操作系统的多用户。

从配置文件开始,到个人用户目录,全部是隔离的:

这是配置好的文件目录:

tree -a -L 2

请添加图片描述

部署

我的实验环境是在一个docker中的,openclaw已经安装,如果还不知道如何使用docker安装openclaw,推荐:

用docker来安装openclaw

这是启动编排文件:

services:
  openclaw:
    image: docker.cnb.cool/yiqiu/docker/openclaw:0303
    container_name: openclaw
    restart: unless-stopped    
    env_file:
      - ./env.file
    environment:
      TZ: Asia/Shanghai
      HOME: /root
      TERM: xterm-256color
      PLAYWRIGHT_BROWSERS_PATH: /root/.cache/ms-playwright
#    ports:
#      - "18789-18889:18789-18889"
#	   - "19789-19889:19789-19889"	
    volumes:
      - /home/openclaw:/root 
      - ./logs:/tmp/openclaw
    command: [/root/init_openclaw.sh]

networks:
  default:
    external: true
    enable_ipv6: true
    name: netproxy

注意: 我是使用caddy反向代理,所以没用暴露端口,直连删除端口映射注释

配置主进程

启动配置:

openclaw --profile main onboard

请添加图片描述

详细不再赘述,引导配置完成后修改以下绑定lan,并确认端口:

openclaw --profile main config 

请添加图片描述

配置rescue

启动配置:

openclaw --profile rescue onboard

详细不再赘述,引导配置完成后修改以下绑定lan,将端口修改为19789:

openclaw --profile rescue config 

注意:

端口间距:在基础端口之间至少留出 20 个端口,这样派生的浏览器/画布/CDP 端口永远不会冲突

请添加图片描述

启动与确认

手工启动2个网关:

nohup openclaw --profile main gateway > /tmp/openclaw/main_output.log 2>&1 &

nohup openclaw --profile rescue gateway > /tmp/openclaw/main_output.log 2>&1 &

检查启动状态:

openclaw --profile main status
openclaw --profile rescue status

确认一下启动效果:

请添加图片描述

注意:

由于新版的openclaw增加了安全配置,如果不是本机访问,需要修改安全配置,可以手工修改openclaw.json的网络配置部分如下:

  ...
  "gateway": {
    "port": 18789,
    "mode": "local",
    "bind": "lan",
    "controlUi": {
      "enabled": true,
      "dangerouslyAllowHostHeaderOriginFallback": true,
      "allowInsecureAuth": true,
      "dangerouslyDisableDeviceAuth": true
    },
    ...

其他

测试还写了一个简单的启动脚本:

#!/bin/bash
set -e

# 初始化脚本:启动openclaw网关服务
# 作者:根据用户需求定制
# 日期:2026-03-07

echo "================================================"
echo "开始执行openclaw网关服务初始化脚本"
echo "当前时间: $(date)"
echo "================================================"

LOG_DIR="/tmp/openclaw"

# 启动第一个网关服务:main profile
echo "启动openclaw网关服务(main profile)..."
nohup openclaw --profile main gateway > "$LOG_DIR/main_output.log" 2>&1 &
MAIN_PID=$!

sleep 5  # 等待进程启动


# 启动第二个网关服务:rescue profile
echo "启动openclaw网关服务(rescue profile)..."
nohup openclaw --profile rescue gateway > "$LOG_DIR/rescue_output.log" 2>&1 &
RESCUE_PID=$!

sleep 5  # 等待进程启动

echo "验证服务运行状态..."
if kill -0 "$MAIN_PID" 2>/dev/null && kill -0 "$RESCUE_PID" 2>/dev/null; then
    echo "================================================"
    echo "✓ 两个openclaw网关服务都已成功启动"
    echo "  - main profile: PID $MAIN_PID"
    echo "  - rescue profile: PID $RESCUE_PID"
    echo "  - 日志目录: $LOG_DIR"
    echo "================================================"
else
    echo "✗ 服务验证失败,至少有一个服务未运行"
    exit 1
fi

echo "初始化脚本执行完成"

wait $MAIN_PID $RESCUE_PID
echo "所有后台服务已停止!"

配置样例我放在了:

https://github.com/tungtepao/openclaw

小结

  1. 虽然官方文档也推荐做一个rescue的网关,但是他的场景也是有限的,他只能用于修复人工配置或者外部工具问题导致的宕机,无法用于修复升级等由于程序本身问题导致的问题(因为多网关实际是公用一套程序,只是使用不同的配置文件和私有目录,非常类似于同一个主机的不同用户,理论上各自隔离)

  2. 其实这种多网关配置方式,更适合用于教学、给公司职员每人一个龙虾自己养

  3. 这是也是一个实验版本,用于市场的话,强烈建议使用s6管理后台进程来启动openclaw

  4. 在不同的主机环境中,部署openclaw,才能真的做到recue,欢迎关注,期待后续实验

推荐阅读:

彻底解决openclaw的tokens焦虑

自研第一个SKILL-openclaw入门

欢迎关注:

玩转openclaw之多网关

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐