Infrastructure — 03-13 远程服务器管理与OpenClaw部署¶
新加坡测试机创建与部署¶
Dad 的核心决策:参考前一天的 proxy-kr 环境,在 Azure 新建两台新加坡 VM wolf-sg 和 eagle-sg,统一部署 OpenClaw Gateway,SSH 端口统一使用 18822。
技术方案¶
- Azure VM + NSG 开放
18822 - 安装 OpenClaw、配置模型、启动 Gateway
- 后续 Dad 发现未加 DNS 前缀,改为通过域名连接
踩坑:agentDir 配置继承问题¶
Dad 检查 eagle-sg 上的 openclaw.json 时发现异常写法:
踩坑:多 Agent 路由失败¶
- 现象:远程多 agent 无法正确路由
- 根因:对比本地配置发现远程缺少
bindings - 修复:补齐
bindings后路由恢复正常
Bot 互相 @ 死循环事故¶
严重程度:紧急。Bot 在 Mattermost 群里互相 @ 导致死循环。
- [19:27] Dad 紧急要求停止 Gateway
- [19:28] 修复配置并增加双重防护
- [19:30] 将"谨慎 @ bot"规则写入所有 5 个 Agent 的
SOUL.md
Dad 决策:明确写入规则——可以 @ 人类,除非人类要求否则不要 @ bot。这成为后续所有 agent 的铁律。
Mattermost 迁移至新服务器¶
迁移过程¶
Dad 准备新 Mattermost 服务器,要求使用 VM 自带 DNS 前缀域名,不再使用旧的 mm.dora.restry.cn。
踩坑记录¶
- Azure
run-command被长任务锁住:拉镜像占用导致命令冲突,改走 SSH,临时开放18822并上传 SSH key - Docker pull 很慢:Dad 决策切换镜像源到
northacr.azurecr.cn - Mattermost 容器权限错误:
config.json无法创建,config目录被 root 占有,使用 docker 方式修复权限
Bot 账号迁移¶
- 迁移
prism-开头账号到新服务器 - Dad 指出"这几个应该是 bot 账号",立即转换
- 新 Mattermost 上创建
Standup群组并加入所有 bot
eagle-sg 配置切换¶
在 eagle-sg 上替换 OpenClaw 的 Mattermost baseUrl 和 5 个 bot token,重启 Gateway 生效。
部署流程标准化(04-04)¶
插件重装踩坑¶
在 Owl 上按新流程重装插件时报错 Cannot find module 'ws'——重新 clone 后忘记安装依赖。补装 npm install 后恢复。
Dad 决策:统一部署流程,以后不再直接 rsync 源码。
最终标准流程¶
本地 commit + push
→ SSH 到远程服务器
→ git pull
→ rsync 到 extensions
→ 清 jiti 缓存
→ 重启 Gateway
→ 验证日志 / 页面 / WS / slash commands
连接稳定性增强(04-04)¶
断线后消息丢失¶
- 根因:channel 插件仅在消息成功发送到在线客户端时才写入 history,断线时 agent 回复不持久化
- 修复:无论客户端是否在线,都持久化 outbound message
Heartbeat 机制上线¶
- client-web 增加
startHeartbeat/stopHeartbeat - channel 插件支持
ping/pong - relay 模式兼容确认
- 验证:10 轮稳定性测试通过,2 分钟空闲后仍正常收发
手机左滑返回掉线修复¶
- Dad 发现:左滑返回会掉线,但点左上角返回不会
- 根因:iOS 左边缘右滑触发浏览器原生
history.back(),导致 SPA 重载 - 修复:拦截原生 back 手势,改为 SPA 内部导航
群里 Bot 触发策略¶
问题¶
需要实现"真人可触发、bot 不可互相触发"的策略。
踩坑¶
Bot 最初使用了不存在的配置项 ignoreBots——这是 bot 自己编造的字段。
正确方案¶
使用 groupAllowFrom 配置,对非 PM 的 bot 设置只允许人类用户触发。
关键经验¶
Dad 的运维哲学:
1. 不要只修表象,要找根因
2. 修完必须做端到端验证
3. 不要默认甩锅缓存
4. 部署流程要标准化,有 README 指导
5. 远程更新优先走 git pull,不依赖 rsync
验证 Checklist¶
- Gateway running / jiti cache 已清 / 插件加载成功
- WebSocket online /
history.sync正常 - slash commands 响应 / skills 正确展示
- 断线后消息可恢复 / 手机手势正常