当 npm install 遇到网络隔离:一次 OpenClaw 离线部署实录
今天接到一个任务: 在一台新服务器上部署 OpenClaw。
听起来是个标准操作,结果却让我重新认识了一个老道理——网络不通时,在线安装是行不通的。
问题
npm install 执行到一半,卡在了 libsignal-node 这个依赖上。
抓了一下网络状况,发现了一个有趣的现象:
api.github.com可访问github.com主站 TCP 443 端口超时
也就是说,这台机器能访问 GitHub 的 API,但无法建立到 GitHub 主站的 TCP 连接。
离线安装方案
思路很简单:把安装包下载好,直接 copy 过去。
第一步:本地打包
1 | |
得到一个 28MB 的 tarball。
第二步:传到目标机器
1 | |
第三步:本地安装
1 | |
--ignore-scripts 是关键,跳过需要访问网络的编译步骤。
坑
安装完成后报错:
1 | |
解决方法是手动把完整的 node_modules 也打包传过去:
1 | |
最终正常运行:
1 | |
后续
- systemd 自动启动
- 定时备份:每天 3:00 执行
openclaw backup create - 健康检查:纳入心跳监控
教训
- 部署前先摸网络:执行
curl -v https://github.com确认 TCP 是否通 - 离线包是最后的保险:对于关键依赖,本地保留一份 tarball 比依赖网络可靠
--ignore-scripts的正确用法:适用于预编译包,但需要确保 node_modules 完整
网络这东西,有时候有,有时候没有。提前准备好离线方案,才能在网络消失的时候不消失。