2026年 OpenClaw 跨平台安装与常驻运行实战:Windows WSL2 与 Linux(systemd)对照清单 + 网关自启动排错与独享远程 Mac SSH 混合工作流 FAQ
把网关与常驻进程当成「可审计的服务」来管:本文用一张 WSL2 与原生 Linux 的对照清单覆盖安装前置条件、监听地址与升级回滚,再用 systemd 自启动分诊表定位「起不来 / 起来又挂 / 权限不对」三类故障,最后整理独享远程 Mac 与本地网关共存的 SSH 混合工作流 FAQ。
1. 为什么要把 WSL2 与 Linux 分开写清单
WSL2 内核是真实的 Linux,但初始化进程、网络命名空间、systemd 是否默认启用、与 Windows 宿主机端口转发都与裸机或云主机不同。把假设写进 Runbook,能避免「在笔记本上一切正常,一到服务器就起不来」的重复踩坑。
若你同时需要本地网关常驻与独享远程 Mac 上跑签名 / Xcode / 钥匙串相关步骤,建议把职责切开:网关与模型路由放在你控制的服务节点(WSL2 或 Linux),重资产与 Apple 生态动作通过 SSH 落到 Mac。这与 在物理 Mac mini 上释放 OpenClaw 与 ClawHub 插件性能 的思路一致——算力与隔离边界要想清楚再接线。
2. 安装前对照清单(WSL2 vs 原生 Linux)
| 检查项 | Windows WSL2(Ubuntu 等) | 原生 Linux(服务器 / 桌面) |
|---|---|---|
| Node / npm 与 PATH | 确认在 wsl.exe 会话内执行,避免混用 Windows 侧 Node;必要时用 which node 固定路径写进 unit。 |
用发行版包管理器或 nvm;systemd 服务里用绝对路径或 Environment=PATH=...。 |
| systemd | 需发行版启用 systemd(WSL 新镜像常见);未启用时用用户级守护或 cron @reboot 作过渡。 |
优先 systemd --user 或系统级 unit;区分 User= 与工作目录。 |
| 监听地址 | 网关默认建议 127.0.0.1,对外发布走 Tailscale / cloudflared 等隧道;勿在 WSL 内直接 0.0.0.0 暴露后忘记 Windows 防火墙边界。 |
同上;云主机还需对齐安全组与本机 nftables/ufw。 |
| 环境变量 | OPENCLAW_* 写入 unit 的 EnvironmentFile,避免只在交互 shell 里 export。 |
同上;注意 /etc/environment 与 unit 加载顺序。 |
| 休眠 / 断网恢复 | 笔记本合盖会冻结 WSL;需要常驻时关休眠或改在始终在线的 Linux 主机上跑网关。 | unit 中加 Restart=always、合理 RestartSec;配合健康检查脚本。 |
3. 常驻运行:Linux systemd 骨架与 WSL2 注意点
下面是一段示意性的 user 级 unit 骨架(路径与命令按你实际安装方式替换)。核心是:WorkingDirectory、EnvironmentFile、非 root 用户、以及可预测的重启策略。
[Unit]
Description=OpenClaw Gateway (user)
After=network-online.target
[Service]
Type=simple
WorkingDirectory=%h/openclaw
EnvironmentFile=%h/.config/openclaw/env
ExecStart=/usr/bin/node %h/openclaw/dist/gateway.js
Restart=always
RestartSec=5
[Install]
WantedBy=default.target
在 WSL2 中,除 unit 本身外,还要在 Runbook 里记一笔:是否由 systemd 拉起、Windows 开机后 WSL 是否自动启动、以及是否需要从 Windows 侧用计划任务执行 wsl -u user service start ...。否则「重启电脑后网关没起来」会反复出现。
4. 网关自启动排错决策表
| 现象 | 优先假设 | 建议动作(顺序) |
|---|---|---|
systemctl --user start 立即失败 |
ExecStart 路径错误、Node 不在 PATH、脚本无执行权限 | systemctl --user status + journalctl --user -u unit -e;改用绝对路径;手跑同一行命令对照。 |
| 启动后数秒退出,不断重启 | 配置缺失、端口占用、依赖服务未就绪 | 跑官方/内置诊断(如 doctor);查 OPENCLAW_*;ss -lntp 看监听冲突;必要时拉长 RestartSec 避免打爆日志。 |
| 本机能 curl,外网进不来 | 只监听了 127.0.0.1、隧道未起、防火墙 / 安全组 | 确认设计是「本机 + 隧道」而非误暴露;按隧道文档检查进程与 token;云厂商安全组单独核对。 |
| WSL 里 OK,Windows 浏览器访问不了 | WSL2 与 Windows 的 localhost 转发、端口未转发 | 用 WSL 文档中的端口转发或统一改为隧道访问;不要在文档里写死「一定互通」的假设。 |
5. 独享远程 Mac SSH 混合工作流 FAQ
5.1 网关放在 Linux,Mac 只做什么?
常见切分:Linux(或 WSL2 常驻机)跑网关、插件调度、对公网或内网隧道的出口;独享远程 Mac 跑Xcode、签名、钥匙串、模拟器或须 macOS 的 CLI。SSH 用密钥登录、专用账户、目录隔离,避免与图形会话抢资源。
5.2 如何避免「一条 SSH 串起全世界」的风险?
为自动化单独开受限账户;authorized_keys 加 command= 或配合跳板机;敏感环境变量只在 Mac 侧加载。需要 iOS 流水线衔接时,可参考 Fastlane + SSH 在远程 Mac mini 上自动打包 的账户与密钥分层思路。
5.3 CI 或长任务占满 Mac,网关延迟变高怎么办?
把网关与重 CI 拆到不同主机,或在 Mac 上限并发、错峰跑构建;对远程 CI 的观测可先量 CPU/内存与磁盘 I/O,再改并发与 Derived Data 策略,避免在错误层级调参。
5.4 混合架构下日志与排错顺序
- 先确认网关进程与监听(本机)。
- 再查隧道 / 反向代理是否存活。
- 最后 SSH 到 Mac 看任务队列与构建日志,避免在错误层级浪费时间。
6. 在 Mac mini 上收束「必须 macOS 的那一半」
WSL2 与 Linux 很适合跑常驻网关与自动化编排,但签名、Xcode、钥匙串与 Apple 生态工具链仍然以 macOS 为真源。把这部分放到一台长期在线、低噪音、低待机能耗的 Mac mini M4 上,用 SSH 做确定性接入,整体架构会更简单:少一层虚拟机嵌套,少一堆驱动与更新变量,运维心智负担明显下降。
Mac mini M4 在 Apple Silicon 统一内存带宽、macOS 稳定性与 Gatekeeper / SIP 等安全机制上,对「无人值守 + 自动化」场景更友好;体积与功耗适合 7×24 放在角落跑。若你正在搭 OpenClaw 混合工作流,把 Linux 侧网关与 Mac 侧工具链各就各位,往往比强行在单一系统里硬凑更省心、也更易写进 Runbook。
若你希望把远程 Mac 当成可合同化的生产资源,而不是个人临时笔记本,现在就可以从一台稳定的 Mac mini 起步,让网关与 macOS 工具链各展所长。