HostIDMurah
Kembali ke Blog
Tutorial

Cara Backup VPS Otomatis dengan Rsync dan Cron Job

Tim HostIDMurah5 Maret 202610 menit baca

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:

  • Hanya mentransfer bagian file yang berubah (incremental), bukan file penuh
  • Mendukung kompresi data saat transfer
  • Bisa berjalan melalui SSH untuk keamanan
  • Tersedia di semua distribusi Linux secara default
  • Skenario Backup yang Akan Kita Setup

    Kita akan membuat script backup yang:

  • Backup harian: 7 hari terakhir (rolling)
  • Backup mingguan: 4 minggu terakhir
  • Backup bulanan: 3 bulan terakhir
  • Transfer ke storage server terpisah via SSH
  • Prasyarat

  • VPS sumber (yang datanya ingin dibackup)
  • Server atau storage tujuan backup (bisa VPS kedua, NAS, atau storage cloud yang mount via SFTP)
  • Akses SSH tanpa password (key-based authentication) antara dua server
  • 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_TUJUAN

    Test koneksi tanpa password:

    ssh backup-user@IP_SERVER_TUJUAN "echo koneksi berhasil"

    Langkah 2 — Buat Script Backup

    sudo nano /usr/local/bin/backup-vps.sh

    Isi 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/null

    Berikan izin eksekusi:

    sudo chmod +x /usr/local/bin/backup-vps.sh

    Langkah 3 — Jadwalkan dengan Cron Job

    sudo crontab -e

    Tambahkan baris berikut:

    # Backup setiap hari pukul 02:00 dini hari
    0 2 * * * /usr/local/bin/backup-vps.sh

    Langkah 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.log

    Verifikasi file backup tersimpan di server tujuan:

    ssh backup-user@IP_SERVER_TUJUAN "ls -la /backup/vps-saya/daily/"

    Tips Penting

  • Uji restore secara berkala — backup yang tidak pernah diuji adalah backup yang tidak bisa diandalkan
  • Monitor log backup — cek /var/log/backup-vps.log secara rutin atau setup notifikasi email jika backup gagal
  • Enkripsi backup sensitif — gunakan gpg untuk mengenkripsi backup yang berisi data sensitif sebelum ditransfer
  • Backup database secara terpisah — untuk MySQL/PostgreSQL, gunakan mysqldump atau pg_dump terlebih dahulu, baru rsync file dump-nya
  • Siap memulai dengan VPS?

    Dapatkan VPS berkualitas mulai Rp 49.000/bulan dengan uptime 99.9%.