Automatically backup CyberPanel websites to S3 storage

以前一直用的宝塔,备份网站也比较简单,直接使用面板的计划任务,宝塔备份到S3优点瑕疵,也是稍微改下就行。

这两天切换到了CyberPanel,发现备份到S3 Compatible必须买 V2,139$/年,我去,这谁买得起?

于是研究了下自动备份到S3 Compatible,参见这篇文章:https://insights.ditatompel.com/en/tutorials/automatic-backup-cyberpanel-websites-to-s3-storage/

https://insights.ditatompel.com/en/tutorials/automatic-backup-cyberpanel-websites-to-s3-storage/feature-cyberpanel-s3-backup-bash-script.54591c8175b62fea139973000d477329.png

### 先决条件

在开始之前,必须满足几个先决条件才能使用此方法: 我们需要一个 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 <[email protected]> #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`

搞定。

这面板要求小鸡的配置高吗?


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[size=19]本论坛免费邀请码MJJ们需要请点击时空隧道进行注册点这 传送:https://www.nodeloc.com/d/1064/77

@“[未知用户]”#p10383 还可以,也是python写的,但是比bt要求要低,更简洁一些。