Ubuntu 22.04 LTS 部署宝塔面板与 OpenClaw 实战指导文档
摘要
本文档针对在 Ubuntu 22.04 LTS 上部署 OpenClaw(开源自托管 AI 助手网关)的两种思路进行深度技术分析与实战指导。思路一为先部署宝塔(BT)面板,再在宝塔环境中部署 OpenClaw;思路二为绕过面板,直接以 Docker Compose 或 systemd 原生方式部署 OpenClaw。经过对 OpenClaw 项目架构、三种安装方式、宝塔面板集成路径、安全加固、迁移与运维的系统性研究,本文档得出结论:对于关注"后续迁移与管理便利性"的场景,思路二(Docker Compose 直接部署 + Nginx 反向代理 + systemd 托管)在迁移效率、停机时间、数据完整性、回滚能力和安全隔离方面具有压倒性优势;思路一则更适合服务器上同时运行多个网站、运维团队习惯图形化管理的场景。文档提供两条路径的完整实战命令、配置文件示例、踩坑解决方案及决策树,可直接作为部署执行参考。
一、背景与项目概览
1.1 OpenClaw 项目简介
OpenClaw(前身为 Clawdbot / Moltbot)是一个开源、自托管的个人 AI 助手网关,采用 MIT 协议,由 Peter Steinberger 主导开发,GitHub 仓库位于 https://github.com/openclaw/openclaw。其核心定位是运行在用户自有机器或服务器上的 AI 智能体网关,支持多模型接入(Anthropic Claude、OpenAI GPT、Google Gemini、Kimi、DeepSeek、通义千问、Ollama 本地模型等)、工作流自动化、代码辅助、IM 渠道接入(Telegram、WhatsApp、飞书、钉钉、企业微信等)。截至调研时最新版本约为 2026.7.1。
1.2 核心架构组件
| 组件 | 说明 | 默认端口 |
|---|---|---|
| Gateway | 核心网关服务,提供控制面板、API 和 Prometheus 指标端点 | 18789 |
| Bridge | 内部桥接服务(Docker 部署中可映射为 18890) | 18790 |
| Web UI / Control UI | Web 控制面板,通过 http://localhost:18789 访问 |
— |
| CLI | 命令行工具 openclaw,入口为 dist/index.js |
— |
| Skills | 技能插件系统(53个),通过 clawhub install 安装 |
— |
| Tools | 系统能力层(25种),包含 read/write/edit/exec/web_search 等 | — |
| Sandbox | Agent 沙箱隔离(Docker 容器方式) | — |
1.3 运行时依赖与系统要求
| 依赖 | 要求 |
|---|---|
| Node.js | 最低 22.22.3+;支持 24.15+、25.9+、26+(默认推荐 26) |
| SQLite | Node.js 内置 node:sqlite,需 WAL-reset-safe 版本(>3.51.x 或 3.50.7+) |
| npm | ≥ 8 |
| Git | ≥ 2.x |
| 资源 | 最低 | 推荐 |
|---|---|---|
| CPU | 2 核 | 4 核+ |
| 内存 | 2 GB | 4-8 GB |
| 磁盘 | 10 GB SSD | 20-40 GB SSD |
| OS | Ubuntu 22.04 LTS | Ubuntu 22.04 LTS 或 macOS |
1.4 安全提示
OpenClaw 仍处于 beta 阶段,其 Tools 层包含 exec(Shell 命令执行)等高权限能力。CVE-2026-25253(CVSS 8.8)影响 v2026.1.29 之前版本,存在跨站 WebSocket 劫持漏洞,可导致远程代码执行。部署时务必升级到 ≥ 2026.1.29 版本,该版本已永久移除 auth: "none" 模式,强制使用 Token 或密码认证。
二、部署前环境准备(通用步骤)
无论选择哪种部署思路,以下基础环境准备工作必须先完成。
2.1 系统更新与基础工具安装
# 更新系统软件源和已安装包
sudo apt update && sudo apt upgrade -y
# 安装基础依赖工具
sudo apt install -y curl wget git net-tools build-essential
2.2 配置 Swap(内存低于 4GB 必做)
OpenClaw 的 npm install 或 Docker 镜像构建过程中可能因内存不足被 OOM Killer 终止(退出码 137),低配服务器必须配置 Swap:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
2.3 配置防火墙基线
Ubuntu 22.04 默认使用 ufw 防火墙。部署前先放行 SSH 端口,避免后续操作中误锁自己:
sudo ufw allow 22/tcp
sudo ufw enable
后续根据部署思路开放对应端口(详见各方案章节)。
2.4 配置时区与时间同步
sudo timedatectl set-timezone Asia/Shanghai
sudo apt install -y chrony
sudo systemctl enable chrony
sudo systemctl start chrony
三、思路一:先部署宝塔面板,再在宝塔中部署 OpenClaw
3.1 宝塔面板安装
3.1.1 安装命令
Ubuntu 22.04 使用官方推荐的一键安装脚本:
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh docscenter
安装过程中提示 Do you want to install Bt-Panel to the /www directory now?(y/n) 时输入 y 确认。安装完成后终端会输出面板地址、用户名和密码,务必记录。
3.1.2 安装后关键路径与配置
| 项目 | 路径/值 |
|---|---|
| 面板安装路径 | /www/server/panel |
| 默认端口 | 8888(建议修改) |
| 站点默认目录 | /www/wwwroot |
| Nginx 配置文件 | /www/server/nginx/conf/nginx.conf |
| 站点 Nginx 配置目录 | /www/server/panel/vhost/nginx |
| 备份目录 | /www/backup/site、/www/backup/database |
查看默认登录信息:bt 14;修改密码:bt 5;修改用户名:bt 6;修改端口:bt 8。
3.1.3 宝塔面板安全加固(必做)
宝塔面板默认端口 8888 是高频扫描目标,安装后必须立即加固:
# 修改默认端口(如改为 8881)
bt 8
# 同步放行 ufw 防火墙
ufw allow 8881/tcp
# 删除旧端口规则(如需)
ufw delete allow 8888/tcp
在面板设置中进一步配置:绑定域名(仅可通过指定域名访问)、开启面板 SSL、开启 BasicAuth 认证、限制授权 IP。
3.2 在宝塔中部署 OpenClaw
宝塔环境下有三条可行路径,按推荐程度排序。
路径 A:宝塔 Docker 管理器 + Docker Compose 部署(推荐)
此路径将宝塔的可视化管理与 Docker 的环境隔离优势结合,是思路一中的最优选择。
第一步:安装 Docker 管理器
登录宝塔面板 → 软件商店 → 搜索"Docker" → 安装"Docker 管理器"。安装后会自动安装 Docker Engine。
第二步:配置镜像加速器(国内必做)
打开 Docker 管理器 → 设置 → 镜像加速,添加阿里云加速地址:https://registry.cn-hangzhou.aliyuncs.com。
第三步:准备部署目录与配置
mkdir -p /www/wwwroot/openclaw/data/config
mkdir -p /www/wwwroot/openclaw/data/workspace
cd /www/wwwroot/openclaw
创建 docker-compose.yml:
services:
openclaw-gateway:
image: ghcr.io/openclaw/openclaw:latest
container_name: openclaw-gateway
restart: unless-stopped
environment:
HOME: /home/node
TERM: xterm-256color
TZ: Asia/Shanghai
OPENCLAW_GATEWAY_TOKEN: ${
OPENCLAW_GATEWAY_TOKEN}
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS: "false"
volumes:
- ./data/config:/home/node/.openclaw
- ./data/workspace:/home/node/.openclaw/workspace
ports:
- "127.0.0.1:18789:18789"
init: true
command: ["node", "dist/index.js", "gateway", "--bind", "loopback", "--port", "18789"]
cap_drop:
- NET_RAW
- NET_ADMIN
security_opt:
- no-new-privileges:true
healthcheck:
test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:18789/healthz').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
interval: 30s
timeout: 5s
retries: 5
start_period: 20s
openclaw-cli:
image: ghcr.io/openclaw/openclaw:latest
network_mode: "service:openclaw-gateway"
environment:
HOME: /home/node
OPENCLAW_GATEWAY_TOKEN: ${
OPENCLAW_GATEWAY_TOKEN}
volumes:
- ./data/config:/home/node/.openclaw
stdin_open: true
tty: true
init: true
entrypoint: ["node", "dist/index.js"

433

被折叠的 条评论
为什么被折叠?



