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"]
depends_on:
- openclaw-gateway
创建 .env 文件:
cat > /www/wwwroot/openclaw/.env << EOF
OPENCLAW_GATEWAY_TOKEN=$(openssl rand -hex 32)
EOF
cat /www/wwwroot/openclaw/.env # 记录 Token
第四步:修复数据目录权限
Docker 镜像内运行用户为 node(uid 1000),宿主机目录必须匹配:
chown -R 1000:1000 /www/wwwroot/openclaw/data
第五步:拉取镜像并启动
cd /www/wwwroot/openclaw
docker pull ghcr.io/openclaw/openclaw:latest
# 国内如拉取困难,使用镜像代理:
# docker pull docker.aityp.com/image/ghcr.io/openclaw/openclaw:latest
# docker tag docker.aityp.com/image/ghcr.io/openclaw/openclaw:latest ghcr.io/openclaw/openclaw:latest
docker compose up -d openclaw-gateway
第六步:执行初始化向导
docker compose run --rm openclaw-cli onboard
向导中选择 Manual 模式(而非 QuickStart,原因见第六章踩坑点),按提示配置模型提供商和 API Key。
第七步:验证
docker compose ps
curl -fsS http://127.0.0.1:18789/healthz
# 获取 Dashboard URL
docker compose run --rm openclaw-cli dashboard --no-open
路径 B:宝塔 Node.js 管理器 + PM2 部署
适合不使用 Docker、希望直接在宿主机运行 OpenClaw 的场景。
第一步:安装 PM2 管理器
宝塔面板 → 软件商店 → 搜索"PM2" → 安装"PM2 管理器"。
第二步:安装 Node.js 22+
打开 PM2 管理器 → Node 版本 → 安装 Node.js 22 LTS(需 22.22.3+)或 Node.js 24 → 设为默认版本。
注意:Ubuntu 22.04 默认 apt 安装的 Node.js 版本为 v12 或 v18,远不满足要求。如未使用宝塔 PM2 管理器,必须通过 NVM 安装:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
# 国内如 GitHub 下载失败,使用 Gitee 镜像:
# curl -o- https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh | bash
nvm install 22
nvm use 22
nvm alias default 22
node -v # 确认 v22.x.x
第三步:安装 OpenClaw
npm config set registry https://registry.npmmirror.com
npm install -g openclaw@latest
source ~/.bashrc
openclaw --version
如出现 openclaw: command not found:
echo 'export PATH="$(npm prefix -g)/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
第四步:初始化
openclaw onboard --install-daemon
第五步:使用宝塔 Supervisor 进程守护
安装 Supervisor 管理器(软件商店 → 搜索"Supervisor")。添加守护进程:名称 openclaw,启动用户 root,运行目录 /root,启动命令 openclaw gateway start。
注意:宝塔 7.9+ 版本 Supervisor 管理器可能存在 Bug,此时改用"堡塔应用管理器"作为替代。同时需检查 PHP 禁用函数,删除 proc_open 禁用项,否则 Supervisor 启动失败。
路径 C:宝塔网站功能配置反向代理 + SSL
无论路径 A 还是路径 B,都建议通过宝塔的网站管理功能配置 Nginx 反向代理,统一 80/443 端口入口。
第一步:创建站点
宝塔面板 → 网站 → 添加站点 → 填写域名(如 openclaw.example.com,域名需已解析到服务器 IP)→ 根目录随意 → PHP 版本选"纯静态"。
第二步:配置反向代理
站点设置 → 反向代理 → 添加反向代理 → 代理名称 openclaw-proxy → 目标 URL http://127.0.0.1:18789(末尾不带斜杠)→ 开启"发送域名"和"发送真实 IP"。
第三步:开启 WebSocket 支持
在反向代理设置中开启 WebSocket 支持,或手动在站点 Nginx 配置中添加:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
第四步:配置 SSL 证书
站点设置 → SSL → 选择 Let's Encrypt → 点击申请 → 开启强制 HTTPS。宝塔会通过计划任务自动续签证书。
3.3 宝塔环境的三层防火墙同步
这是思路一中最容易出问题的环节。宝塔环境存在三层独立防火墙,必须同步配置:
| 层级 | 管理位置 | 需放行端口 |
|---|---|---|
| 第一层:云服务商安全组 | 阿里云/腾讯云控制台 | 80、443、8881(面板)、22 |
| 第二层:系统防火墙 ufw | 命令行 ufw |
80、443、8881、22 |
| 第三层:宝塔面板防火墙 | 面板 → 安全 → 系统防火墙 | 80、443、8881 |
注意:OpenClaw 的 18789 端口在反向代理模式下应绑定 127.0.0.1,不需要在防火墙放行。只有在无反向代理、需直接暴露时才放行(不推荐)。
# ufw 配置
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 8881/tcp # 宝塔面板端口(已修改)
ufw allow 22/tcp
ufw reload
3.4 宝塔环境的定时备份
宝塔计划任务 → 添加任务,创建 Shell 脚本类型任务,每日凌晨 2 点执行:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/www/backup/openclaw"
mkdir -p $BACKUP_DIR
# Docker 部署:备份数据目录
tar -czf $BACKUP_DIR/openclaw_data_$DATE.tar.gz -C /www/wwwroot/openclaw data .env docker-compose.yml
# 保留最近 7 天
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
四、思路二:直接部署 OpenClaw(Docker Compose + systemd + Nginx)
此思路不安装宝塔面板,直接在 Ubuntu 22.04 上以 Docker Compose 部署 OpenClaw,配合 systemd 和 Nginx 实现生产级运维。
4.1 安装 Docker 与 Docker Compose
# 安装 Docker
curl -fsSL https://get.docker.com | bash
# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证
docker --version
docker compose version
国内环境配置镜像加速器:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://registry.cn-hangzhou.aliyuncs.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
4.2 创建专用用户与部署目录
# 创建专用用户(非 root 运行,遵循最小权限原则)
sudo adduser openclaw --disabled-password --gecos ""
sudo usermod -aG docker openclaw
# 创建部署目录
sudo mkdir -p /opt/openclaw/data/config
sudo mkdir -p /opt/openclaw/data/workspace
sudo chown -R openclaw:openclaw /opt/openclaw
4.3 编写 Docker Compose 配置
切换到 openclaw 用户并创建配置:
sudo su - openclaw
cd /opt/openclaw
创建 docker-compose.yml(与思路一路径 A 类似,但增加更完整的安全加固):
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"
OPENCLAW_SANDBOX: "true"
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:
- ALL
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
deploy:
resources:
limits:
memory: 2G
cpus: '2'
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"]
depends_on:
openclaw-gateway:
condition: service_healthy
创建 .env 文件:
cat > /opt/openclaw/.env << EOF
OPENCLAW_GATEWAY_TOKEN=$(openssl rand -hex 32)
EOF
chmod 600 /opt/openclaw/.env
修复数据目录权限:
chown -R 1000:1000 /opt/openclaw/data
4.4 拉取镜像并初始化
cd /opt/openclaw
docker pull ghcr.io/openclaw/openclaw:latest
docker compose up -d openclaw-gateway
# 执行初始化向导
docker compose run --rm openclaw-cli onboard
初始化向导关键选择:
| 步骤 | 推荐选择 | 原因 |
|---|---|---|
| 风险确认 | Yes | 确认了解安全风险 |
| 模式选择 | Manual(非 QuickStart) | QuickStart 中途中断会导致 Gateway 未初始化,需完全重装 |
| 模型提供商 | 按需选择 | DeepSeek 性价比高,Kimi 新用户有额度,Ollama 零成本 |
| API Key | Paste | 直接粘贴 API Key |
| Channel 渠道 | Skip for now | 首次跳过,Gateway 正常运行后再单独配置 |
| Search 搜索 | Skip 或 Brave Search | Brave Search 无需 API Key |
| Skills 技能 | No(首次) | 后续随时安装 |
| Hooks 钩子 | command-logger、session-memory | 命令日志和会话记忆 |
| Daemon 守护进程 | Yes | systemd 用户会话保持 |
| UI 类型 | Web UI | 更方便管理 |
4.5 验证部署
# 容器状态
docker compose ps
# 健康检查
curl -fsS http://127.0.0.1:18789/healthz
curl -fsS http://127.0.0.1:18789/readyz
# 获取 Dashboard URL
docker compose run --rm openclaw-cli dashboard --no-open
# 查看日志
docker compose logs -f --tail=100
4.6 配置 systemd 管理 Docker Compose
创建 /etc/systemd/system/openclaw.service:
[Unit]
Description=OpenClaw Docker Compose Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/openclaw
User=openclaw
Group=openclaw
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=120
[Install]
WantedBy=multi-user.target
启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable openclaw
sudo systemctl start openclaw
sudo systemctl status openclaw
4.7 配置 Nginx 反向代理 + HTTPS
安装 Nginx 和 certbot:
sudo apt install -y nginx certbot python3-certbot-nginx
sudo systemctl enable nginx
sudo systemctl start nginx
创建 Nginx 配置文件 /etc/nginx/sites-available/openclaw:
server {
listen 80;
server_name openclaw.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name openclaw.example.com;
ssl_certificate /etc/letsencrypt/live/openclaw.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/openclaw.example.com/privkey.pem;
# 安全响应头
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
# Basic Auth 认证(双重保护)
auth_basic "OpenClaw Login";
auth_basic_user_file /etc/nginx/.htpasswd;
access_log /var/log/nginx/openclaw-access.log;
error_log /var/log/nginx/openclaw-error.log;
location / {
proxy_pass http://127.0.0.1:18789;
proxy_set_header Authorization "";
proxy_set_header X-Forwarded-User $remote_user;
# WebSocket 支持(必需)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 长连接超时
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 86400s;
proxy_buffering off;
}
}
启用站点并申请 SSL 证书:
sudo ln -s /etc/nginx/sites-available/openclaw /etc/nginx/sites-enabled/
sudo nginx -t
# 创建 Basic Auth 密码文件
sudo sh -c 'echo "admin:$(openssl passwd -apr1 YourStrongPassword)" > /etc/nginx/.htpasswd'
# 申请 Let's Encrypt 证书(自动修改 Nginx 配置)
sudo certbot --nginx -d openclaw.example.com
sudo systemctl reload nginx
4.8 配置 OpenClaw trustedProxies
在 OpenClaw 配置文件中设置信任代理,使 Gateway 正确识别经过 Nginx 代理的请求:
docker compose run --rm openclaw-cli config set gateway.trustedProxies '["127.0.0.1"]' --strict-json
docker compose run --rm openclaw-cli config set gateway.controlUi.allowedOrigins '["https://openclaw.example.com"]' --strict-json
docker compose restart openclaw-gateway
4.9 安装 Fail2Ban 防入侵
sudo apt install -y fail2ban
sudo tee /etc/fail2ban/jail.local << 'EOF'
[sshd]
enabled = true
maxretry = 3
bantime = 86400
[nginx-auth]
enabled = true
maxretry = 3
bantime = 86400
EOF
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
4.10 防火墙最终配置
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
# 注意:18789 端口不对外开放,仅绑定 127.0.0.1
sudo ufw reload
sudo ufw status verbose
五、OpenClaw 安全加固深度配置
无论选择哪种部署思路,以下安全加固配置都必须执行。
5.1 Gateway 认证配置
v2026.1.29 起强制认证,使用 openssl rand -hex 32 生成强 Token:
# 查看当前 Token
docker compose run --rm openclaw-cli config get gateway.auth.token
# 或在配置文件中确认
cat /opt/openclaw/data/config/openclaw.json | grep token
5.2 Tools 与 Skills 权限管控
OpenClaw 的能力分为两层:Tools(25种,底层系统能力)和 Skills(53个,任务方法组合)。安全配置的核心是:exec 工具必须开启审批,Skills 使用白名单模式。
在 ~/.openclaw/openclaw.json(Docker 部署中为 ./data/config/openclaw.json)中配置:
{
"tools": {
"allow": [
"read", "write", "edit", "apply_patch", "exec", "process",
"web_search", "web_fetch", "browser", "image",
"memory_search", "memory_get",
"sessions_list", "sessions_history", "sessions_send",
"message", "cron", "gateway", "agents_list"
],
"deny": [
"nodes", "canvas", "llm_task", "lobster"
]
},
"approvals": {
"exec": {
"enabled": true
}
},
"skills": {
"allowBundled": [
"gog", "github", "tmux", "session-logs",
"weather", "summarize", "clawhub",
"healthcheck", "skill-creator"
]
}
}
关键安全原则:exec 工具开启审批(approvals.exec.enabled: true),防止 AI 执行删库等危险命令;Skills 白名单模式,默认53个全部关闭,仅保留实际使用的;社交消息类 Skills(imsg、slack、discord、wacli)全部关闭;密码类 Skill(1password)禁止开启。
5.3 日志脱敏配置
防止 API Key 泄露到日志中:
{
"logging": {
"redactPatterns": ["sk-*", "Bearer *"]
}
}
5.4 会话隔离配置
防止跨用户信息泄露:
{
"dmScope": "per-channel-peer"
}
per-channel-peer 模式下,每个发送者与渠道对独立隔离会话,是推荐配置。main 模式下所有 DM 共享一个会话,存在跨用户泄露风险。
5.5 文件权限加固
chmod 600 /opt/openclaw/data/config/openclaw.json
chmod 700 /opt/openclaw/data/config
chmod 600 /opt/openclaw/.env
5.6 运行安全审计
# 基本审计
docker compose run --rm openclaw-cli security audit
# 深度审计(含 Gateway 实时探测)
docker compose run --rm openclaw-cli security audit --deep
# 自动修复安全配置
docker compose run --rm openclaw-cli security audit --fix
5.7 安全加固完整清单
必须完成的项:升级到最新版本(≥ 2026.1.29)、启用 Token 认证、exec 工具开启审批、Skills 使用白名单、Docker 沙箱隔离、Gateway 绑定 loopback、配置日志脱敏、设置 dmScope: "per-channel-peer"、文件权限加固、API 密钥设置最小权限和额度限制、运行安全审计。
严禁的项:在 0.0.0.0 上暴露未认证的 Gateway、--privileged 特权模式启动容器、将 API 密钥硬编码在配置文件中、在主力工作机(含个人隐私数据)上直接安装。
六、常见踩坑点与解决方案
6.1 Node.js 版本不满足要求(最高频,约 60% 安装失败)
问题:Ubuntu 22.04 默认 apt 安装的 Node.js 版本为 v12 或 v18,远低于 OpenClaw 要求的 22.22.3+。表现为 npm install 时报语法错误或运行时报 node:sqlite 相关错误。
解决:使用 NVM 安装正确版本。国内网络下 NVM 安装脚本可能从 GitHub 下载失败,改用 Gitee 镜像:
curl -o- https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh | bash
source ~/.bashrc
nvm install 22
nvm use 22
nvm alias default 22
6.2 npm EACCES 权限错误
问题:全局安装时报 EACCES: permission denied。
解决:配置用户级 npm 全局目录:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
或使用 NVM 管理的 Node.js(自动避免权限问题)。
6.3 QuickStart 模式中断导致 Dashboard 无法访问
问题:初始化向导选择 QuickStart 模式后中途意外退出,Gateway 未完成初始化,后续无法进入 Dashboard。
解决:选择 Manual 模式重新初始化,Manual 模式优先保证 Gateway 初始化完成。如仍无法修复,完全重装:
docker compose down
mv ./data/config ./data/config-backup
mkdir -p ./data/config
chown -R 1000:1000 ./data/config
docker compose up -d openclaw-gateway
docker compose run --rm openclaw-cli onboard
6.4 Docker 容器权限问题
问题:容器启动后无法读写挂载目录,报 EACCES 或 permission denied。
解决:OpenClaw Docker 镜像内运行用户为 node(uid 1000),宿主机挂载目录必须匹配:
chown -R 1000:1000 /opt/openclaw/data
# 或宝塔路径
chown -R 1000:1000 /www/wwwroot/openclaw/data
6.5 ghcr.io 镜像拉取失败
问题:国内网络拉取 GitHub Container Registry 镜像超时。
解决:使用镜像代理:
docker pull docker.aityp.com/image/ghcr.io/openclaw/openclaw:latest
docker tag docker.aityp.com/image/ghcr.io/openclaw/openclaw:latest ghcr.io/openclaw/openclaw:latest
6.6 反向代理 502 Bad Gateway
问题:通过域名访问返回 502。
排查顺序:检查 OpenClaw 容器是否运行(docker compose ps)、检查 18789 端口是否监听(curl http://127.0.0.1:18789/healthz)、检查 Nginx 配置中目标 URL 是否正确(末尾不带斜杠)、检查防火墙是否放行。
6.7 Web UI 无法远程访问
推荐使用 SSH 隧道方式访问,不直接暴露端口:
# 在本地机器执行
ssh -N -L 18789:127.0.0.1:18789 user@server_ip
# 然后本地浏览器访问 http://localhost:18789/#token=YOUR_TOKEN
如服务器重装后 SSH 连接报 Host key verification failed:
ssh-keygen -R <server_ip>
6.8 宝塔与 ufw 防火墙冲突
问题:宝塔面板开了端口,但 ufw 未放行,导致外部无法访问。宝塔防火墙与系统 ufw 是两层独立防线。
解决:同步配置三层防火墙(云安全组 + ufw + 宝塔防火墙),详见第 3.3 节。
6.9 低配 VPS 安装 OOM(退出码 137)
问题:1GB RAM 的 VPS 上 npm install 或 Docker 构建被 OOM Killer 终止。
解决:配置 Swap(见第 2.2 节),或降低构建堆内存:
export NODE_OPTIONS=--max-old-space-size=4096
6.10 终端渲染"卡住"
问题:TUI 界面看起来卡住不动。
解决:这并非程序卡死,滚动鼠标滚轮即可刷新终端显示。
七、迁移方案深度对比
7.1 两种思路迁移能力对比
| 维度 | 思路一(宝塔 + OpenClaw) | 思路二(直接 Docker 部署) |
|---|---|---|
| 迁移核心对象 | 宝塔配置 + OpenClaw 配置目录 + Node.js 环境 | Docker 镜像 + 数据卷 + docker-compose.yml |
| 迁移步骤数 | 5-8 步(含环境重建) | 3-4 步(拉镜像 + 恢复数据 + 启动) |
| 停机时间 | 30 分钟 - 2 小时 | 5-15 分钟 |
| 数据完整性风险 | 中(手动复制可能遗漏、权限不一致) | 低(数据卷整体迁移) |
| 回滚能力 | 弱(需重新配置环境) | 强(保留旧镜像可秒级回滚) |
| 跨平台一致性 | 低(目标环境需匹配 Node.js 版本) | 高(Docker 保证环境一致) |
| 宝塔一键迁移 | 可迁移网站/数据库,但 OpenClaw 非标准网站需手动处理 | 不适用 |
| 环境依赖重建 | Node.js 版本、npm 全局包需重新安装 | 镜像自带环境,无需重装 |
7.2 思路一迁移流程
# 1. 停止服务
cd /www/wwwroot/openclaw && docker compose down
# 2. 打包配置和数据
tar -czf openclaw-backup.tar.gz -C /www/wwwroot/openclaw data .env docker-compose.yml
# 3. 使用宝塔一键迁移工具迁移网站/数据库配置
# (OpenClaw 数据需手动处理)
# 4. 新服务器安装宝塔面板
curl -sSO https://download.bt.cn/install/install_panel.sh && bash install_panel.sh docscenter
# 5. 安装 Docker 管理器(软件商店)
# 6. 恢复 OpenClaw 数据
cd /www/wwwroot/openclaw
tar -xzf openclaw-backup.tar.gz
chown -R 1000:1000 data
# 7. 拉取镜像并启动
docker pull ghcr.io/openclaw/openclaw:latest
docker compose up -d openclaw-gateway
# 8. 验证
curl -fsS http://127.0.0.1:18789/healthz
7.3 思路二迁移流程
# 1. 停止服务
cd /opt/openclaw && docker compose down
# 2. 备份数据
tar -czf openclaw-backup-$(date +%Y%m%d).tar.gz data .env docker-compose.yml
# 3. 传输到新服务器
scp openclaw-backup-*.tar.gz docker-compose.yml user@new-server:~/
# 4. 新服务器安装 Docker
curl -fsSL https://get.docker.com | bash
sudo systemctl enable docker
# 5. 拉取镜像
docker pull ghcr.io/openclaw/openclaw:latest
# 6. 恢复数据
mkdir -p /opt/openclaw && cd /opt/openclaw
tar -xzf ~/openclaw-backup-*.tar.gz
chown -R 1000:1000 data
# 7. 启动
docker compose up -d openclaw-gateway
# 8. 验证
docker compose ps
curl -fsS http://127.0.0.1:18789/healthz
7.4 回滚策略对比
思路二的 Docker 部署具有显著回滚优势:
# 升级前先标记当前版本
docker tag ghcr.io/openclaw/openclaw:latest openclaw:backup-$(date +%Y%m%d)
# 升级
docker compose pull
docker compose up -d
# 如出问题,秒级回滚
docker compose down
# 修改 docker-compose.yml 中 image 为 openclaw:backup-YYYYMMDD
docker compose up -d
思路一的 npm 安装方式回滚:
npm install -g openclaw@<旧版本号>
openclaw doctor
openclaw gateway restart
八、长期运维最佳实践
8.1 日志管理
| 部署方式 | 日志查看命令 | 日志位置 |
|---|---|---|
| Docker | docker compose logs -f --tail=100 |
容器内 stdout |
| Docker + systemd | journalctl -u openclaw -f |
journald |
| npm + systemd | journalctl -u openclaw-gateway -f |
journald |
| OpenClaw CLI | openclaw gateway logs --follow |
~/.openclaw/logs/ |
日志轮转配置(/etc/logrotate.d/openclaw):
/opt/openclaw/data/config/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
}
8.2 监控
进程存活监控脚本(配合 crontab 每 5 分钟执行):
#!/bin/bash
# /opt/openclaw/scripts/check-openclaw.sh
if ! docker compose -f /opt/openclaw/docker-compose.yml ps | grep -q "Up"; then
docker compose -f /opt/openclaw/docker-compose.yml up -d openclaw-gateway
echo "$(date): OpenClaw restarted" >> /var/log/openclaw-monitor.log
fi
# crontab
*/5 * * * * /opt/openclaw/scripts/check-openclaw.sh
OpenClaw 内置健康检查端点:/healthz(存活检查)、/readyz(就绪检查)、/api/diagnostics/prometheus(Prometheus 指标),可集成到 Prometheus + Grafana 监控体系。
8.3 版本升级流程
升级前必做:
docker compose run --rm openclaw-cli --version
docker compose run --rm openclaw-cli status
# 备份当前数据
tar -czf /opt/openclaw/backup/pre-upgrade-$(date +%Y%m%d).tar.gz data
升级执行:
cd /opt/openclaw
docker compose pull
docker compose up -d
升级后必做:
docker compose run --rm openclaw-cli doctor
docker compose run --rm openclaw-cli security audit --deep
curl -fsS http://127.0.0.1:18789/healthz
8.4 数据备份策略
| 备份对象 | 位置 | 重要性 | 频率 |
|---|---|---|---|
| 主配置目录 | ./data/config/ |
必须 | 每日 |
| 工作区 | ./data/workspace/ |
必须 | 每日 |
| .env 文件 | ./ |
必须 | 每次修改后 |
| docker-compose.yml | ./ |
必须 | 每次修改后 |
| 运行日志 | ./data/config/logs/ |
建议 | 每周 |
备份脚本(crontab 每日凌晨 2 点执行):
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/opt/openclaw/backup"
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/openclaw_$DATE.tar.gz -C /opt/openclaw data .env docker-compose.yml
find $BACKUP_DIR -name "openclaw_*.tar.gz" -mtime +30 -delete
九、两种部署思路综合决策分析
9.1 对比总表
| 维度 | 思路一(宝塔 + OpenClaw) | 思路二(直接 Docker 部署) |
|---|---|---|
| 运维门槛 | 低,图形化管理 | 中,需命令行/Docker 基础 |
| 安全性 | 中,宝塔面板本身增加攻击面 | 高,容器隔离 + 最小权限 |
| 迁移便利性 | 中,宝塔一键迁移但 OpenClaw 需手动处理 | 高,镜像 + 数据卷迁移极简 |
| 停机时间 | 30 分钟 - 2 小时 | 5-15 分钟 |
| 数据完整性 | 中,手动复制有风险 | 高,数据卷整体迁移 |
| 回滚能力 | 弱 | 强,秒级回滚 |
| 多服务共存 | 强,宝塔擅长管理多网站 | 中,需自行配置 |
| 资源占用 | 较高(宝塔 + Docker + Nginx) | 较低(Docker + Nginx) |
| 可视化文件管理 | 有,宝塔文件管理器 | 无,需命令行 |
| SSL 证书管理 | 一键申请自动续签 | certbot 自动化 |
| 适合团队 | 运维能力较弱的个人/小团队 | 有技术能力的团队/企业 |
9.2 适用场景与推荐
思路一(宝塔 + OpenClaw)适合:
服务器上同时运行多个网站或服务、运维团队习惯图形化管理界面、不需要频繁迁移、对宝塔生态(数据库管理、文件管理、计划任务)有明确需求。此方案下推荐使用宝塔 Docker 管理器 + Docker Compose 部署 OpenClaw(路径 A),再配合宝塔网站功能配置反向代理和 SSL,兼顾图形化便利与 Docker 隔离。
思路二(直接 Docker 部署)适合:
专注于 OpenClaw 部署、需要频繁迁移或弹性扩展、对安全性和可控性要求高、需要快速回滚和版本管理、有一定 Linux/Docker 技术能力。此方案在迁移便利性、停机时间、数据完整性、回滚能力方面具有压倒性优势。
9.3 最终推荐
针对用户明确提出的"方便后续迁移与管理"需求,本文档推荐思路二(Docker Compose 直接部署 + systemd 托管 + Nginx 反向代理 + Let's Encrypt SSL)作为首选方案。理由如下:
第一,迁移效率。Docker 镜像加数据卷的迁移方式只需 3-4 步、5-15 分钟停机时间,远优于宝塔环境下需要重建 Node.js 环境和手动处理非标准网站配置的 30 分钟至 2 小时;
第二,环境一致性。Docker 镜像保证跨平台运行环境完全一致,消除"在我机器上能跑"的问题。目标服务器只需安装 Docker,无需匹配 Node.js 版本、npm 全局包等依赖;
第三,回滚能力。Docker 部署可通过保留旧镜像实现秒级回滚,而宝塔环境下的 npm 安装方式回滚需要重新安装指定版本并运行 doctor 修复配置;
第四,安全隔离。Docker 容器配合 cap_drop: ALL、no-new-privileges: true、--bind loopback 提供最彻底的安全隔离,不引入宝塔面板本身的攻击面(面板端口暴露、默认弱密码等);
第五,Ubuntu 22.04 LTS 原生优势。systemd 是 Ubuntu 22.04 的原生服务管理器,Nginx 和 certbot 均可通过 apt 直接安装,无需额外面板即可实现完整的生产级运维;
如用户服务器上还有其他网站或服务需要管理,可在思路二基础上额外安装宝塔面板仅用于管理其他站点,OpenClaw 独立通过 Docker Compose 运行,两者互不干扰;
十、诊断命令速查表
| 命令 | 用途 |
|---|---|
docker compose ps |
查看容器运行状态 |
docker compose logs -f --tail=100 |
实时查看容器日志 |
curl -fsS http://127.0.0.1:18789/healthz |
Gateway 存活检查 |
curl -fsS http://127.0.0.1:18789/readyz |
Gateway 就绪检查 |
docker compose run --rm openclaw-cli status |
OpenClaw 完整系统诊断 |
docker compose run --rm openclaw-cli doctor |
检查配置问题 |
docker compose run --rm openclaw-cli doctor --fix |
自动修复常见问题 |
docker compose run --rm openclaw-cli security audit --deep |
深度安全审计 |
docker compose run --rm openclaw-cli gateway status |
Gateway 运行状态 |
docker compose run --rm openclaw-cli dashboard --no-open |
获取 Dashboard URL |
docker compose run --rm openclaw-cli config |
修改配置 |
docker compose run --rm openclaw-cli plugins list |
查看已安装插件 |
docker stats openclaw-gateway |
容器资源占用 |
sudo journalctl -u openclaw -f |
systemd 服务日志 |
sudo nginx -t |
验证 Nginx 配置 |
sudo ufw status verbose |
查看防火墙状态 |
References
- OpenClaw GitHub Repository
- OpenClaw 官方安装脚本
- OpenClaw 官方文档(中文)
- OpenClaw Docker 部署文档
- Ubuntu下openclaw部署全流程 - 博客园
- openclaw新手部署详细教程——适用于ubuntu22.04 - CSDN
- Ubuntu 22.04安装部署OpenClaw完整教程 - CSDN
- 关于OpenClaw部署在Ubuntu上的经验小结 - 博客园
- Ubuntu上docker安装OpenClaw - 腾讯云
- Ubuntu 部署 OpenClaw 终极指南 - CSDN
- Ubuntu 云服务部署 OpenClaw 并接入飞书机器人 - 博客园
- 全网最详细安装部署教程 - GitHub Pages
- OpenClaw 完全部署指南:从入门到安全加固 - 知乎
- VMWare虚拟机OpenClaw部署踩坑实录 - 博客园
- OpenClaw安全部署使用完全指南|25类Tools与53个Skills - 阿里云
- 手把手本地部署OpenClaw安全篇 - CSDN
- OpenClaw公网部署:全链路安全加固 - 腾讯云
- OpenClaw Docker容器化部署生命周期管理 - 阿里云
- 宝塔面板官方安装文档
- 宝塔Linux面板命令大全
- 宝塔面板 Node.js PM2 部署教程
- 宝塔面板整机迁移教程
- OpenClaw中文文档:升级、迁移与卸载 - 博客园
- 在Linux上用systemd运行OpenClaw守护进程 - OpenClaw中文站
- OpenClaw生产环境稳定性清单 - 鲲鹏AI
评论区