【保姆级教程】在 Proxmox VE 上部署 Ubuntu 24.04 + OpenClaw

一、前置准备

  • 已部署好的 Proxmox VE (PVE) 节点(本文以 PVE 8.x 为例)
  • Ubuntu 24.04.4 Desktop ISO 镜像(已上传至 PVE local 存储或者在线下载)

二、在 PVE 中创建 Ubuntu 24.04 虚拟机

1. 新建虚拟机(常规页)

  1. 登录 PVE 管理界面,点击「创建虚拟机」
  2. 常规 标签页:
    • 节点:选择你的目标 PVE 节点(示例:www
    • VM ID:自定义(示例:104
    • 名称:自定义(示例:OpenClaw
    • 资源池:留空或按需选择
  3. 点击「下一步」


2. 操作系统配置

  1. 操作系统 标签页:
    • 选择「使用 CD/DVD 光盘镜像文件 (ISO)」
    • 存储:选择存放 ISO 的存储(示例:local
    • ISO 镜像:选择 ubuntu-24.04.4-desktop-amd64.iso
    • 客户机操作系统:类别选 Linux,版本选 6.x - 2.6 Kernel
  2. 点击「下一步」


3. 系统配置

  1. 系统 标签页:
    • 显卡:默认
    • 机型:默认 (i440fx)
    • BIOS:默认 (SeaBIOS)
    • SCSI 控制器:VirtIO SCSI single(性能最优)
    • 建议勾选「Qemu 代理」(方便后续 PVE 管理)
    • 不勾选「添加 TPM」
  2. 点击「下一步」

4. 磁盘配置

  1. 磁盘 标签页:
    • 总线/设备:SCSI
    • SCSI 控制器:VirtIO SCSI single
    • 存储:选择目标存储(示例:local
    • 磁盘大小:推荐 32GiB 以上(满足系统+编译需求)
    • 格式:QEMU 映像格式 (qcow2)(节省空间)
    • 缓存:默认 (无缓存)
    • 勾选「IO thread」(提升磁盘性能)
  2. 点击「下一步」

5. CPU 配置

  1. CPU 标签页:
    • 插槽:1
    • 核心:推荐 4 核(加快 OpenClaw 编译速度)
    • 类别:x86-64-v2-AES(兼容性与性能平衡)
  2. 点击「下一步」

6. 内存配置

  1. 内存 标签页:
    • 内存 (MiB):推荐 4096 MiB (4GB) 以上
  2. 点击「下一步」


7. 网络配置

  1. 网络 标签页:
    • 桥接:vmbr0(默认网桥)
    • 模型:VirtIO (半虚拟化)(网络性能最优)
    • VLAN Tag:no VLAN
    • MAC 地址:auto
    • 勾选「防火墙」(按需)
  2. 点击「下一步」

8. 确认创建

  1. 核对所有配置信息
  2. 点击「完成」,等待虚拟机创建完成

三、安装 Ubuntu 24.04 桌面版

1. 启动虚拟机并开始安装

  1. 选中新建的虚拟机,点击「启动」,打开控制台
  2. 启动后进入 Ubuntu 欢迎界面:
    • 语言:选择「中文(简体)」→ 点击「下一步」
    • 可访问性:直接点击「下一步」
    • 键盘布局:选择「汉语」→ 点击「下一步」
    • 连接到互联网:选择「使用有线连接」→ 点击「下一步」
    • 更新可用:选择「跳过」(避免安装过程卡顿)→ 点击「下一步」
    • 试用或安装:选择「安装 Ubuntu」→ 点击「下一步」
    • 安装类型:选择「交互式安装」→ 点击「下一步」
    • 应用程序:选择「默认集合」→ 点击「下一步」
    • 专有软件:两个选项均不勾选 → 点击「下一步」

2. 磁盘分区与账户设置

  1. 安装类型:选择「擦除磁盘并安装 Ubuntu」→ 点击「下一步」
  2. 时区选择:在地图上点击中国区域,选择「Shanghai (Shanghai, China)」→ 点击「下一步」
  3. 设置账户:
    • 您的姓名:自定义(示例:crdz
    • 电脑主机名:自定义(示例:crdz
    • 用户名:自定义(示例:crdz,建议小写英文)
    • 密码:设置易记密码(后续 sudo 会频繁使用)
    • 勾选「登录时需要密码」,不勾选「使用活动目录」
  4. 点击「下一步」,开始系统安装

3. 完成安装并重启

  1. 等待文件复制与配置完成(约 5–10 分钟)
  2. 安装完成后,点击「现在重启」
  3. 重启后,输入用户名和密码登录 Ubuntu 桌面

四、Ubuntu 系统初始化配置

1. 更新系统与安装基础工具

打开终端(快捷键 Ctrl+Alt+T),执行以下命令:

直接开启root用户,反正是虚拟机,自己决定打不打开,不打开有各种权限问题

# 执行命令设置 root 密码,按提示输入两次新密码
sudo passwd root

# 编辑 SSH 配置文件(查找可以用Ctrl+W,这是快捷键)
sudo nano /etc/ssh/sshd_config

# 允许 root 登录,去掉前面的符号,删除prohibit-password并修改为yes
PermitRootLogin yes 

# 去掉前面的符号
PasswordAuthentication yes

# 更新软件源
sudo apt update && sudo apt upgrade -y

# 安装 QEMU 代理(PVE 管理必备)
sudo apt install -y qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent

2. 安装 OpenClaw 编译依赖

# 安装编译所需依赖库
sudo apt install -y git cmake g++ libsdl2-dev libsdl2-mixer-dev libpng-dev libzip-dev

五、编译与安装 OpenClaw

1. 拉取 OpenClaw 源码

# 克隆官方仓库
git clone https://github.com/OpenClaw/OpenClaw.git
cd OpenClaw

2. 编译与安装

# 创建编译目录
mkdir build && cd build

# 生成构建文件
cmake ..

# 编译(使用所有 CPU 核心加速)
make -j$(nproc)

# 安装到系统
sudo make install

3. 准备资源文件

OpenClaw 仅提供引擎,需要原版资源才能运行:

  1. 将 data.pak 和 music.pak 复制到 Ubuntu 虚拟机(可通过 SCP/共享文件夹传输)
  2. 创建资源目录并放入文件:
    mkdir -p ~/.local/share/openclaw/data
    # 假设资源文件在 ~/Downloads 目录下
    cp ~/Downloads/{data.pak,music.pak} ~/.local/share/openclaw/data/
    

六、运行 OpenClaw

在终端中执行:

openclaw

即可启动 OpenClaw ,享受经典复古玩法!

七、使用kejilion的脚本来安装OpenClaw

1、开启Ubuntu的ssh

安装 OpenSSH 服务(若未安装)

打开 Ubuntu 终端(Ctrl+Alt+T),执行:

sudo apt update
sudo apt install -y openssh-server  # 安装 SSH 服务
sudo systemctl enable ssh          # 设置开机自启
sudo systemctl start ssh           # 启动 SSH 服务

修改 SSH 配置文件(核心步骤)

编辑 SSH 主配置文件 sshd_config

sudo nano /etc/ssh/sshd_config

在文件中找到/修改以下内容(按 Ctrl+W 可搜索关键词):

  • 找到 #Port 22 这一行,删除开头的 #,并把 22 改为 333(最终为 Port 333);
  • 确保 PermitRootLogin 设为 no(禁止 root 直接登录,保持安全);
  • 确保 PasswordAuthentication 设为 yes(允许密码登录,新手友好)。

修改后按 Ctrl+O 保存,Ctrl+X 退出 nano 编辑器。

配置防火墙(允许 333 端口)

Ubuntu 24.04 默认使用 ufw 防火墙,需放行 333 端口:

sudo ufw allow 333/tcp  # 放行 333 端口的 TCP 流量
sudo ufw reload         # 重载防火墙规则

或者关闭防火墙,因为不需要

彻底关闭 Ubuntu 系统的 UFW 防火墙(测试/内网环境推荐),以下是永久生效的操作步骤:

1. 临时关闭 + 禁止开机自启(核心命令)

打开 Ubuntu 终端,执行以下命令:

# 1. 立即关闭防火墙
sudo ufw disable

# 2. 禁止防火墙开机自动启动(关键:确保重启后也关闭)
sudo systemctl disable ufw

# 3. 验证防火墙状态(确认已关闭)
sudo ufw status
# 输出 "Status: inactive" 即为关闭成功

#执行这两条命令(核心!)
systemctl daemon-reload
systemctl restart ssh.socket
systemctl restart ssh

2. 额外验证(可选)

确认防火墙服务已停止且不会自启:

# 检查服务状态
sudo systemctl status ufw

# 输出中会显示:
# ● ufw.service - Uncomplicated firewall
#      Loaded: loaded (/lib/systemd/system/ufw.service; disabled; preset: enabled)
#      Active: inactive (dead)  # 已停止
# 检查 SSH 服务状态(确认无报错)
sudo systemctl status ssh

# 检查 333 端口是否监听
ss -tulpn | grep 333

若输出包含 LISTEN 且端口为 333,说明配置成功。

二、PVE 侧额外配置(关键!)

因为 Ubuntu 运行在 PVE 虚拟机中,需确保 PVE 未拦截 333 端口:

  1. 登录 PVE 管理界面,找到该 Ubuntu 虚拟机;
  2. 进入「选项」→「防火墙」,若启用了防火墙,需添加规则:
    • 方向:入站;
    • 协议:TCP;
    • 端口:333;
    • 动作:接受。

三、远程连接测试

使用 SSH 客户端(如 Xshell、Putty、终端)连接:

# 格式:ssh 用户名@虚拟机IP -p 端口
ssh crdz@192.168.1.100 -p 333

输入你的 Ubuntu 密码,能成功登录即表示配置完成。

使用脚本安装OpenClaw

bash <(curl -sL kejilion.sh)

选择11-114,然后选1安装

我理解这是默认情况下的个人使用,共享/多用户使用需要锁定。继续?选择y

选择快速设置

选择模型,我的是阿里的Coding Plan所以我选择的是Qwen

如果你是使用token的用户,那么你就选择自定义选项,填写URL、Token、和模型就可以了,Coding Plan不能获取所有模型会失败,所以我没选择

打开网页在网页上打开下面这个地址进行授权

认证成功

手动输入使用的模型,我用的是qwen3.5-plus

快速接入聊天工具,比如TG、飞书等,我选择跳过-Skip for now

设置搜索工具,继续跳过

现在设置skill技能,继续跳过

开启挂钩?按空格变绿,然后跳过

完成后一直选择0,退出脚本

现在这样核心是装好了,但是网关还需要安装并设置开机启动

先安装 Gateway 服务(root 权限下)

# 以 root 身份安装网关服务(解决 disabled 问题)
openclaw gateway install

启动 Gateway 服务并设为开机启动(root 下执行)

# 1. 重新加载 systemd 配置(让新安装的服务生效)
systemctl --user daemon-reload

# 2. 启动网关服务
systemctl --user start openclaw-gateway.service

# 3. 设为开机自启(避免每次重启都要手动启动)
systemctl --user enable openclaw-gateway.service

输入openclaw gateway配对网关

在Ubuntu的流浏览器输入地址+token配对一下

token用鼠标往上翻就可以看到

这就完成了一大半了,剩下的就是手动修改模型了。

在FinalShell输入命令临时给访问Root目录的权限

# 递归修改 /root 目录及其所有子目录、文件的权限为 755
sudo chmod -R 755 /root

修改.openclaw文件夹里面的openclaw.json文件,把模型名称和URL修改成Coding Plan的。URL:https://coding.dashscope.aliyuncs.com/v1

如果碰到权限问题,那么最简单的方式就是直接清空openclaw.json文件,然后把定义好的内容复制获取就完事了。

清空文件(在当前终端执行):

/root/.openclaw/openclaw.json

打开空文件

 

nano /root/.openclaw/openclaw.json

然后复制配置文件的内容:

 

{
  "meta": {
    "lastTouchedVersion": "2026.3.11",
    "lastTouchedAt": "2026-03-13T06:30:44.604Z"
  },
  "wizard": {
    "lastRunAt": "2026-03-13T06:30:44.557Z",
    "lastRunVersion": "2026.3.11",
    "lastRunCommand": "doctor",
    "lastRunMode": "local"
  },
  "models": {
    "mode": "merge",
    "providers": {
      "qwen-coder": {
        "baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
        "apiKey": "你的阿里云sk开头API Key",
        "api": "openai-completions",
        "models": [
          {
            "id": "qwen3.5-plus",
            "name": "Qwen 3.5 Plus",
            "api": "openai-completions",
            "reasoning": false,
            "input": [
              "text"
            ],
            "cost": {
              "input": 0,
              "output": 0,
              "cacheRead": 0,
              "cacheWrite": 0
            },
            "contextWindow": 128000,
            "maxTokens": 8192
          },
          {
            "id": "qwen3-coder-next",
            "name": "Qwen3 Coder Next",
            "api": "openai-completions",
            "reasoning": false,
            "input": [
              "text"
            ],
            "cost": {
              "input": 0,
              "output": 0,
              "cacheRead": 0,
              "cacheWrite": 0
            },
            "contextWindow": 200000,
            "maxTokens": 8192
          },
          {
            "id": "qwen3-coder-plus",
            "name": "Qwen3 Coder Plus",
            "api": "openai-completions",
            "reasoning": false,
            "input": [
              "text"
            ],
            "cost": {
              "input": 0,
              "output": 0,
              "cacheRead": 0,
              "cacheWrite": 0
            },
            "contextWindow": 200000,
            "maxTokens": 8192
          }
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": {
        "primary": "qwen-coder/qwen3.5-plus"
      },
      "models": {
        "qwen-coder/qwen3.5-plus": {},
        "qwen-coder/qwen3-coder-next": {},
        "qwen-coder/qwen3-coder-plus": {}
      },
      "workspace": "/root/.openclaw/workspace",
      "compaction": {
        "mode": "safeguard"
      },
      "maxConcurrent": 4,
      "subagents": {
        "maxConcurrent": 8
      }
    }
  },
  "tools": {
    "profile": "full"
  },
  "messages": {
    "ackReactionScope": "group-mentions"
  },
  "commands": {
    "native": "auto",
    "nativeSkills": "auto",
    "restart": true,
    "ownerDisplay": "raw"
  },
  "session": {
    "dmScope": "per-channel-peer",
    "resetTriggers": [
      "/new",
      "/reset"
    ],
    "reset": {
      "mode": "idle",
      "idleMinutes": 10080
    },
    "resetByType": {
      "direct": {
        "mode": "idle",
        "idleMinutes": 10080
      },
      "group": {
        "mode": "idle",
        "idleMinutes": 120
      },
      "thread": {
        "mode": "idle",
        "idleMinutes": 1440
      }
    }
  },
  "channels": {
    "telegram": {
      "enabled": true,
      "dmPolicy": "pairing",
      "botToken": "8768314656:AAFOPf8lXJAyumFZoUKKorz6eH7-wHLHzaY",
      "groupPolicy": "allowlist",
      "streaming": "partial"
    }
  },
  "gateway": {
    "port": 18789,
    "mode": "local",
    "bind": "lan",
    "controlUi": {
      "allowedOrigins": [
        "http://127.0.0.1",
        "http://localhost",
      ]
    },
    "auth": {
      "mode": "token",
      "token": "66c72cbe84ae1071d61a1f582a0e1ab38e273e1a40fe4592"
    },
    "tailscale": {
      "mode": "off",
      "resetOnExit": false
    },
    "nodes": {
      "denyCommands": [
        "camera.snap",
        "camera.clip",
        "screen.record",
        "contacts.add",
        "calendar.add",
        "reminders.add",
        "sms.send"
      ]
    }
  },
  "plugins": {
    "slots": {},
    "entries": {
      "telegram": {
        "enabled": true
      },
      "qwen-portal-auth": {
        "enabled": true
      },
      "memory-core": {
        "enabled": false
      },
      "memory-lancedb": {
        "enabled": false
      }
    },
    "installs": {
      "openclaw-qqbot": {
        "source": "npm",
        "spec": "@tencent-connect/openclaw-qqbot@latest",
        "installPath": "/root/.openclaw/extensions/openclaw-qqbot",
        "version": "1.5.6",
        "resolvedName": "@tencent-connect/openclaw-qqbot",
        "resolvedVersion": "1.5.6",
        "resolvedSpec": "@tencent-connect/openclaw-qqbot@1.5.6",
        "integrity": "sha512-DNznnKZVIr0YPi3GpCggLr9MrKbRPGLG5SHWQJeY6J1K+Fo7yuq+tgh3HamTpbrTK7iBfEWb2MjT/CQbAm5sbA==",
        "shasum": "62584d0ad35f34d8e2ec150d1f12e0f939ff53ab",
        "resolvedAt": "2026-03-11T09:52:33.781Z",
        "installedAt": "2026-03-11T09:52:52.157Z"
      },
      "openclaw-tavily": {
        "source": "npm",
        "spec": "openclaw-tavily",
        "installPath": "/root/.openclaw/extensions/openclaw-tavily",
        "version": "0.2.1",
        "resolvedName": "openclaw-tavily",
        "resolvedVersion": "0.2.1",
        "resolvedSpec": "openclaw-tavily@0.2.1",
        "integrity": "sha512-Y/cYTiKWGjWm8TF0/0DGyB80Kuke1oJKEPcFvjmHutXSZSx42RmMqZ3I6kMz12hw1eoxJwQ8a0EJQAvq45KciQ==",
        "shasum": "544d324879914108c50cfd801d7cff704069970d",
        "resolvedAt": "2026-03-13T05:01:53.532Z",
        "installedAt": "2026-03-13T05:01:55.043Z"
      },
      "memos-local-openclaw-plugin": {
        "source": "npm",
        "spec": "@memtensor/memos-local-openclaw-plugin",
        "installPath": "/root/.openclaw/extensions/memos-local-openclaw-plugin",
        "version": "1.0.2",
        "resolvedName": "@memtensor/memos-local-openclaw-plugin",
        "resolvedVersion": "1.0.2",
        "resolvedSpec": "@memtensor/memos-local-openclaw-plugin@1.0.2",
        "integrity": "sha512-3D/kcQ4nzXr80IJhGwIZ6Tqz60AACjZFsN1cNKZUFXtzGcROpXiIf8AYKdoLSMGLR0/LwHWr3fBDEfPAqJ7HHQ==",
        "shasum": "a8407f617410793dadd2f1a73e20883fcac786e0",
        "resolvedAt": "2026-03-13T06:25:44.136Z",
        "installedAt": "2026-03-13T06:26:09.153Z"
      }
    }
  }
}

重启网关生效:

 

pkill -9 openclaw

openclaw gateway run

不出意外,在网页端就可以跟小龙虾对话了。

现在我们安装QQBot让我们用QQ控制小龙虾,这个简单直接官方走起。

官方平台:https://q.qq.com

登陆并创建好自己的机器人后,直接连接SSH然后输入官方三条命令

这样QQbot完成了对接,发条消息确认一下。


七、常见问题与解决

  1. 编译时 SDL2 路径报错: 手动指定 SDL2 路径后重新编译:
    cmake -DSDL2_DIR=/usr/lib/x86_64-linux-gnu/cmake/SDL2/ ..
    make -j$(nproc)
    
  2. 无声音: 安装 SDL2 混音器插件:
    sudo apt install -y libsdl2-mixer-2.0-0
    
  3. PVE 无法获取虚拟机 IP: 确认 QEMU 代理已安装并启动:
    sudo systemctl status qemu-guest-agentw
    

八、总结

通过本教程,你完成了从 PVE 虚拟机创建、Ubuntu 24.04 安装,到 OpenClaw 编译运行的全流程。

上一篇 养虾(OpenClaw)随笔
下一篇 OpenList启用WebDAV‌