OpenClaw迁移服务器

来自个人维基
Hovercool留言 | 贡献2026年5月20日 (三) 18:44的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

OpenClaw 服务器迁移记录

迁移日期:2026-05-21
源服务器:VM-0-9-ubuntu(root 用户)
目标服务器:VM-0-8-ubuntu(openclaw 用户)


整体思路:先在新服务器创建好环境、安装最新版本OpenClaw跑起来,然后老服务器上也升级到最新版本,再把老服务器上的 .openclaw/ 整个目录拷贝到新服务器上,同时由于路径差异、把路径替换更新,最后运行openclaw doctor修复跑起来。

一、创建系统用户

# 创建一个名为 openclaw 的系统用户,指定家目录
sudo adduser openclaw --system --group --home /home/openclaw

二、配置 sudo 权限

sudo visudo

添加以下行:

openclaw ALL=(ALL) NOPASSWD: ALL

切换到 openclaw 用户:

sudo su -s /bin/bash openclaw

三、安装 OpenClaw

curl -fsSL https://openclaw.ai/install.sh | bash

配置 PATH

编辑 ~/.bashrc,在末尾添加:

export PATH="/home/openclaw/.npm-global/bin:$PATH"

刷新配置:

source ~/.bashrc

四、解决 systemd --user 不可用

安装 gateway 时报错:

systemctl --user unavailable: Failed to connect to bus: No medium found

原因:系统用户默认没有持久化的 systemd 用户会话。

修复步骤

# 1. 启用 linger(允许用户服务在未登录时持续运行)
sudo loginctl enable-linger openclaw

# 2. 设置 XDG_RUNTIME_DIR 环境变量
export XDG_RUNTIME_DIR=/run/user/$(id -u)

# 3. 写入 .bashrc 永久生效
echo 'export XDG_RUNTIME_DIR=/run/user/$(id -u)' >> ~/.bashrc

# 4. 验证
systemctl --user status

正常的话,会打印类似这些:

systemctl --user status
● VM-0-8-ubuntu
    State: running
    Units: 139 loaded (incl. loaded aliases)

五、管理界面访问(SSH 隧道)

在本地电脑执行,建立加密通道:

ssh -L 18789:localhost:18789 openclaw@<服务器公网IP>

原理:本地 127.0.0.1:18789 → 加密隧道 → 服务器 127.0.0.1:18789

本地浏览器打开 http://localhost:18789 即可访问管理界面。

六、常用运维命令

openclaw status --all    # 查看所有状态
openclaw doctor          # 完整健康检查
openclaw logs --follow   # 实时日志
openclaw gateway restart # 重启服务
openclaw update          # 升级到最新版

迁移前建议:两边服务器先升级到同一个版本再开始。

七、备份与恢复

7.1 源服务器备份

# 停止网关
openclaw gateway stop

# 打包状态目录
cd ~
tar -czf openclaw-state-backup.tar.gz .openclaw

7.2 覆盖到新服务器

将备份包上传到新服务器后解压覆盖到 ~/.openclaw/

7.3 路径替换

⚠️ 注意:源服务器使用 root,目标使用 openclaw 用户,配置文件中存在硬编码的旧路径,必须批量替换。

替换脚本参考(脚本替换前会备份整个.openclaw目录):

migrate-openclaw.sh

# 1. 备份(放在 .openclaw 目录外,避免递归)
cp -r ~/.openclaw ~/openclaw_backup_$(date +%Y%m%d_%H%M%S)

# 2. 找出所有包含 /root/.openclaw 的文本文件(排除二进制)
grep -rl '/root/.openclaw' ~/.openclaw --exclude-dir=backup_* | while read -r file; do
    echo "正在处理: $file"
    sed -i 's|/root/.openclaw|/home/openclaw/.openclaw|g' "$file"
done

# 3. 验证是否还有残留
grep -r '/root/.openclaw' ~/.openclaw --exclude-dir=backup_*

7.4 踩坑:数据库文件被误伤

📌 sed -i 会对所有匹配文件执行文本替换。SQLite 数据库文件(main.sqlite)是二进制文件,不应被 sed 处理,否则会损坏。

恢复方法

# 从提前备份的目录中恢复数据库
cp /home/openclaw/openclaw_backup_20260521_005100/memory/main.sqlite \
   .openclaw/memory/main.sqlite

八、验证与启动

openclaw doctor          # 健康检查
openclaw doctor --fix    # 自动修复
openclaw gateway restart # 重启网关
openclaw tui             # 进入 TUI 管理界面

参考