我花了 68 块钱(一年)买了阿里云提供的一键部署 OpenClaw 的轻量型服务器,并且成功部署。
我发现这样的轻量型服务器在更新 OpenClaw 上有诸多坑点,于是我写了一份教程,记录了我踩的坑点以及你可以一步步照着做的更新 OpenClaw 的教程。
适用于 2 核 2GB 内存的轻量型服务器(如阿里云轻量应用服务器)
- 背景说明
- 核心问题
- 解决方案概述
- 详细操作步骤
- 常见问题排查
- 后续更新流程
开箱即用OpenClaw,AI云电脑秒变您的7×24小时全能AI助理-天翼云电脑(政企版)-最佳实践 – 天翼云OpenClaw – 9.9元定制7*24 AI助理 – 阿里云一键部署OpenClaw/ClawdBot-火山引擎在云端秒级部署OpenClaw全能助手
国内的云服务器厂商(例如阿里云、腾讯云、天翼云、火山引擎等)都提供了一键部署 OpenClaw 的服务,但也基本上都是买一台云主机、云电脑,然后提供了镜像服务,在上面部署好了 OpenClaw。
然而这样小型或轻量型的云服务器,受限于内存/CPU核都非常少,甚至无法完成对 OpenClaw 的更新,这对于像 OpenClaw 这样的 AI Assistant 项目,尤其是在最近非常火热,且可预见未来仍然会快速更新的开源项目而言,是几乎无法接受的。OpenClaw 仍有很多安全问题,以及足够多的特性可以被完善。
如果我们真打算长期使用 OpenClaw,并且决定在小型或轻型服务器上部署(没有 Mac Mini),那么我们必须要解决掉更新的问题。
- 小型服务器:2 核 2GB 内存 + 40GB 硬盘
- 操作系统:Alibaba Cloud Linux 3 (类似 CentOS 8)
- glibc 版本:2.32
- Node.js 版本:v24.13.0
OpenClaw 依赖 node-llama-cpp 包,该包需要编译大量 C++ 代码(llama.cpp)。编译过程极度消耗内存:
- 内存不足:2GB 内存无法支撑 C++ 编译过程,会被 Linux OOM Killer 强制终止
- 编译工具缺失:需要 cmake、g++、make 等编译工具
- 编译时间长:即使有足够内存,单核编译也需要很长时间
npm install -g openclaw@latest # 输出:Killed
原因:npm 在安装时触发 node-llama-cpp 的 postinstall 脚本,尝试编译 C++ 代码,内存瞬间耗尽。
npm error [node-llama-cpp] Failed to build llama.cpp npm error Error: cmake not found
原因:系统缺少 cmake、g++ 等编译工具。
如果在高版本系统(如 Ubuntu 24.04,glibc 2.39)上编译,然后直接复制到低版本系统(Alibaba Cloud Linux 3,glibc 2.32),会报错:
/lib64/libc.so.6: version 'GLIBC_2.34' not found
原因:Linux 二进制兼容规则是”向下兼容”,高版本编译的程序无法在低版本系统运行。
- 在大型服务器上使用 Docker 创建兼容的编译环境
- 编译完整的 node_modules(包含所有依赖和二进制文件)
- 打包传输到小型服务器
- 解压部署,无需二次编译
- 环境隔离:在大服务器上模拟小服务器的系统环境
- glibc 兼容:使用 Debian 11 (glibc 2.31) 编译,确保在 glibc 2.32 的系统上运行
- 可重复性:每次更新都能用相同的方法
在大服务器和小服务器上分别执行:
# 检查 CPU 架构(必须一致) uname -m # 输出应该都是:x86_64 # 检查 Node.js 版本(大版本应一致) node -v # 大服务器:v24.11.1 # 小服务器:v24.13.0 # ✓ 都是 v24,兼容 # 检查 glibc 版本(关键!) ldd --version # 大服务器:2.39 (Ubuntu 24.04) # 小服务器:2.32 (Alibaba Cloud Linux 3) # ✗ 不兼容,需要使用 Docker
兼容性判断:
- ✓ CPU 架构相同
- ✓ Node.js 大版本相同
- ✗ glibc 版本:大服务器 > 小服务器(需要 Docker 降级编译)
在大服务器上执行:
# 更新软件包列表 apt update # 安装 Docker apt install -y docker.io # 启动 Docker 服务 systemctl start docker # 验证安装 docker --version
如果你的服务器使用代理(如 Clash),需要让 Docker 也能访问网络:
# 创建配置目录 mkdir -p /etc/systemd/system/docker.service.d # 创建代理配置文件 cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF [Service] Environment="HTTP_PROXY=http://127.0.0.1:7891" Environment="HTTPS_PROXY=http://127.0.0.1:7891" Environment="NO_PROXY=localhost,127.0.0.1" EOF # 重载配置并重启 Docker systemctl daemon-reload systemctl restart docker
在大服务器上执行:
# 进入工作目录 cd /data-1/git-projects/openclaw # 启动 Debian 11 容器(glibc 2.31,兼容小服务器的 2.32) docker run -it -v $(pwd):/dist debian:bullseye bash
命令解释:
docker run -it:交互式运行容器-v $(pwd):/dist:将当前目录挂载到容器的 /dist 目录debian:bullseye:使用 openclaw Debian 11 镜像(glibc 2.31)bash:启动 bash shell
进入容器后,执行以下命令:
# 1. 更新软件包列表 apt update # 2. 安装基础编译工具 apt install -y curl g++ make python3 git # 3. 安装 Python pip(用于安装新版 cmake) apt install -y python3-pip # 4. 使用 pip 安装 cmake(Debian 11 自带的 cmake 版本太低) pip3 install cmake # 5. 创建软链接,让系统使用新版 cmake ln -sf /usr/local/bin/cmake /usr/bin/cmake # 6. 验证 cmake 版本(应该 >= 3.19) cmake --version
为什么需要这些工具:
g++:C++ 编译器,编译 llama.cppmake:构建工具cmake:跨平台构建系统python3:某些构建脚本需要git:npm 安装时拉取 GitHub 依赖
在容器内继续执行:
# 使用 NodeSource 安装 Node.js 24 curl -fsSL https://deb.nodesource.com/setup_24.x | bash - apt install -y nodejs # 验证安装 node -v npm -v
# 进入挂载目录 cd /dist # 设置并行编译(利用大服务器的多核优势) export MAKEFLAGS="-j$(nproc)" export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) # 安装 OpenClaw(会自动编译 node-llama-cpp) npm install openclaw@latest --no-audit
编译过程说明:
- 这个过程可能需要 5-15 分钟,取决于 CPU 性能
- 你会看到大量的编译日志(
Building CXX object...) - 编译成功后会显示
added XXX packages
exit
退出后,编译好的 node_modules 文件夹会保留在大服务器的当前目录。
# 确保在包含 node_modules 的目录 cd /<你的父目录>/openclaw # 打包整个 node_modules(包含所有依赖和编译产物) tar -zcvf openclaw_full_dist.tar.gz node_modules/ # 查看压缩包大小 ls -lh openclaw_full_dist.tar.gz
为什么打包整个 node_modules:
openclaw依赖的node-llama-cpp等包都在 node_modules 中- 编译好的 C++ 二进制文件(.node 文件)也在其中
- 打包整体确保依赖完整,避免版本冲突
# 使用 scp 传输(替换为你的小服务器 IP) scp -P 22 openclaw_full_dist.tar.gz root@<替换为你的小服务器 IP>:/root/
传输建议:
- 如果两台服务器在同一内网(VPC),使用内网 IP 更快且免费
- 如果跨区域,使用公网 IP,确保防火墙开放 22 端口
- 压缩包大小通常在 500MB-1GB,传输时间取决于带宽
在小服务器上执行:
# 创建独立的部署目录 mkdir -p /opt/openclaw # 解压到目标目录 tar -zxvf /root/openclaw_full_dist.tar.gz -C /opt/openclaw/ # 验证目录结构 ls -l /opt/openclaw/ # 应该看到 node_modules 目录
为什么选择 /opt/openclaw:
/opt是 Linux 标准中存放”附加软件”的目录- 独立目录避免与系统的 npm 全局安装冲突
- 方便整体替换和管理
由于小服务器内存有限,需要增加 Node.js 的内存限制:
# 创建启动脚本 cat > /usr/local/bin/openclaw <<'EOF' #!/bin/bash export NODE_OPTIONS="--max-old-space-size=1536" exec node /opt/openclaw/node_modules/openclaw/openclaw.mjs "$@" EOF # 赋予执行权限 chmod +x /usr/local/bin/openclaw
脚本说明:
NODE_OPTIONS="--max-old-space-size=1536":设置 Node.js 堆内存上限为 1.5GBexec node ...:执行 OpenClaw 的主文件"$@":传递所有命令行参数
# 查找所有 openclaw 命令位置 which -a openclaw # 如果有旧版本(如 /usr/bin/openclaw),删除它 rm /usr/bin/openclaw # 删除旧的 node_modules(如果存在) rm -rf /usr/lib/node_modules/openclaw
# 测试版本 openclaw --version # 应该输出:2026.1.30(或最新版本号) # 查看命令位置 which openclaw # 应该输出:/usr/local/bin/openclaw # 查看内存使用 free -h
症状:
Error: Cannot find module '/opt/openclaw/node_modules/openclaw/bin/openclaw.js'
原因:OpenClaw 的入口文件是 .mjs 而不是 .js
解决:
# 查找实际的入口文件 find /opt/openclaw -name "openclaw.*" # 更新启动脚本中的路径
症状:
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
原因:Node.js 默认内存限制太小
解决:确保启动脚本中设置了 NODE_OPTIONS="--max-old-space-size=1536"
症状:
/lib64/libc.so.6: version 'GLIBC_2.34' not found
原因:编译环境的 glibc 版本高于运行环境
解决:重新在 Docker 中使用 Debian 11 (glibc 2.31) 编译
症状:
Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded
原因:Docker 无法访问网络或代理配置不正确
解决:参考 1.3 配置 Docker 代理
当 OpenClaw 发布新版本时,重复以下步骤:
# 进入工作目录 cd /<你的父目录>/openclaw # 清理旧的 node_modules rm -rf node_modules/ # 启动 Docker 容器 docker run -it -v $(pwd):/dist debian:bullseye bash # 在容器内执行(可以复制粘贴整段) apt update && \ apt install -y curl g++ make python3 git python3-pip && \ pip3 install cmake && \ ln -sf /usr/local/bin/cmake /usr/bin/cmake && \ curl -fsSL https://deb.nodesource.com/setup_24.x | bash - && \ apt install -y nodejs && \ cd /dist && \ export MAKEFLAGS="-j$(nproc)" && \ export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) && \ npm install openclaw@latest --no-audit && \ exit # 打包 tar -zcvf openclaw_full_dist.tar.gz node_modules/
scp -P 22 openclaw_full_dist.tar.gz root@小服务器IP:/root/
# 备份旧版本(可选) mv /opt/openclaw /opt/openclaw.bak # 创建新目录 mkdir -p /opt/openclaw # 解压新版本 tar -zxvf /root/openclaw_full_dist.tar.gz -C /opt/openclaw/ # 验证 openclaw --version
可以将上述步骤写成脚本,方便以后使用。
free -h
- 作用:查看系统内存使用情况
- 输出说明:
total:总内存used:已使用内存free:完全空闲的内存buff/cache:用于缓存的内存(可以被回收)available:实际可用内存(free + 可回收的 cache)Swap:虚拟内存(使用硬盘空间)
为什么 free 很小但 available 很大: Linux 会利用空闲内存做文件缓存,提高性能。当程序需要内存时,这些缓存会被立即释放。
# 创建 4GB Swap 文件 dd if=/dev/zero of=/swapfile bs=1M count=4096 # 设置权限 chmod 600 /swapfile # 格式化为 swap mkswap /swapfile # 启用 swap swapon /swapfile # 查看 swap 状态 free -h
Swap 的作用:
- 当物理内存不足时,将不常用的数据移到硬盘
- 防止程序因内存不足被 OOM Killer 杀死
- 缺点:速度比物理内存慢很多
scp -P 22 文件名 用户@主机:/目标路径
scp:Secure Copy,基于 SSH 的安全文件传输-P 22:指定 SSH 端口(默认 22)- 支持公网 IP 和内网 IP
ln -sf 源文件 目标链接
ln:创建链接-s:创建符号链接(类似 Windows 快捷方式)-f:强制覆盖已存在的链接
Docker 是一个轻量级的虚拟化技术,可以在一台机器上运行多个隔离的”容器”。
与虚拟机的区别:
- 虚拟机:模拟整个操作系统,资源占用大
- Docker:共享宿主机内核,只隔离应用环境,资源占用小
| 系统 | glibc 版本 | 兼容性 |
|---|---|---|
| Ubuntu 24.04 | 2.39 | ✗ 太新,编译的程序无法在小服务器运行 |
| Debian 12 | 2.36 | ✗ 仍然太新 |
| Debian 11 | 2.31 | ✓ 完美兼容小服务器的 2.32 |
| CentOS 7 | 2.17 | ✓ 兼容但太旧,可能缺少新特性 |
docker run -v $(pwd):/dist
- 将宿主机的当前目录挂载到容器的
/dist - 容器内对
/dist的修改会同步到宿主机 - 退出容器后,编译产物保留在宿主机
Node.js 使用 V8 引擎,默认内存限制:
- 32 位系统:约 512MB
- 64 位系统:约 1.4GB
对于内存密集型应用(如 OpenClaw),默认限制可能不够。
max-old-space-size = 可用内存 × 0.75
对于 2GB 内存的服务器:
- 可用内存:约 1.8GB
- 建议设置:1536MB (1.5GB)
- 保留约 300MB 给系统和其他进程
- 小型服务器无法直接编译:内存不足会导致进程被杀
- 使用 Docker 异地编译:在大服务器上模拟兼容环境
- glibc 兼容性至关重要:必须使用低版本系统编译
- 打包整个 node_modules:确保依赖完整
- 增加 Node.js 内存限制:防止运行时内存溢出
- ✓ 轻量型服务器(2GB 内存以下)
- ✓ 需要编译 C++ 扩展的 Node.js 项目
- ✓ 跨服务器部署
- ✓ 定期更新的应用
- ✗ 服务器内存充足(4GB+):可以直接安装
- ✗ 使用预编译二进制包的项目:无需此方案
- ✗ 纯 JavaScript 项目:无编译需求
- OpenClaw 官方文档
- Node.js 内存管理
- Docker 官方文档
- Linux 文件系统层级标准
更新后如果遇到内存不够,Gateway 服务配置过期,或是systemd 服务管理有问题,可以参照下面的文章:
OpenClaw 更新后的启动和配置指南
- 文档版本:1.0
- 最后更新:2026-02-01
- 适用 OpenClaw 版本:2026.1.30+
- 测试环境:Alibaba Cloud Linux 3 + Node.js v24
祝你部署顺利!如有问题,欢迎参考本文档的”常见问题排查”章节。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/252324.html原文链接:https://javaforall.net
