By Noxxxx from https://www.noxxxx.com/?post_type=post&p=2492
欢迎分享与聚合,尊重版权,可以联系授权
2025-01-05 更新压缩文件命令,忽略日志和一些用处不大的目录,较少备份文件大小
由于我的服务都是基于 Docker 容器化的(像 Git 服务和其他域名下的站点内容),因此最简单的备份方式就是压缩复制文件夹下的所有内容,恢复的时候直接解压还原,然后运行 compose
命令即可。
Brevo
为什么选择这家呢?
由于国内的邮件服务商大部分都关闭了免费的 SMTP 服务,都要开通企业邮箱才能使用域名邮箱及 SMPT 服务,因此我采用 Brevo 提供的免费 SMTP 服务来发送邮件做为备份成功的消息通知,在上一篇中有介绍过 Brevo 的相关配置,感兴趣的可以点进去看看,免费的订阅计划限制了每天只能发送 300 封邮件,但对于小站点每日凌晨备份一次的场景来说,基本足以。
七牛云
国内算是运行了比较久的对象存储服务提供商了,一直有免费的存储和下载额度,但是仅针对 HTTP 流量而言,同样的对于一个简单的备份场景来说,足以!

首先需要选择并创建海外的空间,因为需要绑定加速域名,如果是国内空间,但是域名没有备案的话,是无法绑定上的,因此选择海外空间,配合未备案的域名。
备份脚本
#!/bin/bash
send_success_mail() {
curl --request POST \
--url https://api.brevo.com/v3/smtp/email \
--header 'accept: application/json' \
--header 'api-key: brevo 上创建的 key' \
--header 'content-type: application/json' \
--data '
{
"sender": {
"id": 1
},
"subject": "脚本执行成功",
"textContent": "服务器备份脚本执行成功",
"to": [
{
"email": "demo@qq.com"
}
]
}
'
}
# 定义要压缩的文件夹名称
FOLDER_NAME="/home/docker"
# 获取当前日期和时间
CURRENT_DATETIME=$(date "+%Y%m%d%H%M%S")
# 定义压缩文件的名称(包括日期和时间)
ARCHIVE_NAME="server_${CURRENT_DATETIME}.tar.gz"
# 压缩文件夹
tar -czf $ARCHIVE_NAME --exclude='*/node_modules/*' --exclude='*/log*' --exclude='*/.idea/*' --exclude='*/.pnpm-store/*' --exclude='*/.vscode/*' $FOLDER_NAME
# 上传压缩文件到七牛云存储
BUCKET="填入 bucket 名称"
/path_to_your_qshell/qshell rput $BUCKET $ARCHIVE_NAME "./${ARCHIVE_NAME}"
# 检查上传是否成功
if [ $? -eq 0 ]; then
echo "Upload successful, sending mail..."
send_success_mail
else
echo "Upload failed."
fi
# 清理压缩文件
rm $ARCHIVE_NAME
prefix=server_$(date -d "yesterday" +%Y%m%d)
/home/qshell --prefix $prefix listbucket2 $BUCKET= -o ./removeList.txt
/home/qshell batchdelete $BUCKET= -i removeList.txt -y
Crontab 相关
查看状态
systemctl status cron
重启
systemctl restart cron