Mengapa Backup Itu Krusial
Hardware bisa rusak tiba-tiba, manusia bisa salah hapus file, ransomware bisa mengenkripsi data Anda. Tidak ada sistem yang 100% kebal dari kegagalan. Backup yang rutin dan teruji adalah satu-satunya jaring pengaman yang benar-benar bisa diandalkan.
Aturan umum yang diikuti profesional IT: aturan 3-2-1 — 3 salinan data, di 2 media berbeda, dengan 1 salinan di lokasi terpisah (offsite).
Apa Itu Rsync?
Rsync adalah tool sinkronisasi file yang sangat efisien. Keunggulannya dibanding metode backup biasa:
Skenario Backup yang Akan Kita Setup
Kita akan membuat script backup yang:
Prasyarat
Langkah 1 — Setup SSH Key Authentication
Di VPS sumber, buat SSH key jika belum ada:
ssh-keygen -t ed25519 -C "backup-key"Copy public key ke server tujuan backup:
ssh-copy-id backup-user@IP_SERVER_TUJUANTest koneksi tanpa password:
ssh backup-user@IP_SERVER_TUJUAN "echo koneksi berhasil"Langkah 2 — Buat Script Backup
sudo nano /usr/local/bin/backup-vps.shIsi script:
#!/bin/bash
# Konfigurasi
BACKUP_USER="backup-user"
BACKUP_HOST="IP_SERVER_TUJUAN"
BACKUP_BASE="/backup/vps-saya"
SOURCE_DIRS="/var/www /etc /home"
DATE=$(date +%Y-%m-%d)
DAY_OF_WEEK=$(date +%u)
DAY_OF_MONTH=$(date +%d)
LOG="/var/log/backup-vps.log"
echo "[$DATE $(date +%H:%M)] Memulai backup..." >> $LOG
# Tentukan tujuan backup
if [ "$DAY_OF_MONTH" = "01" ]; then
DEST="$BACKUP_BASE/monthly/$DATE"
elif [ "$DAY_OF_WEEK" = "7" ]; then
DEST="$BACKUP_BASE/weekly/$DATE"
else
DEST="$BACKUP_BASE/daily/$DATE"
fi
# Jalankan rsync
rsync -avz --delete --exclude="*.tmp" --exclude="*.log" --exclude="node_modules/" --exclude=".git/" -e "ssh -i /root/.ssh/id_ed25519" $SOURCE_DIRS $BACKUP_USER@$BACKUP_HOST:$DEST >> $LOG 2>&1
if [ $? -eq 0 ]; then
echo "[$DATE $(date +%H:%M)] Backup selesai: $DEST" >> $LOG
else
echo "[$DATE $(date +%H:%M)] BACKUP GAGAL!" >> $LOG
fi
# Hapus backup daily lebih dari 7 hari
ssh -i /root/.ssh/id_ed25519 $BACKUP_USER@$BACKUP_HOST "find $BACKUP_BASE/daily -maxdepth 1 -type d -mtime +7 -exec rm -rf {} ;" 2>/dev/null
# Hapus backup weekly lebih dari 28 hari
ssh -i /root/.ssh/id_ed25519 $BACKUP_USER@$BACKUP_HOST "find $BACKUP_BASE/weekly -maxdepth 1 -type d -mtime +28 -exec rm -rf {} ;" 2>/dev/null
# Hapus backup monthly lebih dari 90 hari
ssh -i /root/.ssh/id_ed25519 $BACKUP_USER@$BACKUP_HOST "find $BACKUP_BASE/monthly -maxdepth 1 -type d -mtime +90 -exec rm -rf {} ;" 2>/dev/nullBerikan izin eksekusi:
sudo chmod +x /usr/local/bin/backup-vps.shLangkah 3 — Jadwalkan dengan Cron Job
sudo crontab -eTambahkan baris berikut:
# Backup setiap hari pukul 02:00 dini hari
0 2 * * * /usr/local/bin/backup-vps.shLangkah 4 — Test dan Verifikasi
Jalankan script secara manual untuk memastikan berjalan dengan benar:
sudo /usr/local/bin/backup-vps.sh
cat /var/log/backup-vps.logVerifikasi file backup tersimpan di server tujuan:
ssh backup-user@IP_SERVER_TUJUAN "ls -la /backup/vps-saya/daily/"