OpenClaw 安装实战记录:老旧设备上的自主运维 Agent 搭建

0. 背景与目标

利用一台 15 年前的老旧笔记本作为“大脑”,部署开源智能体 OpenClaw。先在本地环境完成“试水”安装与基础配置,测试其在极低硬件资源下的运行表现。

设备环境

  • 控制端 (本地): 15 年前老旧笔记本 (todtom-old-laptop)
    • OS: Ubuntu Server (无 GUI)
    • CPU: 约 2011 年代双核处理器
    • 内存: 2GB DDR3 (实测初始可用约 1.5GB,含 3.8GB Swap)
    • 硬盘: 100GB+ HDD (状态一般)

1. 运行环境准备 (控制端)

为了压榨 2GB 内存的每一分性能,我们放弃了 Docker 部署,选择直接在宿主机上运行 Node.js。

1.1 系统瘦身

移除 Ubuntu Server 中占用内存较大的冗余服务(如 Snap):

sudo apt purge snapd -y
sudo apt autoremove -y
sudo apt update && sudo apt upgrade -y

1.2 网络环境调试 (避坑指南)

  1. 下载并安装nvm
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
    如果一直无响应可能需要配置代理访问,如下,http://<proxy-ip>:<port>改为你的代理地址
    • curl -x http://<proxy-ip>:<port> -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash

      git config --global http.proxy http://<proxy-ip>:<port> 
      git config --global https.proxy http://<proxy-ip>:<port>
    • 或者设置环境变量

      export http_proxy="http://192.168.x.x:port"
      export https_proxy="http://192.168.x.x:port"
    • 清除代理方法

      # 1. 取消系统环境变量
      unset http_proxy
      unset https_proxy
      # 2. 清除 Git 全局代理配置
      git config --global --unset http.proxy
      git config --global --unset https.proxy
      # 3. 验证是否清理干净(应无输出)
      env | grep -i proxy
      git config --global --get http.proxy
      问题记录:尝试使用 curl | bash 脚本安装 nvm 时,配置代理反而导致 Git 报 Proxy CONNECT aborted 错误。 解决方法:
  2. 若curl安装失败,则 git clone 下载 nvm 源码至 ~/.nvm

    git clone https://github.com/nvm-sh/nvm.git ~/.nvm

1.3 安装 Node.js 24

# 如果是手动clone的需要加载 nvm 环境变量,如果是利用上面curl命令则可跳过
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.bashrc

# 安装 Node.js 24
source ~/.bashrc
nvm install 24
node -v # 实测输出 v24.14.0

1.4 部署 OpenClaw 源码 (源码安装与完整编译)

:2GB 内存机器格在编译 TypeScript 时极易触发 OOM (Out of Memory)。为了保证安装的完整性,必须手动分配堆内存上限。

编译源码安装

# 克隆仓库
git clone https://github.com/openclaw/openclaw.git
cd openclaw
# 安装
export NODE_OPTIONS="--max-old-space-size=1800" # 非必须,如果有内存溢出问题需要限制内存占用,若内存4GB以上一般不用限制

# 1. 安装基础工具
npm install -g pnpm

# 2. 安装所有依赖
pnpm install

# 3. 解决编译 OOM 问题并执行完整构建
# 解决方法:手动调高 Node 堆内存上限至 1.5GB (1536MB),强制利用 Swap 空间完成官方标准 build。

npm run build

npm install --production

或直接安装

npm install -g openclaw@latest

2. OpenClaw 本地初始化配置 (Onboard)

2.1 内存极限调优记录

在 2GB 内存环境下跑 onboard 是极大的挑战,过程中多次触发 JavaScript Heap OOM。

  • 实测现象: 分配 1536MB 内存时,Node.js 依然抛出 FATAL ERROR: Reached heap limit。监控显示 MEM% 长期维持在 80% 以上,且由于 Swap 交换剧烈,进程频繁进入 D (磁盘等待) 状态,系统负载压力极大。
  • 最终对策: 将 max-old-space-size 设为 1800MB(2GB 机器的物理极限),并采用 Manual (手动模式) 最小化配置以避开内存峰值。
export NODE_OPTIONS="--max-old-space-size=1800"
node openclaw.mjs onboard --install-daemon
或
openclaw onboard --install-daemon

2.2 手动配置关键细节 (Manual Mode)

  • AI Provider: 配置 API 地址与 Key。使用 glm-4.7-flash 模型测试通过。我在配置时使用的是custom provider,配置自己搭建的new-api成功通过。new-api可参考 从零开始:用群晖 NAS 搭建 New-API 并集成智谱 AI 打造全能 AI 编程助手 🛠️ 进阶:如何优雅地配置 New-API 模型重定向(以阿里云大模型服务平台百炼为例)
  • Gateway Bind: 必须选 LAN (0.0.0.0)。为了方便无 GUI 环境下的远程管理。
  • Gateway Auth:
    • Method: 选 Token
    • Storage: 选 Generate/store plaintext token
  • Network Exposure: Tailscale 设为 Off。在内存受限环境下,尽量不增加额外的负载。
  • Configure chat channels now?: 选 No。待 Web 启动后配置。
  • Search provider: 选 Skip for now
    • 逻辑: 常见的搜索插件(如 Google Search)在国内访问受限,且在 2GB 内存的老机器上,初期跳过可加快部署速度。
  • Configure skills now?: 选 No
    • 考量: Skills 插件(如浏览器驱动、Docker 管理等)会消耗额外内存。为了保证核心系统在 2GB 内存下能首启成功,所有非必要组件均留待 Web UI 启动后再按需添加。
  • Enable hooks?: 选 Skip for now
    • 理解 Hooks: 钩子是指令触发时的自动化动作(如执行 /reset 时自动保存会话记忆)。
    • 常见的 Hooks 选项解释
      1. session-memory(最推荐):当你开启新会话或重置时,它会自动帮你把之前的对话上下文存入“记忆”。这样 Agent 就能稍微“记起”之前聊过什么。
      2. command-logger:自动记录你下达的每一条指令。如果你想回溯之前做过什么,这个很有用。
      3. boot-md:在启动时生成一份 Markdown 格式的状态简报。
      4. bootstrap-extra-files:在初始化时自动准备一些额外的系统文件。
    • 考量: 现阶段目标是最小化开销成功“点亮”系统,Hooks 的内存占用和后台逻辑建议在 Web 端跑通后再开启。
  • Systemd Lingering & Service: 全部选 Yes
    • Lingering: 确保 SSH 断开后进程不被杀掉。
    • Gateway Service: 将 OpenClaw 设为开机自启,实现无人值守运维。

3. 实战测试:启动与访问

3.1 首次启动 (带内存限制)

配置完成后,系统会生成 config.json。执行以下命令正式启动 Gateway:

export NODE_OPTIONS="--max-old-space-size=1800"
node openclaw.mjs gateway start
# 或者

3.2 远程 Web UI 登录

  1. 在你的电脑上打开终端,输入ssh -N -L openclaw_port:127.0.0.1:openclaw_port todtom@openclaw_IP,保持终端不关闭后在同一局域网下的主力机浏览器中访问:http://localhost:openclaw_port
  2. 在登录页面输入配置阶段生成的 Gateway Token
  3. 点亮成功:进入 Web 控制台后,即可使用并通过ui进一步配置。

反向代理

如果有群晖或者nginx反向代理配置能力的,可以尝试配置局域网内的反向代理,这样就不用每次都ssh连接再访问了,配置如下

编辑.openclaw/openclaw.json,修改gateway部分内容

"gateway": {
    "port": 18789,
    "mode": "local",
    "bind": "lan",
    "controlUi": {
      "allowedOrigins": [
        "http://localhost:18789",
        "http://127.0.0.1:18789",
        "https://群晖IP:18790",
        "https://反代:端口"
    }
    ...
}
  • 群晖反向代理设置
    • 来源HTTPS | * | 端口 18790
    • 目的地HTTP | openclaw的局域网IP | 18789
  • 访问地址:使用 https://你的群晖IP:18790"https://反代:端口"来打开仪表盘。如果出现pairing required的错误提示,在openclaw中查看设备列表并允许设备配对即可,命令如下

    openclaw devices list
    openclaw devices approve <request-id>

关于外网访问

更建议使用vpn如wireguard、talescale,反向代理一定要https,如果对上述内容不够了解,建议不要搭建就本地访问,连通号telegram或其他聊天工具已成功其实不需外网访问也可以直接使用。我是在使用synology chat连接openclaw时,发现这俩的web hook似乎都需要https链接才可以,没办法配置了反向代理。


目录