迁移
第一阶段:旧服务器(数据打包)
写好了备份脚本,迁移就非常简单了。
1. 执行 Docker 备份脚本
/opt/backup_docker.sh 是迁移神器
# 手动运行一次备份,确保是最新的数据
sudo /opt/backup_docker.sh
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 是直接装在系统里的,这些不在上面的备份包里。需要手动记下或备份以下内容:
-
EasyTier 的启动参数:
- 需要保留Network Secret (组网密码)。
- 需要保留 虚拟 IP (10.10.10.1)。
- 操作: 备份
/etc/systemd/system/easytier.service文件。
cp /etc/systemd/system/easytier.service /root/easytier.service.bak -
Cloudflare Tunnel 的 Token:
- 虽然在 Cloudflare 后台能看到,但最好把那个
sudo cloudflared service install eyJ...的长命令记在一个记事本里。
- 虽然在 Cloudflare 后台能看到,但最好把那个
-
看门狗脚本:
- 别忘了
/opt/check_tunnel.sh。
cp /opt/check_tunnel.sh /root/ - 别忘了
-
打包带走: 把上面这些零散文件打包,或者直接复制内容到本地笔记里。
第二阶段:新服务器(恢复环境)
阶段目标
将旧服务器的数据完整迁移至新服务器,并将核心网络层 (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 <<EOF
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://docker.m.daocloud.io",
"https://docker.1panel.dev",
"https://docker.juewuy.com"
]
}
EOF
# 重启 Docker 生效
systemctl daemon-reload
systemctl restart docker
4. 校准服务器时区 (可选但推荐)
sudo timedatectl set-timezone Asia/Shanghai
第二步:数据恢复
1. 上传备份 使用 SSH 工具将 docker_backup_xxxx.tar.gz 上传至 /root 目录。
2. 解压归位
# -C / 表示解压到根目录,自动还原到 /opt/dockge 等路径
tar -xzf docker_backup_*.tar.gz -C /
# 验证数据是否回来
ls /opt
第三步:启动管理面板 (Dockge)
数据归位后,先启动面板。
cd /opt/dockge
docker compose up -d
开启nat转发
访问http://202.189.7.62:20113 进入管理页面
第四步:部署网络核心 (Network Core)
这是迁移的重头戏,把 EasyTier 和 Cloudflare 跑在 Docker 里。
1. 创建 Stack
- Dockge 左上角 ->
+ 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 <<<span class="hljs-string">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</span>
chmod +x /opt/check_tunnel.sh
2. 恢复备份脚本 (backup_docker.sh)
cat > /opt/backup_docker.sh <<<span class="hljs-string">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</span>
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
🎉 迁移完成!
⬅️ 全自动备份方案 🏠 00-网络与项目 ➡️ VPS Docker 部署完整指南
💬 评论