把 OpenClaw 网关从 Docker Compose迁到裸机 macOS 常驻,最大变化往往是谁继承环境变量、谁在重启后拉起进程、令牌落在哪个用户目录。本文按操作系统 → 守护进程 → 监听端口 → 应用配置 → 回调入口五层给出排错顺序,并拆解 18789、launchd 与 systemd --user 对照、以及升级后鉴权漂移相对容器卷的差异;末段附多地区 M4 云 Mac切换 FAQ。
一、分层排错:从哪一层开始看
裸机路线里常见坑是「应用层改完配置,守护进程其实没加载新 plist」。建议顺序:1)时间与磁盘;2)launchctl print 与 LaunchAgent 是否已加载;3)lsof -iTCP:18789 -sTCP:LISTEN 与防火墙;4)网关配置与上游健康;5)Webhook/DNS 是否仍指向旧实例。结论写进 Runbook,比反复重装 npm 更能缩短 MTTR。
二、launchd 与 systemd 用户守护:常驻的边界
macOS 上用用户级 LaunchAgent:写清 ProgramArguments、WorkingDirectory、RunAtLoad、KeepAlive,并把标准输出/错误指到可轮转路径。Linux 跳板可用 systemd --user 对照——核心都是:登录 shell 的 PATH 与守护进程环境是否一致。脚本只改 ~/.zshrc 时,launchd 子进程常读不到。
三、环境变量:SSH 会话 ≠ GUI ≠ launchd
运行时必需的键写进 plist 的 EnvironmentVariables,或包装脚本先 source 受控的 env.sh 再 exec。代理、registry、模型 URL 等在非交互 SSH与launchd各验一次。升级 Node 后核对 which node 前缀是否漂移,以免「进程起得来、握手却失败」。
四、18789 端口与健康检查
18789 先确认监听 127.0.0.1 还是 0.0.0.0:前者仅本机反代,后者对外。同时看反代超时与端口占用;健康检查若不带 TLS/SNI,别把证书问题误判成宕机。Compose 的 healthcheck 更宽容,迁 launchd 后要把等价探针放到反代或外部监控。
若你以容器交付网关,镜像钉扎、卷与健康检查的写法可直接对照 了解更多:OpenClaw Docker Compose 部署与排错教程。
五、升级后鉴权漂移:相对 Docker 路线
Compose 常把令牌挂在命名卷,升级镜像不丢盘。裸机升级 npm/二进制若未备份配置与 refresh token,易「版本新、凭据旧」。升级前做快照与回滚标签,升级后立刻跑最小握手。若前有 mTLS/JWT,公钥轮换要同步到主备两台机。
常驻路线与脚本/npm 选型的大图景,可与此文并列阅读: 了解更多:OpenClaw Gateway 常驻与官方脚本、npm 部署 FAQ。
六、多地区 M4 云 Mac:就近接入与失败切换案例 FAQ
案例:主新加坡 M4 云 Mac,备东京,同一套 plist 与 env.sh 由配置管理下发;DNS 指反代池,健康失败则切权重。注意回调 URL 写死主机名会仍打旧实例。席位轮换与队列设计见
了解更多:跨国团队云 Mac 席位轮换与并联队列 FAQ。
- 双活状态?优先无状态网关 + 外置存储;双写须先定冲突策略。
- 切换多久?看 DNS TTL 与连接池;演练记「最后成功回调」时间戳。
- 云 Mac 与自管混跑?可,须统一 Node 与网关版本矩阵。
在 vpszap 云上,这一切更简单
裸机常驻最怕环境不可复现。vpszap 提供独享物理 M4 Mac Mini、无虚拟化争抢,约五分钟开通并交付 SSH 与 VNC,按天/周/月/季计费、无长约,便于多节点各起一台同构宿主,用同一套 launchd 与 env.sh 做灾备演练。
需要可立刻 SSH 验证 18789 的独占机,欢迎从 vpszap 云端 Mac mini 起步。