--- title: "09-迁移" created: 2026-01-13 tags: - 项目筑基 --- # 迁移 ## 第一阶段:旧服务器(数据打包) 写好了备份脚本,迁移就非常简单了。 #### 1. 执行 Docker 备份脚本 `/opt/backup_docker.sh` 是迁移神器 ```bash # 手动运行一次备份,确保是最新的数据 sudo /opt/backup_docker.sh ``` Bash ```bash # 手动运行一次备份,确保是最新的数据 sudo /opt/backup_docker.sh ``` 执行完后, `docker_docker_backup_xxx.tar.gz` 里面已经包含了: - `/opt/stacks` (Dockge 配置) - `/opt/dockge` (Dockge 本身) - `/opt/docker_data` (所有应用的数据:Mysql, Trilium, Nginx, etc.) #### 2. 备份宿主机的“非 Docker”配置(关键!) 因为 Cloudflared 和 EasyTier 是直接装在系统里的,这些不在上面的备份包里。需要手动记下或备份以下内容: 1. **EasyTier 的启动参数:** - 需要保留**Network Secret (组网密码)**。 - 需要保留 **虚拟 IP (10.10.10.1)**。 - *操作:* 备份 `/etc/systemd/system/easytier.service` 文件。 ``` cp /etc/systemd/system/easytier.service /root/easytier.service.bak ``` 2. **Cloudflare Tunnel 的 Token:** - 虽然在 Cloudflare 后台能看到,但最好把那个 `sudo cloudflared service install eyJ...` 的长命令记在一个记事本里。 3. **看门狗脚本:** - 别忘了 `/opt/check_tunnel.sh`。 ``` cp /opt/check_tunnel.sh /root/ ``` 4. **打包带走:** 把上面这些零散文件打包,或者直接复制内容到本地笔记里。 ## 第二阶段:新服务器(恢复环境) ### 阶段目标 将旧服务器的数据完整迁移至新服务器,并将核心网络层 (EasyTier + Cloudflare) 容器化,实现“解压即用”的快速部署。 --- ### 第一步:基础环境初始化 连上新服务器 SSH,执行以下操作。 **1. 更换系统源 (阿里云)** ``` bash <(curl -sSL https://linuxmirrors.cn/main.sh) --source aliyun ``` **2. 安装 Docker** 使用 TUI 界面安装,更稳妥。 ``` bash <(curl -sSL https://linuxmirrors.cn/docker.sh) # 安装完成后检查 docker --version ``` **3. 配置 Docker 镜像加速 (关键)** 为了防止拉取镜像超时,配置国内加速源。 ``` mkdir -p /etc/docker cat > /etc/docker/daemon.json < `+ Compose` - Name: `network-core` **2. 粘贴配置** ``` version: "3.8" services: # --- EasyTier (组网核心) --- easytier: image: easytier/easytier:latest container_name: easytier hostname: easytier-vps restart: always # 【关键】使用 Host 模式,性能最好,且不需要映射端口 network_mode: host # VPN 需要网络管理权限 privileged: true cap_add: - NET_ADMIN devices: - /dev/net/tun # 启动命令:指定 IP (10.10.10.1) 和 密码 command: -i 10.10.10.1 --network-secret zw200495 # --- Cloudflared (公网入口) --- cloudflared: image: cloudflare/cloudflared:latest container_name: cloudflared restart: always # 【关键】Host 模式,直通本机 localhost:5001 network_mode: host # ⚠️【请修改】填入 Cloudflare Tunnel Token command: tunnel run --token <你的Token> ``` **3. 部署与验证** - 点击 **Deploy**。 - 等待日志出现 `Registered tunnel connection`。 - **验证:** 访问 `https://docker.hxnppll.top`,如果能打开 Dockge,说明公网通了。 --- ### 第五步:客户端适配 (Windows) 因为更换了 VPS,NAT 映射的端口变了,需要更新家里电脑的连接信息。 **1. 获取新端口** 在 VPS 后台查看 NAT 转发:内部 `11010` -> 外部 `?????` (例如 35000)。 **2. 修改 Windows EasyTier 配置** ``` peer # 修改为新 IP 和新端口 uri = "udp://202.189.7.62:35000" ``` **3. 重启 Windows EasyTier** 并尝试 `ping 10.10.10.1`。 --- ### 第六步:复活业务与修正配置 (补漏) **1. 修正镜像策略** 旧备份的 Stack 可能含有 `pull_policy: never`。在新服务器上会导致启动失败。 - 在 Dockge 中编辑其他 Stacks (如 Nginx, Trilium)。 - **删除** `pull_policy: never` 这一行。 - 点击 **Deploy** (让它自动从新配置的阿里云源拉取镜像)。 **2. 启动所有服务** - 逐个启动 `filebrowser`, `uptime-kuma` 等所有业务容器。 --- ### 第七步:恢复自动化脚本 由于架构变更为 Docker,旧脚本已失效,需重写。 **1. 升级版看门狗 (check\_tunnel.sh)** ``` cat > /opt/check_tunnel.sh <<EOF #!/bin/bash TEST_URL="https://docker.hxnppll.top" LOG_FILE="/var/log/tunnel_watchdog.log" NOW=\$(date +"%Y-%m-%d %H:%M:%S") HTTP_CODE=\$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "\$TEST_URL") if [ "\$HTTP_CODE" == "000" ] || [ "\$HTTP_CODE" == "502" ] || [ "\$HTTP_CODE" == "503" ] || [ "\$HTTP_CODE" == "530" ]; then echo "[\$NOW] ⚠️ 故障 (代码: \$HTTP_CODE),重启 Cloudflared 容器..." >> \$LOG_FILE # 重启 Docker 容器 docker restart cloudflared else : fi EOF chmod +x /opt/check_tunnel.sh ``` **2. 恢复备份脚本 (backup\_docker.sh)** ``` cat > /opt/backup_docker.sh <<EOF #!/bin/bash BACKUP_DIR="/opt/backup" DATE=\$(date +%Y%m%d) FILENAME="docker_backup_\$DATE.tar.gz" mkdir -p \$BACKUP_DIR echo "[\$(date)] 开始备份..." tar -czf \$BACKUP_DIR/\$FILENAME /opt/stacks /opt/dockge /opt/docker_data echo "[\$(date)] 备份完成: \$FILENAME" # 清理 7 天前旧备份 find \$BACKUP_DIR -name "docker_backup_*.tar.gz" -mtime +7 -exec rm {} \; EOF chmod +x /opt/backup_docker.sh ``` **3. 写入定时任务** ``` crontab -e ``` 添加: ``` */5 * * * * /opt/check_tunnel.sh 0 3 * * * /opt/backup_docker.sh 0 4 * * 0 docker system prune -af --volumes > /dev/null 2>&1 ``` --- **🎉 迁移完成!** --- ⬅️ [[08-全自动备份方案|全自动备份方案]] 🏠 [[00-网络与项目|00-网络与项目]] ➡️ [[10-VPS Docker 部署完整指南|VPS Docker 部署完整指南]]