如何在小型服务器上更新你的OpenClaw

如何在小型服务器上更新你的OpenClaw

我花了 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)。编译过程极度消耗内存:

  1. 内存不足:2GB 内存无法支撑 C++ 编译过程,会被 Linux OOM Killer 强制终止
  2. 编译工具缺失:需要 cmake、g++、make 等编译工具
  3. 编译时间长:即使有足够内存,单核编译也需要很长时间

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 二进制兼容规则是”向下兼容”,高版本编译的程序无法在低版本系统运行。


  1. 在大型服务器上使用 Docker 创建兼容的编译环境
  2. 编译完整的 node_modules(包含所有依赖和二进制文件)
  3. 打包传输到小型服务器
  4. 解压部署,无需二次编译
  • 环境隔离:在大服务器上模拟小服务器的系统环境
  • 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.cpp
  • make:构建工具
  • 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.5GB
  • exec 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 给系统和其他进程

  1. 小型服务器无法直接编译:内存不足会导致进程被杀
  2. 使用 Docker 异地编译:在大服务器上模拟兼容环境
  3. glibc 兼容性至关重要:必须使用低版本系统编译
  4. 打包整个 node_modules:确保依赖完整
  5. 增加 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

(0)
上一篇 2026年3月13日 下午4:57
下一篇 2026年3月13日 下午4:57


相关推荐

关注全栈程序员社区公众号