Brevo + 七牛云存储备份网站数据

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