前言
最近需要将旧服务器的服务迁移到新的 Ubuntu 24 服务器上,主要涉及 OpenClaw 和 Xray 两个核心服务。本文记录了迁移过程中遇到的各种坑点和解决方案,供有类似需求的朋友参考。
为什么需要迁移?
原服务器运行的是 CentOS 9 系统,但在运行 OpenClaw 时遇到了严重的问题:
- 升级或重装 OpenClaw 会导致 SSH 连接断开
- CPU 占用率居高不下
- 磁盘 I/O 异常飙升
- 只能强制重启才能恢复 SSH 访问
排查无果后,决定重装系统并迁移到 Ubuntu 24.04 LTS,同时也完成了一次系统升级。
环境信息
- 源服务器:CentOS 9 (Stream) - 因 OpenClaw 兼容性问题迁移
- 目标服务器:Ubuntu 24.04 LTS
- 核心服务:OpenClaw、Xray
- 备份方式:手动打包配置文件
准备工作
1. 备份关键配置
在旧服务器上,需要备份以下目录:
# OpenClaw 配置
~/.openclaw/
# Xray 配置
/usr/local/etc/xray/
# 系统服务
/etc/systemd/system/*.service
# 网站文件(如有)
/www/wwwroot/
2. 打包备份
tar -czf server_backup.tar.gz \
~/.openclaw/ \
/usr/local/etc/xray/ \
/etc/systemd/system/*.service
迁移步骤
第一步:安装 Node.js 22
OpenClaw 需要 Node.js 环境,Ubuntu 24 默认源版本可能不够新。
坑点 #1:curl 安装脚本需要 sudo
# ❌ 错误方式
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
# 会报错:Permission denied
# ✅ 正确方式
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
第二步:传输备份文件
坑点 #2:Windows 下 SCP 无法自动输入密码
从 Windows 传输文件到 Linux 服务器时,scp 命令不支持命令行传密码。
解决方案:
- 使用 Git Bash / PowerShell 手动执行
scp -r backup_dir user@server:/home/user/
# 然后手动输入密码
- 打包成单个文件再传输
# 先打包
tar -czf backup.tar.gz source_dir/
# 传输单个文件更容易处理
scp backup.tar.gz user@server:/home/user/
第三步:恢复 OpenClaw 配置
坑点 #3:配置文件路径硬编码为 /root
恢复的配置文件中,路径可能指向 /root/.openclaw,但实际以普通用户(如 ubuntu)运行时会遇到权限问题。
# 检查配置
cat ~/.openclaw/openclaw.json | grep root
# 批量替换路径
sed -i 's|/root/.openclaw|/home/ubuntu/.openclaw|g' ~/.openclaw/openclaw.json
# 检查所有配置文件
find ~/.openclaw -name "*.json" -exec grep -l "/root" {} \;
# 全部替换
find ~/.openclaw -name "*.json" -exec sed -i 's|/root/.openclaw|/home/ubuntu/.openclaw|g' {} \;
第四步:安装和启动 OpenClaw
# 全局安装(需要 sudo)
sudo npm install -g openclaw
# 修复可能的配置问题
openclaw doctor --repair
# 启动服务
openclaw gateway start
# 检查状态
openclaw gateway status
坑点 #4:全局 npm 安装需要 sudo
# ❌ 错误
npm install -g openclaw
# Error: EACCES: permission denied
# ✅ 正确
sudo npm install -g openclaw
第五步:恢复 Xray 服务
# 安装 Xray
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
# 恢复配置
sudo cp -r xray/* /usr/local/etc/xray/
# 启动服务
sudo systemctl enable xray
sudo systemctl start xray
第六步:访问 OpenClaw Web 界面
坑点 #5:默认只监听 127.0.0.1
OpenClaw 默认只绑定本地回环地址,无法远程访问。
解决方案 A:SSH 端口转发(推荐)
# 在本地电脑执行
ssh -L 18789:127.0.0.1:18789 user@server
然后访问 http://127.0.0.1:18789/
解决方案 B:修改绑定地址
修改 ~/.openclaw/openclaw.json:
{
"gateway": {
"bind": "0.0.0.0"
}
}
然后重启:
openclaw gateway restart
直接访问 http://server_ip:18789/
常见问题
1. OpenClaw 报权限错误
Error: EACCES: permission denied, mkdir '/root/.openclaw/workspace'
原因:配置文件路径指向 root 目录,但以普通用户运行
解决:批量替换配置文件中的路径(见坑点 #3)
2. Xray 无法启动
# 查看日志
sudo journalctl -u xray -n 50
# 检查配置语法
xray -test -config /usr/local/etc/xray/config.json
3. 服务无法开机自启
# 检查服务状态
sudo systemctl status xray
sudo systemctl list-unit-files | grep xray
# 手动启用
sudo systemctl enable xray
自动化脚本
为了简化重复操作,可以编写恢复脚本:
#!/bin/bash
# restore.sh
set -e
# 配置
BACKUP_DIR="/home/ubuntu/backup"
OPENCLAW_USER="ubuntu"
# 恢复 OpenClaw
echo "[1/4] 恢复 OpenClaw..."
mkdir -p ~/$OPENCLAW_USER/.openclaw
cp -a $BACKUP_DIR/.openclaw/* ~/$OPENCLAW_USER/.openclaw/
find ~/$OPENCLAW_USER/.openclaw -name "*.json" -exec sed -i 's|/root/.openclaw|/home/ubuntu/.openclaw|g' {} \;
chown -R $OPENCLAW_USER:$OPENCLAW_USER ~/$OPENCLAW_USER/.openclaw
# 恢复 Xray
echo "[2/4] 恢复 Xray..."
sudo mkdir -p /usr/local/etc/xray
sudo cp -a $BACKUP_DIR/xray/* /usr/local/etc/xray/
# 恢复系统服务
echo "[3/4] 恢复系统服务..."
sudo cp $BACKUP_DIR/*.service /etc/systemd/system/
sudo systemctl daemon-reload
echo "[4/4] 完成重启..."
sudo systemctl enable xray
sudo systemctl restart xray
openclaw gateway restart
echo "恢复完成!"
总结
迁移过程中最主要的坑点:
- 权限问题:npm 全局安装、路径访问都需要注意
- 路径硬编码:配置文件中
/root路径需要替换 - 网络访问:默认本地绑定需要端口转发或修改配置
只要处理好这几个问题,整个迁移过程还是比较顺利的。OpenClaw 作为现代化的代理工具,配合 Xray 使用体验很好。