Jika di artikel sebelumnya saya pernah membuat artikel tentang bagaimana cara commit otomatis ke GitHub di CyberPanel tanpa Git Manager, kali ini saya ingin berbagi cara untuk melakukan backup otomatis semua website di CyberPanel ke S3 Storage.
Sebenarnya CyberPanel memiliki fitur bawaan untuk melakukan backup otomatis ke S3 storage. Namun untuk menggunakan fitur tersebut, kita harus mengkoneksikan server CyberPanel kita ke CyberPanel Cloud.
Sedangkan metode saya ini menggunakan bash
script sehingga dapat digunakan dan diekseskusi secara otomatis melalui cron tanpa harus mengkoneksikan server CyberPanel ke CyberPanel Cloud.
Pre-requisites
Sebelum memulai, ada beberapa pra-syarat yang harus dipenuhi untuk dapat meggunakan metode ini, yaitu: kita memerlukan S3 client
. Ada banyak opsi yang bisa Anda gunakan, seperti AWS S3 Client atau Minio CLI. Di kesempatan kali ini, saya menggunakan Minio CLI sebagai S3 client saya.
Install dan Mengkonfigurasi S3 Client (Minio CLI)
Di distribusi Linux seperti Arch Linux, Minio client bisa diintall dari package managernya dengan menjalankan pacman -S minio-client
dan binary minio-client akan disimpan dengan nama mcli
.
Sedangkan di distribusi lain seperti Ubuntu, minio-client dapat diinstall dengan cara mendownload program binary-nya. Ikuti dokumentasi officialnya di Minio CLI.
Contoh installasi dan konfigurasi Minio CLI di Ubuntu
1curl https://dl.min.io/client/mc/release/linux-amd64/mc \
2 --create-dirs \
3 -o $HOME/minio-binaries/mc
4chmod +x $HOME/minio-binaries/mc
5export PATH=$PATH:$HOME/minio-binaries/
Kemudian tambakan export PATH=$PATH:$HOME/minio-binaries/
ke system $PATH
variable ke konfigurasi shell yang Anda gunakan (misalnya ~/.bashrc
untuk bash
atau ~/.zshrc
untuk zsh
).
1 echo 'export PATH=$PATH:$HOME/minio-binaries/' >> ~/.bashrc
Membuat Alias Untuk S3-Compatible Service di Minio CLI
Jalankan perintah berikut untuk mebuat alias pada Minio CLI:
1mc alias set ALIAS HOSTNAME ACCESS_KEY SECRET_KEY
- Ubah
ALIAS
dengan nama yang berhubungan dengan service S3. - Ubah
HOSTNAME
dengan endpoint URL S3 yang akan digukanan. - Ubah
ACCESS_KEY
danSECRET_KEY
dengan access dan secret key untuk user pada service S3.
Misalnya:
1mc alias set backup https://s3.amazonaws.com SomERanDomAcceSsKey SomERanDomSeCreTKey
Script Bash Untuk Backup CyberPanel
Setelah S3 alias selesai dikonfigurasi, buat bash
script untuk melakukan backup website-website CyberPanel ke S3.
1#!/bin/bash
2#title : backup_cyberpanel_to_s3.sh
3#description : Simple script to backup CyberPanel websites to S3 Storage.
4#author : Christian Ditaputratama <[email protected]>
5#date : 2023-02-05
6#last update : 2023-02-05
7#version : 0.0.1
8#usage : bash backup_cyberpanel_to_s3.sh
9#notes : This script need S3 client (minio-cli) installed and
10# configured.
11# Please read https://rtd.ditatompel.com/automatic-backup-cyberpanel-websites-to-s3-storage
12# for more information.
13#==============================================================================
14
15set -e
16
17MINIO_REMOTE_ALIAS="backup" # your mc `alias` name
18MINIO_BUCKET="your-bucket"
19MINIO_FOLDER="path/to/remote/folder/" # Mandatory, don't forget the trailing slash at the end
20BACKUP_RETENTION_DAY=7
21
22##### End basic config #####
23# stop editing here
24div============================================================================
25
26PID_FILE=/tmp/cyberpanel_backup_running.pid
27
28# prevent multiple backup running at the same time
29if [ -f "$PID_FILE" ]; then
30 echo "Process is running! Exiting..."
31 exit 0
32fi
33touch $PID_FILE
34
35LIST_WEBSITES=$(cyberpanel listWebsitesJson | jq -r '. | fromjson')
36
37for WEBSITE in $(echo "${LIST_WEBSITES}" | jq -r '.[].domain'); do
38 echo "Backing up ${WEBSITE}"
39 cyberpanel createBackup --domainName ${WEBSITE}
40
41 echo "Uploading to S3..."
42 mc mirror /home/${WEBSITE}/backup/ $MINIO_REMOTE_ALIAS/$MINIO_BUCKET/$MINIO_FOLDER${WEBSITE}/ --overwrite
43
44 echo "Remove old backup..."
45 find /home/${WEBSITE}/backup -type f -name "backup-${WEBSITE}-*.tar.gz" -delete
46
47 mc rm $MINIO_REMOTE_ALIAS/$MINIO_BUCKET/$MINIO_FOLDER${WEBSITE}/ --recursive --dangerous --force --older-than ${BACKUP_RETENTION_DAY}d
48done
49rm $PID_FILE
Ubah file permission supaya script tersebut dapat dieksekusi dengan perintah chmod +x path/to/backup_cyberpanel_to_s3.sh
.
Sesuaikan nilai variable dari script berikut agar sesuai dengan nama alias Minio CLI, S3 bucket dan lokasi folder :
MINIO_REMOTE_ALIAS
: Nama alias pada Minio CLI yang sudah kita set sebelumnyaMINIO_BUCKET
: Nama bucket yang digunakanMINIO_FOLDER
: Lokasi folder pada S3 storage tempat kita menyimpan folder. Jangan lupa untuk memberikan/
pada akhir folder.BACKUP_RETENTION_DAY
: Seberapa lama (dalam hari) backup pada remote storage (S3) disimpan.
Buat cron job agar script backup tersebut dieksekusi, sesuaikan sesuai kebutuhan:
0 * * * * /bin/bash /path/to/backup_cyberpanel_to_s3.sh >/dev/null 2>&1