Backup Semua Web dan Database Menggunakan Script Bash

Dari Dokumentasi Robie
Loncat ke navigasi Loncat ke pencarian

Buat file berikut ini di path mana saja dalam server misalkan diberi nama backup_website_database.zip Isi file bash adalah sebagai berikut


#!/bin/bash

# Direktori tempat website berada
WEB_DIR="/home"

# Direktori tujuan backup
BACKUP_DIR="/root/backup_cyberpanel"
DATE=$(date +"%Y%m%d%H%M")
LOG_FILE="$BACKUP_DIR/backup_$DATE.log"

# Folder yang harus diabaikan (tidak perlu dibackup)
EXCLUDE=("cyberpanel" "docker" "vmail")

# Buat direktori backup jika belum ada
mkdir -p "$BACKUP_DIR"

# Daftar folder website (abaikan folder sistem & EXCLUDE)
SITES=($(ls -l $WEB_DIR | awk '{print $9}' | grep -v '^$' | grep -v '^\.' | grep -vE "$(IFS=\|; echo "${EXCLUDE[*]}")"))

# Fungsi logging
log() {
    echo "[$(date +"%Y-%m-%d %T")] $1" | tee -a "$LOG_FILE"
}

log "Backup dimulai..."

for SITE in "${SITES[@]}"; do
    SITE_PATH="$WEB_DIR/$SITE"
    
    if [ -d "$SITE_PATH" ]; then
        log "Memproses website: $SITE"

        # Backup file website dalam format .zip
        FILE_BACKUP="$BACKUP_DIR/$SITE.files.$DATE.zip"
        zip -r "$FILE_BACKUP" "$SITE_PATH" >> "$LOG_FILE" 2>&1
        if [ $? -eq 0 ]; then
            log "Backup file berhasil: $FILE_BACKUP"
        else
            log "Gagal membuat backup file untuk $SITE"
        fi
    fi
done

# Backup semua database MySQL/MariaDB
log "Memulai backup semua database..."
DB_BACKUP="$BACKUP_DIR/all_databases.$DATE.sql.gz"
mysqldump --all-databases | gzip > "$DB_BACKUP" 2>> "$LOG_FILE"
if [ $? -eq 0 ]; then
    log "Backup semua database berhasil: $DB_BACKUP"
else
    log "Gagal membuat backup semua database"
fi

log "Backup selesai."