前言
国内这些云厂商服务器续费价格好贵呀,一个2核心2G的服务器,首年 99元/年 第二年续费就能涨到 200+元/年 。😭所以只能每年服务器快到期了就在买一台服务器,所有服务从旧服务器迁移到新服务器上。
这篇文章就记录一下自己在今年迁服务器的流程和踩的坑
1. 打包并迁移数据
服务器中文件结构如下
docker/
├── hugo-blog/
│ ├── blog/
│ └── docker-compose.yaml
├── netbird/
│ ├── data/
│ └── docker-compose.yaml
├── nginx/
│ ├── data/
│ └── docker-compose.yaml
...
└── restdesk-sercer/
├── data/
└── docker-compose.yaml
因为所有服务的数据都在 docker/ 文件下,所以只需要将 docker/ 文件夹整个打包后传到新服务器上就行。
-
在打包
docker/前需要先停止所有服务# 进入 docker/ 目录 # 逐个compose目录停止服务 for d in */; do echo "stop $d" cd "$d" docker compose down cd .. done -
打包
docker/目录# 压缩整个目录 tar -zcvf docker_backup_$(date +%Y%m%d).tar.gz ./docker -
打包完后在逐个启动服务
# 进入 docker/ 目录 # 逐个compose目录启动服务 for d in */; do echo "start $d" cd "$d" docker compose up -d cd .. done -
将打包好的文件从旧服务器迁移到新服务器中
rsync --progress --partial -av docker_backup_20260825.tar.gz 新服务器用户@新服务器IP:/target/path/这个命令指出断点续传,如果传输中断在执行一次这个命令就行
2. 新服务器部署
-
安装docker
# 安装依赖 sudo apt install -y ca-certificates curl gnupg lsb-release # 添加 Docker GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 安装 docker sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin -
安装代理
docker官方仓库在国内基本没法用,各镜像网站也连不上所以最方便的就是让docker流量走代理
# 创建 systemd 配置目录 sudo mkdir -p /etc/systemd/system/docker.service.d # 创建代理配置文件 sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<'EOF' [Service] Environment="HTTP_PROXY=http://127.0.0.1:10808" Environment="HTTPS_PROXY=http://127.0.0.1:10808" EOF # 重载 systemd、重启 docker sudo systemctl daemon-reload sudo systemctl restart docker # 验证代理配置是否成功 docker run hello-world -
acme证书申请
# 安装acme.sh curl https://get.acme.sh | sh -s email=my@example.com在阿里云中获取
Ali_Key和Ali_Secret配置到/root/.acme.sh/acem.sh.env中# 修改默认CA acme.sh --set-default-ca --server letsencrypt # 申请通配符证书 ./acme.sh --issue --dns dns_ali -d *.example.com # 安装证书 acme.sh --install-cert -d example.com \ --key-file /home/levitan/docker/nginx/data/certs/privkey.pem \ --fullchain-file /home/levitan/docker/nginx/data/certs/fullchain.pem \ --reloadcmd "docker exec reverse-proxy nginx -s reload"最后,启动全部服务
# 进入 docker/ 目录 # 逐个compose目录启动服务 for d in */; do echo "start $d" cd "$d" docker compose up -d cd .. done