01 · PREPARATION
迁移前准备
先做完整资产清单。不要依靠记忆,也不要在迁移当天才第一次寻找配置路径。
- 旧服务器 IP 与新服务器 IP(只保存在私密迁移记录中)。
- 需要迁移的域名,以及当前 DNS A/AAAA/CNAME 记录和 TTL。
- SSH 端口、面板端口、面板路径和面板账号。
- 所有正在监听的业务端口及其用途。
- systemd 服务名、Docker Compose 文件目录和镜像版本。
- 数据库类型、数据库路径、备份和恢复方式。
- TLS 证书与私钥路径、签发方式和续期任务。
- 网站文件、反向代理配置、自定义脚本和定时任务路径。
- 客户端当前使用的地址、端口和配置更新时间。
提前通知自己的使用设备,选择业务较少的时间迁移。动态数据服务应安排短暂停写,避免切换期间两台服务器同时写入不同数据。
02 · AUDIT THE OLD VPS
旧 VPS 检查
把命令结果保存到私密迁移记录。输出可能含 IP、用户名和路径,不要上传到公开 Issue 或聊天群。
系统与网络
hostnamectl
ip a
ss -lntp容器与常见服务
docker ps
systemctl status x-ui
systemctl status nginx确认候选目录是否存在
ls -lah /etc/x-ui/
ls -lah /root/- 记录每个监听端口对应的进程和用途。
- 记录服务版本、安装方式、自动启动状态和最近错误日志。
- 确认磁盘使用情况,避免备份时空间不足。
- 检查定时任务、自动续期和自定义脚本。
- 确认当前 DNS 记录和证书有效期。
03 · BACK UP
备份旧服务器数据
先查每个服务的官方备份方法,再把文件集中到临时备份目录。不要假设示例路径在所有服务器上都存在。
创建临时备份目录
mkdir -p /root/backup-vps服务或面板数据库
先查官方备份方法;SQLite 文件应在停止写入或完成一致性备份后复制。
配置文件
记录原路径、所有者和权限,恢复时不要只复制内容而忽略权限。
TLS 证书
备份完整证书链和私钥;私钥必须加密传输并限制读取权限。
Docker / Compose
备份 compose 文件、挂载目录、镜像版本和 `.env`,不要打印 `.env` 内容。
网站与代理
备份网站文件、Nginx/Caddy 配置和续期任务,确认没有把缓存当作源文件。
自定义内容
备份脚本、定时任务、服务单元和必要日志,并写明每项用途。
常见候选路径
下面路径仅用于帮助查找。执行复制前必须用 ls -lah 确认实际存在并理解内容:
仅检查,不代表全部存在
ls -lah /etc/x-ui/
ls -lah /etc/ssl/
ls -lah /root/cert/
ls -lah /etc/nginx/确认内容后再打包
tar -czvf backup-vps.tar.gz /root/backup-vps下载备份到本地电脑
scp root@旧服务器IP:/root/backup-vps.tar.gz .或从旧 VPS 传到新 VPS
scp /root/backup-vps.tar.gz root@新服务器IP:/root/检查压缩包大小和文件清单,并在本地保存一份。涉及数据库时应按数据库官方工具生成一致性备份,而不是在写入过程中直接复制文件。
04 · INITIALIZE THE NEW VPS
初始化新 VPS
- 安装与旧服务兼容的系统版本,并设置新的高强度登录凭证。
- 先配置 SSH 和最小安全组规则,确认可以稳定连接。
- 更新系统、安装基础工具,并根据需要安装 Docker。
- 创建与旧服务器一致或经过规划的新目录结构。
- 在恢复任何服务前,先确认新服务器时间、磁盘和网络正常。
系统与基础工具
apt update && apt upgrade -y
apt install curl wget unzip socat cron -y需要 Docker 时
curl -fsSL https://get.docker.com | bash
systemctl enable docker
systemctl start docker
docker --version上传后解压备份
tar -xzvf backup-vps.tar.gz先查看压缩包文件清单,确认不会覆盖系统关键目录。恢复文件时保留原备份,并逐项复制到目标位置。
05 · RESTORE SERVICES
恢复服务配置
尽量安装与旧 VPS 相同或官方声明兼容的版本,再恢复配置和数据。一次只恢复一个服务并完成测试。
systemd 服务
重新加载并启动
systemctl daemon-reload
systemctl enable 服务名
systemctl restart 服务名
systemctl status 服务名Docker Compose 服务
在 Compose 文件目录执行
docker compose up -d
docker ps
docker compose logs --tail=100 服务名面板类服务(例如 3X-UI / X-UI)
- 从官方来源安装相同或兼容版本。
- 停止新安装的空白服务,按官方方法恢复数据库和配置。
- 恢复证书前先检查文件所有者和权限。
- 重新启动服务,检查面板端口和所有入站端口。
- 登录面板确认配置完整,但不要在公共场所展示连接信息。
恢复 PostgreSQL、MySQL、Redis、SQLite 或容器 Volume 时,使用对应产品的官方流程。新、旧服务不要同时写入同一份逻辑数据。
06 · CERTIFICATES
恢复证书
可以恢复现有证书,也可以在新 VPS 上重新签发。无论哪种方式,都不要通过不安全渠道传输私钥。
- 确认备份中的证书、完整链和私钥来自同一次签发。
- 复制到新服务器的私密目录,并按服务要求设置所有者和权限。
- 更新面板、反向代理或服务配置中的证书路径。
- 如果重新签发,先确保验证需要的 DNS 或端口条件已满足。
- 重启服务后检查域名、有效期、证书链和自动续期任务。
检查服务与 HTTPS
systemctl status 服务名
curl -I https://node.example.com公开 DNS 仍指向旧 VPS 时,不要仅凭普通浏览器访问判断新服务器证书。可使用安全的本地解析测试,或在 DNS 切换窗口完成最终验证。
07 · DNS CUTOVER
更新 DNS 解析
- 如果可以,迁移前一天把相关 DNS 记录 TTL 调低。
- 确认新 VPS 的服务、端口和证书已完成预检查。
- 把域名 A 记录从旧服务器 IP 改为新服务器 IP。
- 等待解析生效,并从不同网络检查解析结果。
- DNS 生效前不要关闭或删除旧服务器。
检查解析
nslookup node.example.com
ping node.example.com不同 DNS 服务和客户端可能在一段时间内分别访问新、旧服务器。因此切换期间两边都应保持可用,但要避免两个实例同时写入会冲突的数据。
08 · VALIDATE
测试新服务器
逐项打勾并保存测试时间。不要因为首页能打开就认为所有后台、节点和数据库都迁移成功。
- 新 VPS 的系统时间、主机名和资源使用正常。
- 面板可以通过新的私密管理入口登录。
- HTTPS 正常,证书域名、有效期和证书链正确。
- 每个业务端口都在预期地址监听,没有意外暴露管理端口。
- 客户端能从至少两种网络环境连接。
- 分享链接或订阅地址如需变化,已只通过安全渠道更新。
- 网站、Bot、数据库和其他相关服务都能正常读写。
- 日志没有持续认证失败、数据库锁定、路径错误或证书错误。
- 新服务器重启后所有必要服务会自动恢复。
- 旧服务器仍可用于回滚,且尚未删除任何关键数据。
基础状态检查
hostnamectl
ss -lntp
systemctl status 服务名
docker ps
docker compose logs --tail=100 服务名09 · OBSERVE
确认无误后关闭旧服务器
- DNS 切换后至少观察 24–48 小时。
- 确认旧服务器日志不再收到正常业务流量。
- 再次重启新 VPS,验证全部服务自动恢复。
- 生成迁移后的最终备份,并下载到本地。
- 先停止旧服务而不是立即删除 VPS,再观察一个短周期。
- 确认无需回滚后,按照供应商流程安全释放旧服务器。
一旦删除,数据库、证书和未发现的配置差异可能无法恢复。至少保留旧服务器和离线备份到观察期结束。
10 · TROUBLESHOOTING
常见问题排查
按照 DNS、端口、服务、配置、数据、客户端的顺序定位,每次只改变一个条件。
面板打不开
检查 DNS 是否已生效、管理端口是否放行、服务是否启动、证书路径是否正确,以及新 VPS 防火墙是否允许访问。
客户端连接超时
确认入站端口正在监听,云安全组和系统防火墙都已放行,客户端没有继续使用旧 IP。
证书错误
检查证书和私钥是否成对、文件权限是否正确、域名是否已指向新服务器,以及服务配置中的路径是否更新。
Docker 服务启动失败
检查 `.env` 是否存在、volume 路径与权限、镜像版本、端口冲突和 Compose 配置。
数据库为空或报错
确认恢复的是正确备份,版本兼容,数据库文件所有者、权限和连接地址正确。
DNS 已改但仍访问旧服务器
本地或运营商 DNS 仍可能缓存旧记录;用 nslookup 查询并等待原 TTL 到期。
重启后服务没有回来
检查 systemd 是否 enable、容器重启策略、挂载盘是否自动挂载,以及启动依赖顺序。
只有一部分功能可用
逐项比较旧、新服务器的环境变量、挂载目录、端口和服务版本,不要一次改多个配置。
11 · ROLLBACK
回滚方案
迁移前就要写好回滚条件,例如核心服务不可用、数据不一致或证书无法恢复。触发条件后按固定顺序执行:
立即停止继续修改新服务器,并记录最后一次成功与失败的检查结果。
确认旧 VPS 上的服务和数据仍然完整,必要时先重新启动旧服务。
把 DNS A 记录改回旧服务器 IP,并保留原 TTL 设置。
等待 DNS 缓存更新,同时通知自己的客户端暂时使用旧入口。
验证旧服务器恢复正常后,再离线分析新 VPS 的日志和配置差异。
修复新服务器后重新安排迁移窗口,不要在同一故障窗口反复切换。
安全回到可用状态,再重新安排迁移,比在故障窗口冒险修复更可靠。始终保留旧服务器备份和完整迁移记录。
12 · SECURITY
迁移安全清单
- 新 VPS 使用新的高强度面板密码,不继续复用旧服务器密码。
- 检查 SSH 登录记录和已授权密钥,移除不认识或不再需要的密钥。
- 关闭不必要端口,并分别复查云安全组和系统防火墙。
- 完成系统与服务更新;升级前确认备份与版本兼容。
- 确认 `.env`、证书私钥和数据库备份只允许必要账号读取。
- 备份压缩包不放在网站公开目录,不上传 GitHub 或公共网盘。
- 迁移结束后删除临时传输副本前,先确认已有至少一份可靠离线备份。
- 旧 VPS 下线前撤销不再使用的 Token、密码、订阅链接和访问凭证。
- 保留迁移记录,但用字段名称或掩码代替真实密码、Token、私钥和连接链接。
新 VPS 重启后稳定运行、所有功能通过测试、DNS 已完全切换、离线备份可恢复、旧凭证已撤销,并且仍保留明确回滚记录。