Membuat Backup File Website Otomatis Menggunakan Rsync dan Cron dengan Autentikasi SSH Key Tanpa Password

Membuat Backup File Website Otomatis Menggunakan Rsync dan Cron dengan Autentikasi SSH Key Tanpa Password

Pendahuluan

Backup merupakan salah satu hal penting dalam pengelolaan website, terutama jika website sudah digunakan untuk kebutuhan produksi. File website dapat terhapus secara tidak sengaja, mengalami kerusakan, terkena malware, atau hilang ketika terjadi masalah pada server.

Salah satu cara sederhana untuk membuat backup file website secara otomatis di Linux adalah menggunakan Rsync dan Cron. Rsync digunakan untuk menyalin dan menyinkronkan file dari server website ke server backup, sedangkan Cron digunakan untuk menjalankan proses backup secara otomatis sesuai jadwal.

Agar proses tersebut dapat berjalan tanpa harus memasukkan password SSH setiap kali backup dijalankan, kita dapat menggunakan SSH Key. Dengan SSH Key, server website dapat terhubung ke server backup secara otomatis sehingga cocok digunakan bersama Cron.

Prasyarat

  • 2 server Linux, yaitu Server Website dan Server Backup.
  • Akses SSH ke kedua server.
  • Rsync terpasang pada kedua server.
  • IP address Server Website dan Server Backup.
  • Akses sudo atau root.
  • Direktori website yang akan dibackup.
  • Direktori penyimpanan backup pada Server Backup.

Install Rsync dan Menyiapkan Server Backup

  1. Install dan Menyiapkan Rsync

    • Pastikan Rsync tersedia di kedua server.

      Untuk Ubuntu atau Debian:

      sudo apt update
      sudo apt install rsync -y
    • Untuk AlmaLinux, Rocky Linux, atau RHEL:

      sudo dnf install rsync -y
    • Pastikan Rsync sudah terpasang:

      rsync --version
    • Pada Server Backup, buat user khusus untuk proses backup:

      sudo useradd -m -s /bin/bash backup

      Sebaiknya proses backup tidak menggunakan user root secara langsung.

    • Buat direktori untuk menyimpan file backup:

      sudo mkdir -p /backup/website
    • Ubah kepemilikan direktori menjadi user backup:

      sudo chown -R backup:backup /backup/website
    • Periksa hasilnya:

      ls -ld /backup/website

      Contoh hasil:

      drwxr-xr-x 2 backup backup 4096 Sep  8 10:00 /backup/website
    Catatan:
    Dengan konfigurasi tersebut, user backup memiliki akses untuk menyimpan file ke direktori tujuan backup.

Membuat SSH Key Tanpa Password

  1. Membuat SSH Key pada Server Website

    • Buat SSH Key pada Server Website:

      ssh-keygen -t ed25519
    • Ketika muncul:

      Enter file in which to save the key:

      Tekan Enter untuk menggunakan lokasi default.

    • Saat diminta memasukkan passphrase:

      Enter passphrase:

      Tekan Enter dua kali untuk mengosongkan passphrase.

    • Setelah selesai, biasanya akan terbentuk dua file:

      ~/.ssh/id_ed25519
      ~/.ssh/id_ed25519.pub

      File id_ed25519 merupakan private key, sedangkan id_ed25519.pub merupakan public key.

    • Salin public key ke Server Backup:

      ssh-copy-id backup@192.168.1.20

      Masukkan password user backup ketika diminta.

    • Uji koneksi SSH:

      ssh backup@192.168.1.20

      Jika berhasil masuk tanpa meminta password, autentikasi SSH Key sudah berjalan.

    • Uji koneksi sekaligus menjalankan perintah pada Server Backup:

      ssh backup@192.168.1.20 "hostname"

      Jika hostname Server Backup muncul tanpa meminta password, SSH Key siap digunakan oleh Rsync.

    Peringatan:
    Private key harus dijaga kerahasiaannya dan tidak boleh diberikan kepada orang lain. Hanya public key yang perlu disalin ke Server Backup.

Menguji Rsync Secara Manual

  1. Menguji Rsync Secara Manual
    Sebelum membuat Cron, sebaiknya Rsync diuji secara manual terlebih dahulu.

    • Misalnya file website berada di:

      /var/www/html/
    • Jalankan Rsync:

      rsync -avz /var/www/html/ backup@192.168.1.20:/backup/website/
    • Beberapa opsi yang digunakan:

      • -a untuk menjalankan mode archive sehingga struktur dan atribut file tertentu dipertahankan.
      • -v untuk menampilkan proses sinkronisasi.
      • -z untuk melakukan kompresi selama transfer.
    • Perhatikan tanda / pada akhir direktori sumber:

      /var/www/html/

      Artinya, yang dikirim adalah isi dari direktori html.

    • Setelah proses selesai, masuk ke Server Backup dan periksa:

      ls -lah /backup/website/

      Jika file website sudah muncul, berarti Rsync berhasil.

    • Lakukan pengujian kedua sebelum melanjutkan ke Cron. Ubah atau tambahkan satu file pada Server Website, kemudian jalankan kembali:

      rsync -avz /var/www/html/ backup@192.168.1.20:/backup/website/
    • Rsync akan memeriksa file yang sudah ada dan hanya melakukan sinkronisasi terhadap perubahan yang diperlukan. Hal ini membuat Rsync cocok digunakan untuk proses backup dan sinkronisasi server.

Membuat Script Backup Otomatis

  1. Membuat Script Backup
    Agar konfigurasi lebih rapi, perintah Rsync dapat disimpan ke dalam sebuah script.

    • Buat file script:

      sudo nano /usr/local/bin/backup-website.sh
    • Isi dengan konfigurasi berikut:

      #!/bin/bash
      
      SOURCE="/var/www/html/"
      DESTINATION="backup@192.168.1.20:/backup/website/"
      LOG="/var/log/backup-website.log"
      
      echo "===== Backup dimulai: $(date) =====" >> "$LOG"
      
      rsync -avz "$SOURCE" "$DESTINATION" >> "$LOG" 2>&1
      
      if [ $? -eq 0 ]; then
          echo "Backup berhasil: $(date)" >> "$LOG"
      else
          echo "Backup gagal: $(date)" >> "$LOG"
      fi
      
      echo "===== Backup selesai: $(date) =====" >> "$LOG"
    • Berikan permission executable:

      sudo chmod +x /usr/local/bin/backup-website.sh
    • Jalankan script secara manual:

      sudo /usr/local/bin/backup-website.sh
    • Periksa log backup:

      cat /var/log/backup-website.log
    • Jika backup berhasil, file pada Server Backup akan tersinkronisasi sesuai kondisi terbaru pada Server Website.

    Catatan:
    Script menyimpan hasil proses Rsync ke dalam file log sehingga proses backup dapat diperiksa kembali jika terjadi masalah.

Menjadwalkan Backup dengan Cron

  1. Membuat Jadwal Backup dengan Cron
    Setelah script berhasil dijalankan secara manual, kita dapat membuat jadwal backup menggunakan Cron.

    • Buka Crontab:

      sudo crontab -e
    • Misalnya backup ingin dijalankan setiap hari pada pukul 02.00:

      0 2 * * * /usr/local/bin/backup-website.sh

      Konfigurasi tersebut berarti script akan dijalankan setiap hari pada pukul 02.00.

    • Periksa konfigurasi Cron:

      sudo crontab -l
    • Periksa apakah Cron benar-benar menjalankan script.

      Pada Ubuntu atau Debian:

      grep CRON /var/log/syslog

      Pada AlmaLinux, Rocky Linux, atau RHEL:

      journalctl -u crond
    • Periksa log backup:

      cat /var/log/backup-website.log
    • Jika terdapat pesan:

      Backup berhasil

      berarti proses backup berjalan sesuai jadwal.

    Catatan:
    Dengan Cron, administrator tidak perlu menjalankan perintah Rsync secara manual setiap hari. Namun, pastikan jadwal Cron dan log backup diperiksa secara berkala untuk memastikan proses backup tetap berjalan.

Membuat Backup Berdasarkan Tanggal

  1. Menyimpan Beberapa Versi Backup
    Konfigurasi sebelumnya menggunakan satu direktori /backup/website/. Artinya, setiap proses backup akan menyinkronkan isi website ke lokasi yang sama.

    • Jika ingin menyimpan beberapa versi backup, gunakan tanggal sebagai nama direktori.

    • Ubah script menjadi:

      #!/bin/bash
      
      SOURCE="/var/www/html/"
      BACKUP_DATE=$(date +"%Y-%m-%d")
      DESTINATION="backup@192.168.1.20:/backup/website/$BACKUP_DATE/"
      LOG="/var/log/backup-website.log"
      
      echo "===== Backup $BACKUP_DATE dimulai: $(date) =====" >> "$LOG"
      
      rsync -avz "$SOURCE" "$DESTINATION" >> "$LOG" 2>&1
      
      if [ $? -eq 0 ]; then
          echo "Backup berhasil: $(date)" >> "$LOG"
      else
          echo "Backup gagal: $(date)" >> "$LOG"
      fi
      
      echo "===== Backup selesai: $(date) =====" >> "$LOG"
    • Dengan konfigurasi tersebut, hasil backup akan memiliki struktur:

      /backup/website/
      ├── 2026-09-06/
      ├── 2026-09-07/
      └── 2026-09-08/
    • Cara ini memungkinkan beberapa versi file website tetap tersedia. Misalnya file index.php mengalami kerusakan pada 8 September, file dari backup 7 September masih dapat digunakan untuk proses pemulihan.

    Catatan:
    Pastikan kapasitas penyimpanan Server Backup mencukupi jika menyimpan backup dalam beberapa versi.

Menghapus Backup Lama

  1. Menerapkan Retensi Backup
    Jika backup dibuat berdasarkan tanggal, jumlah direktori akan terus bertambah. Oleh karena itu, sebaiknya diterapkan kebijakan retensi untuk menghapus backup lama secara otomatis.

    • Misalnya hanya ingin menyimpan backup selama 7 hari. Pada Server Backup, gunakan:

      find /backup/website/ -mindepth 1 -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;

      Perintah tersebut akan mencari direktori backup yang sudah lebih dari 7 hari.

    • Pembersihan backup juga dapat dijalankan menggunakan Cron:

      sudo crontab -e
    • Tambahkan konfigurasi berikut:

      0 3 * * * find /backup/website/ -mindepth 1 -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;

      Dengan konfigurasi tersebut, backup lama akan dibersihkan setiap hari pada pukul 03.00.

    Peringatan:
    Sebelum menggunakan perintah penghapusan secara otomatis pada server produksi, lakukan pengujian terlebih dahulu. Pastikan direktori yang ditentukan sudah benar agar tidak menghapus data yang masih diperlukan.

Kesimpulan

Membuat backup file website secara otomatis menggunakan Rsync dan Cron dapat menjadi solusi sederhana untuk mengurangi risiko kehilangan data pada server Linux.

Rsync bertugas melakukan sinkronisasi file dari Server Website ke Server Backup, sedangkan Cron menjalankan proses tersebut secara otomatis sesuai jadwal. Dengan autentikasi SSH Key, proses transfer dapat dilakukan tanpa memasukkan password secara manual sehingga cocok digunakan untuk backup otomatis.


Artikel Lain

WhatsApp Kami

Support : +6282138153600

Finance : +6285191239466