以前一直用的宝塔,备份网站也比较简单,直接使用面板的计划任务,宝塔备份到S3优点瑕疵,也是稍微改下就行。
这两天切换到了CyberPanel,发现备份到S3 Compatible必须买 V2,139$/年,我去,这谁买得起?
于是研究了下自动备份到S3 Compatible,参见这篇文章:[链接登录后可见]
[链接登录后可见]
先决条件
在开始之前,必须满足几个先决条件才能使用此方法: 我们需要一个 S3 客户端。您可以使用许多选项,例如官方 AWS S3 客户端或 Minio CLI。在本文中,我将使用 Minio CLI 作为我的 S3 客户端。
安装和配置 S3 客户端 (Minio CLI)
在 Linux 发行版(如 Arch Linux)上,可以通过运行 Minio 客户端来安装它的包管理器,并且 minio-client 二进制文件将保存为 .pacman -S minio-clientmcli
在 Ubuntu 等其他发行版中,minio-client 可以通过下载其二进制程序来安装。按照 Minio CLI 页面上的官方文档进行操作。
Ubuntu 上的安装和配置示例
curl https://dl.min.io/client/mc/release/linux-amd64/mc \
--create-dirs \
-o $HOME/minio-binaries/mc
chmod +x $HOME/minio-binaries/mc
export PATH=$PATH:$HOME/minio-binaries/
然后在你使用的 shell 上添加你的系统变量(即:如果你使用 bash 或如果你使用 zsh)。
export PATH=$PATH:$HOME/minio-binaries/$PATH~/bashrc~/.zshrc
在 Minio CLI 上为 S3 兼容服务创建别名
执行以下命令以在 Minio CLI 上创建别名:
mc alias set ALIAS HOSTNAME ACCESS_KEY SECRET_KEY
替换为与您的 S3 服务相关的名称。ALIAS
替换为您的 S3 终端节点 URL。HOSTNAME
替换并SECRET_KEY为您的 S3 访问密钥和私有密钥。ACCESS_KEY
例:
mc alias set backup https://s3.amazonaws.com SomERanDomAcceSsKey SomERanDomSeCreTKey
用于 CyberPanel 备份的 bash 脚本§
配置 S3 别名后,创建脚本以执行 CyberPanel 网站到 S3 的备份作业。
#!/bin/bash
#title : backup_cyberpanel_to_s3.sh
#description : Simple script to backup CyberPanel websites to S3 Storage.
#author : Christian Ditaputratama <svcadm@ditatompel.com>
#date : 2023-02-05
#last update : 2023-02-05
#version : 0.0.1
#usage : bash backup_cyberpanel_to_s3.sh
#notes : This script need S3 client (minio-cli) installed and
# configured.
# Please read https://rtd.ditatompel.com/automatic-backup-cyberpanel-websites-to-s3-storage
# for more information.
#==============================================================================
set -e
MINIO_REMOTE_ALIAS="backup" # your mc `alias` name
MINIO_BUCKET="your-bucket"
MINIO_FOLDER="path/to/remote/folder/" # Mandatory, don't forget the trailing slash at the end
BACKUP_RETENTION_DAY=7
##### End basic config #####
# stop editing here
div============================================================================
PID_FILE=/tmp/cyberpanel_backup_running.pid
# prevent multiple backup running at the same time
if [ -f "$PID_FILE" ]; then
echo "Process is running! Exiting..."
exit 0
fi
touch $PID_FILE
LIST_WEBSITES=$(cyberpanel listWebsitesJson | jq -r '. | fromjson')
for WEBSITE in $(echo "${LIST_WEBSITES}" | jq -r '.[].domain'); do
echo "Backing up ${WEBSITE}"
cyberpanel createBackup --domainName ${WEBSITE}
echo "Uploading to S3..."
mc mirror /home/${WEBSITE}/backup/ $MINIO_REMOTE_ALIAS/$MINIO_BUCKET/$MINIO_FOLDER${WEBSITE}/ --overwrite
echo "Remove old backup..."
find /home/${WEBSITE}/backup -type f -name "backup-${WEBSITE}-*.tar.gz" -delete
mc rm $MINIO_REMOTE_ALIAS/$MINIO_BUCKET/$MINIO_FOLDER${WEBSITE}/ --recursive --dangerous --force --older-than ${BACKUP_RETENTION_DAY}d
done
rm $PID_FILE
更改脚本文件权限,以便可以使用 chmod 命令执行它。
+x path/to/backup_cyberpanel_to_s3.sh
调整变量值以适合您的环境:
MINIO_REMOTE_ALIAS:我们之前配置的别名。
MINIO_BUCKET:您使用的存储桶名称
MINIO_FOLDER:S3 存储上我们保存文件夹的文件夹位置。不要忘记将 / 放在文件夹的末尾。
BACKUP_RETENTION_DAY:远程存储 (S3) 上的备份保留多长时间(以天为单位)。
然后,创建一个 cron 作业,根据需要进行调整:
0 * * * * /bin/bash /path/to/backup_cyberpanel_to_s3.sh >/dev/null 2>&1
搞定。