BEGINNER GUIDE · MIGRATION

更换 VPS 与服务器迁移详细教程。

用可回滚的顺序,把旧 VPS 上的配置、证书、Docker 服务、数据库、节点和网站迁移到新服务器。 核心原则是先备份、后恢复、再切换,确认稳定前绝不删除旧服务器。

适合新手12 个步骤包含回滚全程使用占位符

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

  1. 安装与旧服务兼容的系统版本,并设置新的高强度登录凭证。
  2. 先配置 SSH 和最小安全组规则,确认可以稳定连接。
  3. 更新系统、安装基础工具,并根据需要安装 Docker。
  4. 创建与旧服务器一致或经过规划的新目录结构。
  5. 在恢复任何服务前,先确认新服务器时间、磁盘和网络正常。

系统与基础工具

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)

  1. 从官方来源安装相同或兼容版本。
  2. 停止新安装的空白服务,按官方方法恢复数据库和配置。
  3. 恢复证书前先检查文件所有者和权限。
  4. 重新启动服务,检查面板端口和所有入站端口。
  5. 登录面板确认配置完整,但不要在公共场所展示连接信息。
数据库与 Volume

恢复 PostgreSQL、MySQL、Redis、SQLite 或容器 Volume 时,使用对应产品的官方流程。新、旧服务不要同时写入同一份逻辑数据。

06 · CERTIFICATES

恢复证书

可以恢复现有证书,也可以在新 VPS 上重新签发。无论哪种方式,都不要通过不安全渠道传输私钥。

  1. 确认备份中的证书、完整链和私钥来自同一次签发。
  2. 复制到新服务器的私密目录,并按服务要求设置所有者和权限。
  3. 更新面板、反向代理或服务配置中的证书路径。
  4. 如果重新签发,先确保验证需要的 DNS 或端口条件已满足。
  5. 重启服务后检查域名、有效期、证书链和自动续期任务。

检查服务与 HTTPS

systemctl status 服务名
curl -I https://node.example.com
域名尚未切换时

公开 DNS 仍指向旧 VPS 时,不要仅凭普通浏览器访问判断新服务器证书。可使用安全的本地解析测试,或在 DNS 切换窗口完成最终验证。

07 · DNS CUTOVER

更新 DNS 解析

  1. 如果可以,迁移前一天把相关 DNS 记录 TTL 调低。
  2. 确认新 VPS 的服务、端口和证书已完成预检查。
  3. 把域名 A 记录从旧服务器 IP 改为新服务器 IP。
  4. 等待解析生效,并从不同网络检查解析结果。
  5. 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

确认无误后关闭旧服务器

  1. DNS 切换后至少观察 24–48 小时。
  2. 确认旧服务器日志不再收到正常业务流量。
  3. 再次重启新 VPS,验证全部服务自动恢复。
  4. 生成迁移后的最终备份,并下载到本地。
  5. 先停止旧服务而不是立即删除 VPS,再观察一个短周期。
  6. 确认无需回滚后,按照供应商流程安全释放旧服务器。

10 · TROUBLESHOOTING

常见问题排查

按照 DNS、端口、服务、配置、数据、客户端的顺序定位,每次只改变一个条件。

面板打不开

检查 DNS 是否已生效、管理端口是否放行、服务是否启动、证书路径是否正确,以及新 VPS 防火墙是否允许访问。

客户端连接超时

确认入站端口正在监听,云安全组和系统防火墙都已放行,客户端没有继续使用旧 IP。

证书错误

检查证书和私钥是否成对、文件权限是否正确、域名是否已指向新服务器,以及服务配置中的路径是否更新。

Docker 服务启动失败

检查 `.env` 是否存在、volume 路径与权限、镜像版本、端口冲突和 Compose 配置。

数据库为空或报错

确认恢复的是正确备份,版本兼容,数据库文件所有者、权限和连接地址正确。

DNS 已改但仍访问旧服务器

本地或运营商 DNS 仍可能缓存旧记录;用 nslookup 查询并等待原 TTL 到期。

重启后服务没有回来

检查 systemd 是否 enable、容器重启策略、挂载盘是否自动挂载,以及启动依赖顺序。

只有一部分功能可用

逐项比较旧、新服务器的环境变量、挂载目录、端口和服务版本,不要一次改多个配置。

11 · ROLLBACK

回滚方案

迁移前就要写好回滚条件,例如核心服务不可用、数据不一致或证书无法恢复。触发条件后按固定顺序执行:

01

立即停止继续修改新服务器,并记录最后一次成功与失败的检查结果。

02

确认旧 VPS 上的服务和数据仍然完整,必要时先重新启动旧服务。

03

把 DNS A 记录改回旧服务器 IP,并保留原 TTL 设置。

04

等待 DNS 缓存更新,同时通知自己的客户端暂时使用旧入口。

05

验证旧服务器恢复正常后,再离线分析新 VPS 的日志和配置差异。

06

修复新服务器后重新安排迁移窗口,不要在同一故障窗口反复切换。

回滚不是失败

安全回到可用状态,再重新安排迁移,比在故障窗口冒险修复更可靠。始终保留旧服务器备份和完整迁移记录。

12 · SECURITY

迁移安全清单

  • 新 VPS 使用新的高强度面板密码,不继续复用旧服务器密码。
  • 检查 SSH 登录记录和已授权密钥,移除不认识或不再需要的密钥。
  • 关闭不必要端口,并分别复查云安全组和系统防火墙。
  • 完成系统与服务更新;升级前确认备份与版本兼容。
  • 确认 `.env`、证书私钥和数据库备份只允许必要账号读取。
  • 备份压缩包不放在网站公开目录,不上传 GitHub 或公共网盘。
  • 迁移结束后删除临时传输副本前,先确认已有至少一份可靠离线备份。
  • 旧 VPS 下线前撤销不再使用的 Token、密码、订阅链接和访问凭证。
  • 保留迁移记录,但用字段名称或掩码代替真实密码、Token、私钥和连接链接。
迁移完成标准

新 VPS 重启后稳定运行、所有功能通过测试、DNS 已完全切换、离线备份可恢复、旧凭证已撤销,并且仍保留明确回滚记录。