现在很多项目会使用 docker 部署,我最常用的 docker 项目是 uptime-kuma 和 umami。之前运行亚马逊云 AWS 的 light sail 上,三个月的试用期马上就到了,前几天发现谷歌云长期免费服务器,每月200GB流量也够折腾。所以打算把 uptime-kuma 这个 docker 项目迁移到谷歌云上,迁移和备份过程如下:
1、提取原主机 uptime-kuma 的数据文件
得益于之前部署 uptime-kuma 项目的时候将项目的数据文件挂载到宿主机目录,所以提取数据文件很简单。以下是原 docker-compose.yml 文件内容:
services:
uptime-kuma:
image: louislam/uptime-kuma
container_name: uptime-kuma
volumes:
- ./uptime-kuma:/app/data
ports:
- 3001:3001
可看出之前已将 /app/data 中的数据挂载到宿主机的 ./uptime-kuma 目录中,这就方便了,来到项目目录路径 /uptime-kuma 下,执行如下代码,进行压缩,取名为backup.tar.gz。
tar -czf backup.tar.gz uptime-kuma
2、将提取的数据文件转移至新主机,部署项目
将步骤1中的备份文件通过 FTP 或 SCP 传到新主机,这次为了以后迁移更加方便,直接将项目部署在 /var/docker/uptime-kuma 目录,参考如下 docker-compose.yml 文件内容:
services:
uptime-kuma:
image: louislam/uptime-kuma
container_name: uptime-kuma
volumes:
- /var/docker/uptime-kuma:/app/data
ports:
- 3001:3001
所以要提前创建 /var/docker/uptime-kuma 目录,同时将备份的压缩文件上传到该目录下。
mkdir -p /var/docker/uptime-kuma
操作完成后,在 /var/docker/uptime-kuma 目录下直接运行:
docker-compose up -d
完成项目部署,直接在浏览器打开http://ip+端口3001,如果恢复的成功,则是直接登录的窗口,如失败,会是让你创建账号的窗口。这点可以判断是否恢复成功。
3、备份到电报群组
提前准备好电报机器人的API和频道ID,然后按如下操作:
在 /var/docker/uptime-kuma 目录下创建 backup.sh 脚本
cd /var/docker/uptime-kuma
nano backup.sh
拷贝以下脚本内容到 backup.sh 文件中:
#!/bin/bash
# Telegram Bot API token
token="替换为你的电报机器人 API "
# Chat ID of the group
chat_id="替换为你电报的频道ID"
# 定义备份目录
backup_dir="/backup"
# 创建一个备份目录(如果不存在)
mkdir -p "$backup_dir"
# 备份docker_volumes目录中的数据到备份目录
cp -r /var/docker/uptime-kuma "$backup_dir"
# 压缩备份文件夹
timestamp=$(date +"%Y-%m-%d_%H-%M-%S")
backup_file="docker_uptime_kuma_$timestamp.tar.gz"
tar -czf "$backup_dir/$backup_file" -C "$backup_dir" uptime-kuma
# 发送备份文件到电报群组
curl -F chat_id="$chat_id" -F document=@"$backup_dir/$backup_file" "https://api.telegram.org/bot$token/sendDocument"
给 backup.sh 添加执行权限:
chmod + x backup.sh
然后在当前目录执行如下命令:
bash back.sh
此时,如果电报群组中收到了备份文件,则说明成功,否则,再仔细检查一下,是否哪里出了问题。
既然手动执行可行,那么我们完全可以加入到系统自动执行命令中,我们输入:
crontab -e
首次执行,会要求选择编辑器,我习惯了 nano,直接选择1即可。
之后,我们在打开的文件中添加:
0 8 * * * /bin/bash /var/docker/uptime-kuma/back.sh
这句代码的意思是在每天早上八点会自动执行该脚本,如果担心哪里有误,可以先将时间改为测试的下一分钟,看是否执行成功,然后再改为一个固定的时间点。
好了,这就是今天的分享。如果大家有更为方便好用的方法或是其它好玩的项目,可以分享给我哟。