玩转openclaw之多网关
摘要:本文介绍了openclaw多网关的部署方法,通过配置隔离的用户目录和端口实现多用户环境。文章详细说明了主进程和救援网关的配置步骤,包括端口设置和启动脚本编写。多网关方案适合教学或企业内部分享使用,但需要注意其局限性——无法解决程序本身问题导致的故障。作者还提供了相关配置样例和进一步阅读推荐,为openclaw用户提供了实用的多网关部署指南。(149字)
玩转openclaw之多网关
缘起
有没有遇到过在外通过飞书或者其他渠道,自动修改或者升级龙虾的时候,死了?
有没有遇到玩的很开心,老板让给每个人员工部署一个龙虾?
openclaw的多网关,就是为这种情况准备的。
原理
原理其实很简单,多网关,其实就是一个程序,多个用户,所有私有文件都分离,理解上,实现原理非常类似于操作系统的多用户。
从配置文件开始,到个人用户目录,全部是隔离的:
这是配置好的文件目录:
tree -a -L 2

部署
我的实验环境是在一个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
小结
-
虽然官方文档也推荐做一个rescue的网关,但是他的场景也是有限的,他只能用于修复人工配置或者外部工具问题导致的宕机,无法用于修复升级等由于程序本身问题导致的问题(因为多网关实际是公用一套程序,只是使用不同的配置文件和私有目录,非常类似于同一个主机的不同用户,理论上各自隔离)
-
其实这种多网关配置方式,更适合用于教学、给公司职员每人一个龙虾自己养
-
这是也是一个实验版本,用于市场的话,强烈建议使用s6管理后台进程来启动openclaw
-
在不同的主机环境中,部署openclaw,才能真的做到recue,欢迎关注,期待后续实验
推荐阅读:
欢迎关注:
更多推荐



所有评论(0)