Cara Backup Otomatis CyberPanel Website ke S3 tanpa menggunakan CyberPanel Cloud

Bash script untuk melakukan backup semua website yang ada di CyberPanel ke S3 storage tanpa menggunakan CyberPanel Cloud

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 dan SECRET_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 sebelumnya
  • MINIO_BUCKET : Nama bucket yang digunakan
  • MINIO_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