当前位置: 首页 > news >正文

【OpenClaw】一台 Windows 主机部署双 Gateway:两个微信 + 一台主机 + 模型隔离完整踩坑实录

如何在一台 Windows 宿主机上跑两个完全独立的 OpenClaw Gateway,各自绑定不同微信、使用不同 AI 模型,还能互不干扰?本文记录完整的配置、踩坑和修复过程。

前言

需求:一个微信号对接 DeepSeek Flash(快速、便宜、日常对话),另一个微信号对接 DeepSeek Pro(翻译审校、长文档处理)。虽然 OpenClaw 单个 Gateway 原生支持多微信账号,但所有账号共享同一个 AI 模型和 Workspace

如果你需要不同微信使用不同模型、独立会话上下文、互不干扰,就需要两个独立 Gateway。

本文将基于openclaw 2026.3.23-2 + Node.js 24.2.0 + Windows 11,从头配置双 Gateway 并记录所有踩坑。

架构

关键设计原则:端口隔离、配置隔离、状态隔离、Agent 隔离。四个维度全部独立,才能保证稳定。

环境准备

组件版本说明
OpenClaw2026.3.23-2npm 全局安装
Node.js24.2.0Windows 端
微信插件@tencent-weixin/openclaw-weixin 2.0.1已安装
OSWindows 11

确认当前只有一个 Gateway 在运行:

curlhttp://127.0.0.1:18789/health# {"ok":true,"status":"live"}

第一步:创建第二个配置文件

以当前openclaw.json为模板:

cp~/.openclaw/openclaw.json ~/.openclaw/openclaw-gateway2.json

用 Node.js 修改关键字段:

constfs=require('fs');constpath='C:/Users/<用户名>/.openclaw/openclaw-gateway2.json';constcfg=JSON.parse(fs.readFileSync(path,'utf8'));// 修改端口和模型cfg.gateway.port=19789;cfg.agents.defaults.model.primary='deepseek/deepseek-v4-pro[1m]';cfg.agents.defaults.workspace=String.raw`C:\Users\<用户名>\.openclaw\workspace-gateway2`;cfg.agents.defaults.timeoutSeconds=600;fs.writeFileSync(path,JSON.stringify(cfg,null,2),'utf8');

⚠️端口间隔:G2 使用 19789,与 G1 的 18789 间隔至少 20,因为 browser control(+2)、canvas 等端口是自动派生的。

第二步:创建独立目录

mkdir$env:USERPROFILE\.openclaw\workspace-gateway2 mkdir$env:USERPROFILE\.openclaw\state-gateway2

⚠️ 最关键的一个坑

绝对不要用 junction/symlink 共享 agents 目录!

# ❌ 错误做法:会导致两 Gateway 共享 session 文件,产生锁冲突 mklink /J state-gateway2\agents ~\.openclaw\agents # ✅ 正确做法:extensions 可以共享,agents 必须独立 mklink /J state-gateway2\extensions ~\.openclaw\extensions

共享 agents 的后果:

现象原因
Gateway 进程静默崩溃两个进程争抢同一个 session 文件的写锁
日志无任何错误文件锁竞争发生在 OS 层,JS 层捕获不到
微信消息"请求超时"Session 被锁住,模型无法写入回复

第三步:Agent 初始化

清空 G2 的 agents 目录,让 openclaw 首次启动时自动创建:

rm-rf~/.openclaw/state-gateway2/agents/*

启动后 openclaw 自动生成独立 Agent:

Agent ID: gateway2 Session Key: agent:gateway2:main

与 G1 的agent:main:main完全隔离。

第四步:编写启动脚本

# start-openclaw-gateway2.ps1$ErrorActionPreference='Stop'# === 独立配置 ===$env:OPENCLAW_CONFIG_PATH ="$env:USERPROFILE\.openclaw\openclaw-gateway2.json"$env:OPENCLAW_STATE_DIR ="$env:USERPROFILE\.openclaw\state-gateway2"# === 只杀自己的端口进程 ===$gatewayPid=Get-NetTCPConnection-LocalPort 19789-State Listen `-ErrorAction SilentlyContinue|Select-Object-ExpandProperty OwningProcess-First 1if($gatewayPid){Stop-Process-Id$gatewayPid-Force}Start-Sleep-Seconds 1# === PATH 修正:避免 spawn openclaw ENOENT ===$npmGlobalBin=Join-Path$env:APPDATA'npm'$env:PATH ="$npmGlobalBin;$env:PATH"# === 启动 ===$nodeExe=(Get-Commandnode).Source$openclawMjs="$env:APPDATA\npm\node_modules\openclaw\openclaw.mjs"Start-Process-FilePath"cmd.exe"-ArgumentList"/d /c `"$nodeExe`" `"$openclawMjs`" gateway --port 19789 > `"$env:USERPROFILE\openclaw-gateway2-manual.log`" 2>&1"-WindowStyle Hidden

同样,G1 的启动脚本也要改为按端口查杀

# ✅ G1 只杀 18789 端口的进程,不会误杀 G2$gatewayPid=Get-NetTCPConnection-LocalPort 18789-State Listen `|Select-Object-ExpandProperty OwningProcess-First 1

❌ 不要用CommandLine -like "*openclaw*"来匹配进程,那会把另一个 Gateway 也杀掉。

第五步:登录第二个微信

$env:OPENCLAW_CONFIG_PATH ="$env:USERPROFILE\.openclaw\openclaw-gateway2.json"$env:OPENCLAW_STATE_DIR ="$env:USERPROFILE\.openclaw\state-gateway2"openclaw channels login--channel openclaw-weixin

⏱️ 二维码约 2 分钟有效,拿另一个微信扫码。超时需要重新执行。

第六步:配置 Workspace

复制基础文件到 G2:

cp~/.openclaw/workspace/AGENTS.md ~/.openclaw/workspace-gateway2/cp~/.openclaw/workspace/SOUL.md ~/.openclaw/workspace-gateway2/cp~/.openclaw/workspace/USER.md ~/.openclaw/workspace-gateway2/cp~/.openclaw/workspace/TOOLS.md ~/.openclaw/workspace-gateway2/

根据 G2 的用途定制AGENTS.md。比如 G2 侧重翻译审校,可以加入技能调度规则:

## Deep Review Mode 触发词:深度审校、深度翻译、法律翻译、合同翻译 当触发时,分三步处理: 1. 直译,保持原文结构 2. 检查术语一致性、逻辑连贯性 3. 优化中文表达,附审校说明

验证

健康检查

curlhttp://127.0.0.1:18789/health# G1# {"ok":true,"status":"live"}curlhttp://127.0.0.1:19789/health# G2# {"ok":true,"status":"live"}

端口确认

netstat-ano|findstr"18789 18791 19789 19791"

预期输出:

TCP 127.0.0.1:18789 LISTENING <PID1> TCP 127.0.0.1:18791 LISTENING <PID1> TCP 127.0.0.1:19789 LISTENING <PID2> TCP 127.0.0.1:19791 LISTENING <PID2>

双微信确认

openclaw channels list# G1: openclaw-weixin a2dbb69f5a80-im-bot: configured, enabled$env:OPENCLAW_CONFIG_PATH="..."openclaw channels list# G2: openclaw-weixin 5c21986455d7-im-bot: configured, enabled

互不干扰测试

重启 G1,验证 G2 不受影响:

# 重启 G1./start-openclaw-gateway.ps1# G2 仍然存活curlhttp://127.0.0.1:19789/health# {"ok":true,"status":"live"}

完整的踩坑记录

#问题日志表现根因修复
1G1 重启后 G2 消失G2 端口消失查杀脚本CommandLine -like "*openclaw*"误杀按端口查杀进程
2Gateway 静默崩溃进程消失,无错误日志junction 共享 agents 目录,session 文件锁冲突独立 agents 目录
3spawn openclaw ENOENT崩溃日志有 ENOENTnpm bin 不在 Gateway 进程 PATH启动脚本加$env:PATH
4Request timed outembedded run timeout默认 timeout 30s,系统 prompt 41KB+ 首次请求慢设 600s
5微信消息无回复有 typing 无回复DeepSeek 超时 / session 锁冲突修 1+2+4
6图片分析卡住Navigation blocked: file://浏览器不支持本地文件协议改用多模态模型直调 API
7JSON 解析失败Unexpected tokenPowerShellSet-Content -Encoding UTF8写入 BOMNode.js 写配置,不带 BOM

最终配置对照

维度Gateway 1Gateway 2
端口18789 / 1879119789 / 19791
配置文件openclaw.jsonopenclaw-gateway2.json
State 目录~/.openclaw/~/.openclaw/state-gateway2/
Workspace~/.openclaw/workspace/~/.openclaw/workspace-gateway2/
启动脚本start-openclaw-gateway.ps1start-openclaw-gateway2.ps1
AI 模型DeepSeek V4 FlashDeepSeek V4 Pro
Agent IDmaingateway2
Session Keyagent:main:mainagent:gateway2:main
上下文窗口128K1M
微信账号账号 A账号 B
超时设置600s600s

FAQ

Q: 能不能在同一台机器上跑三个 Gateway?

可以。端口再加 20(19789 + 20 = 19809),依此类推。注意内存占用和 DeepSeek API 并发限制。

Q: 双 Gateway 能用同一个 API Key 吗?

可以。DeepSeek 按 token 计费,两个 Gateway 共享同一个 Key,所有消耗合并计入同一个账单。如果需要分开核算(例如不同部门/项目),可以申请两个 API Key 分别配置。

Q: 一号微信的消息会不会串到二号?

不会。每个 Gateway 监听自己的端口,微信账号绑定不同的 im-bot ID,会话完全隔离。

Q: 需要每次开机手动启动两个 Gateway 吗?

可以把两个启动脚本都加入 Windows 启动文件夹或计划任务,开机自动启动。注意 G1 和 G2 之间加 30 秒延迟,避免同时初始化冲突。


如果您觉得有用,欢迎点赞、转发、评论、关注

http://www.jsqmd.com/news/1070093/

相关文章:

  • Harness 教程 08:日志查看与故障排查:Execution History、Step Log、Delegate 日志与 Kubernetes 事件定位:国内网络环境落地版
  • 一条产线该不该上机器人——给集成商/工程师的决策框架与算账逻辑
  • 亮相国际应急顶级平台|百分点科技发布应急救援智能体ResQ-AI
  • VRTK v4农场示例:基于Tilia架构的现代VR开发实践
  • 判断闰年日期
  • 什么是HVV行动(网络攻防演习)?什么是红蓝对抗?(非常详细)零基础入门到精通,收藏这一篇就够了
  • 解析编程语言的新范式:Tree-sitter 如何重塑代码分析工具
  • Claude Code 安装与配置教程
  • 安达发|揭开照明行业“生产计划排单软件神器”的神秘面纱!
  • 第七:PC端自动化测试实战教程-pywinauto等待方法大集合
  • 2026年AI应用找工作,简历写了等于没写的那几个坑
  • Markwhen深度解析:从文本到时间线的技术突破与实践指南
  • Testify:Go 测试这件事,它帮你省掉一半代码
  • knowhere | 第九课:认证、额度、计费与限流
  • qsort :超级打包工
  • python psycopg2库 操作postgresql
  • ByteArrayInputStream和DataInputStream的源码分析和使用方法详细分析前言)UTF-8 编码规则合集 - 【Java—JDK源码】IO的使用和IO相关的源码(14)1
  • 【硬核拆解】飞利浦 THE TINA (TAV9000F/93) 评测:复古外壳下的现代嵌入式系统逻辑
  • Spree Commerce:开源无头电商平台,B2B 和跨境都能用
  • AI价值:理性评估三维度
  • 3步构建AI投研框架:用Serenity-skill提升你的投资研究效率
  • 技术深度解析:1Panel批量操作架构设计与多服务器并行管理实战
  • Neural Amp Modeler终极指南:从零开始打造专业级吉他音箱模拟
  • AGI时代,万物趋于免费,真正稀缺的只剩这5样东西
  • AI写论文工具深度测评:通用大模型与专业工具的真实表
  • 浏览器AI助手终极指南:5分钟搭建本地智能浏览体验
  • 小程序商城做的比较好的品牌有哪些?要看是否适合当前经营节奏
  • BK4819射频芯片架构深度解析:如何实现低成本对讲机的高性能集成
  • AI电商工具测评!商品图片AI味太重怎么办?试试这些工具
  • 外包工日常管理合规指南:从合同到结算,SaaS系统如何嵌入控制点