解决 2GB 内存服务器安装 OpenClaw 的各种坑
问题总览
┌─────────────────────────────────────────────────────────────────┐
│ OpenClaw 在 CentOS 9 + 2GB 内存上的问题链 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 2GB 内存 → OOM Killer → 进程被杀 / 磁盘 I/O 爆炸 │
│ ↓ │
│ 加 Swap 解决 → 安装成功 │
│ ↓ │
│ Gateway 只监听 127.0.0.1 → 外部无法访问 │
│ ↓ │
│ 修改 bind=lan → 缺少 allowedOrigins 配置 │
│ ↓ │
│ 添加 controlUi 配置 → 服务启动成功 │
│ ↓ │
│ HTTP 访问被浏览器拦截 → 需要 HTTPS │
│ ↓ │
│ 宝塔 + SSL 证书 → 完成 │
│ │
└─────────────────────────────────────────────────────────────────┘
一、环境准备
1.1 系统要求
| 项目 | 要求 |
|---|---|
| 系统 | CentOS Stream 9 |
| 内存 | ≥ 2GB(强烈建议加 Swap) |
| Node.js | ≥ 22 |
1.2 增加 Swap(必须!)
原因:2GB 内存安装时会 OOM,进程被杀或磁盘 I/O 爆炸
# 创建 4GB swap
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 验证
free -h
# 开机自动挂载(可选)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# 安装完成后,可以关闭 swap 释放磁盘空间(但建议保留,以防运行时也需要):
sudo swapoff /swapfile sudo rm /swapfile
二、安装 Node.js 22
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
# 安装 Node.js 22
nvm install 22
nvm use 22
# 验证
node -v # 应显示 v22.x.x
三、安装 OpenClaw
# 防止 SSH 断开导致安装中断
## 1. 创建 tmux 会话
tmux new -s install
## 2. 在 tmux 里执行安装
rm -rf /usr/lib/node_modules/openclaw
npm cache clean --force
npm install -g openclaw@latest --no-audit --no-fund --maxsockets=1
## 3. 如果卡住不想等,按 Ctrl+B 然后按 D 退出(安装继续)
## 重新连接用:tmux attach -t install
## 4. 安装完成后验证
which openclaw
openclaw --version
tmux 常用快捷键
┌────────────────────┬──────────────────────────────┐
│ 操作 │ 快捷键 │
├────────────────────┼──────────────────────────────┤
│ 退出会话(不关闭) │ Ctrl+B 然后按 D │
├────────────────────┼──────────────────────────────┤
│ 重新连接 │ tmux attach -t install │
├────────────────────┼──────────────────────────────┤
│ 强制关闭会话 │ tmux kill-session -t install │
└────────────────────┴──────────────────────────────┘
四、配置外网访问
4.1 问题分析
┌──────────────────────────────────────────────────────┐
│ Gateway 默认配置 │
├──────────────────────────────────────────────────────┤
│ bind: loopback (127.0.0.1) ← 只允许本地访问 │
│ 浏览器访问 IP:18789 → ❌ 无法连接 │
└──────────────────────────────────────────────────────┘
需要改成
┌──────────────────────────────────────────────────────┐
│ Gateway 外网访问配置 │
├──────────────────────────────────────────────────────┤
│ bind: lan │
│ controlUi.dangerouslyAllowHostHeaderOriginFallback │
│ 浏览器访问 IP:18789 → ✅ 可以访问 │
└──────────────────────────────────────────────────────┘
4.2 修改配置文件 (可以试试不改)
vi ~/.openclaw/openclaw.json
修改 gateway 部分:
"gateway": {
"port": 18789,
"mode": "local",
"controlUi": {
"dangerouslyAllowHostHeaderOriginFallback": true
},
"auth": {
"mode": "token",
"token": "你的token"
}
}
4.3 修改 systemd 服务
vi ~/.config/systemd/user/openclaw-gateway.service
修改 ExecStart:
ExecStart=/usr/bin/node /usr/lib/node_modules/openclaw/dist/index.js gateway --bind lan
重启服务:
systemctl --user daemon-reload
openclaw gateway restart
openclaw gateway status
五、配置 HTTPS(解决浏览器安全限制)
5.1 为什么需要 HTTPS
┌──────────────────────────────────────────────────────┐
│ 浏览器安全策略 │
├──────────────────────────────────────────────────────┤
│ HTTP + 非localhost → ❌ "device identity required" │
│ HTTPS + 域名 → ✅ 正常访问 │
└──────────────────────────────────────────────────────┘
5.2 方案:宝塔面板 + Let's Encrypt
步骤 1:安装宝塔
curl -sSO https://download.bt.cn/install/install_panel.sh
bash install_panel.sh ed8484bec
步骤 2:配置反向代理
- 登录宝塔(
http://IP:8888) - 添加站点(填写域名)
- SSL → Let's Encrypt → 申请证书
- 反向代理 → 目标 URL:
http://127.0.0.1:18789
步骤 3:访问
https://你的域名
六、设备配对
6.1 获取 Token
cat ~/.openclaw/openclaw.json | grep token
6.2 配对流程
┌─────────────────────┐ ┌─────────────────────┐
│ 浏览器访问 HTTPS │ → │ 输入 Token │
└─────────────────────┘ └─────────────────────┘
↓
┌─────────────────────┐ ┌─────────────────────┐
│ Chat 页面配对请求 │ → │ 服务器端批准 │
└─────────────────────┘ └─────────────────────┘
参考官方文档:https://docs.openclaw.ai/channels/pairing
七、常见问题速查
| 问题 | 解决方案 |
|---|---|
| 进程被杀 / OOM | 加 Swap |
| 无法访问 18789 | 改 bind=lan + controlUi 配置 |
| 浏览器报错 device identity | 用 HTTPS |
| 找不到 pairing 命令 | 用 openclaw pairing |
| Gateway 启动失败 | 检查日志:journalctl --user -u openclaw-gateway.service |
八、命令速查
# Gateway 管理
openclaw gateway start
openclaw gateway stop
openclaw gateway restart
openclaw gateway status
# 配置
openclaw config dir
cat ~/.openclaw/openclaw.json
# 日志
journalctl --user -u openclaw-gateway.service -n 50 --no-pager
tail -f /tmp/openclaw/openclaw-*.log
# 配对
openclaw pairing list
openclaw pairing approve <channel> <code>
九、架构图
┌─────────────────────────────────────────────────────────────────┐
│ 外部访问 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 宝塔面板 (443/HTTPS) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ SSL 证书 (Let's Encrypt) │ │
│ │ 反向代理 → http://127.0.0.1:18789 │ │
│ └───────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ OpenClaw Gateway (bind: lan, port: 18789) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 配置文件: ~/.openclaw/openclaw.json │ │
│ │ Token 认证 │ │
│ │ 设备配对 │ │
│ └───────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ AI 模型 (GLM-5 / 通义千问 / 其他) │
└─────────────────────────────────────────────────────────────────┘
十、完成检查清单
- Swap 已启用
- Node.js 22 已安装
- OpenClaw 已安装
- Gateway bind=lan
- controlUi 配置已添加
- 宝塔面板已安装
- SSL 证书已配置
- 反向代理已设置
- 设备已配对
- Chat 页面正常
文档版本:2026-02-25 适用版本:OpenClaw 2026.2.23 测试环境:CentOS Stream 9 + 2GB 内存