Informasi

Cara Backup dan Restore Website di VPS Linux

06 Jun 2026 Administrator
Header Hero

Cara Backup dan Restore Website di VPS Linux

Panduan Tatap Muka Bash Scripting: Otomatisasi Crontab, Sinkronisasi Offsite rsync/rclone, Ekstraksi Berkas, dan Pemulihan SQL Database

Bagi seorang *system administrator* maupun pengembang website, momen ketika menyadari data situs web hilang akibat kegagalan server, serangan malware, atau kecerobohan eksekusi perintah fatal seperti rm -rf di direktori yang salah adalah mimpi buruk yang nyata. Mengandalkan asumsi bahwa server VPS Anda akan selalu berjalan normal tanpa gangguan merupakan kelalaian taktis yang fatal.

Membangun sistem pencadangan (*backup*) dan pemulihan (*restore*) yang solid adalah benteng pertahanan terakhir untuk mengamankan aset digital Anda. Protokol backup yang andal tidak hanya sekadar menyalin file to folder lokal di server yang sama, melainkan harus menerapkan **Strategi 3-2-1** (3 salinan data, disimpan di 2 media berbeda, dengan 1 salinan di lokasi terpisah/*offsite*). Panduan komprehensif ini akan membedah taktik otomatisasi pemeliharaan server Linux menggunakan kombinasi Bash script, penjadwalan Crontab, rsync, hingga pemulihan database dari nol saat terjadi bencana kegagalan sistem (*disaster recovery*).

Golden Rule Jaringan: Backups di server yang sama bukanlah backup sejati. Jika perangkat keras *storage* VPS Anda rusak atau akun provider hosting Anda ditangguhkan, seluruh file backup lokal tersebut akan ikut lenyap. Otomatisasi ke penyimpanan luar (*offsite*) wajib diaktifkan.

1. Pemetaan Struktur Berkas dan Pembuatan Manifest

Sebelum menyusun skrip otomasi, Anda harus memetakan secara detail di mana saja lokasi berkas konfigurasi web server dan basis data pangkalan data Anda disimpan:

# Struktur Lokasi Kunci pada VPS Linux (Nginx Stack):
/var/www/suryassh.net/         # Direktori Utama File Website (Source Code)
/etc/nginx/sites-available/    # Berkas Konfigurasi Virtual Host Server Block
/etc/letsencrypt/              # Direktori Sertifikat Keamanan SSL Let's Encrypt
mysql -u root -p -e "SHOW DATABASES;" # Konsol Pengecekan Nama Database

2. Otomatisasi Skrip Backup Berkas Web (Bash Scripting)

Buat file skrip bash khusus untuk mengompresi file source code situs beserta konfigurasi vhost Nginx menjadi arsip tarbal gzipped (.tar.gz):

mkdir -p ~/backup-scripts && nano ~/backup-scripts/backup-files.sh

Tempel logika pemrograman penataan file backup teratur berikut ke dalam file script tersebut:

#!/bin/bash
# Skrip Kompresi Otomatis File Website & Server Config
BACKUP_DIR="/home/surya/backups/files"
WEBSITE_DIR="/var/www/suryassh.net"
DOMAIN="suryassh.net"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

echo "Memulai kompresi berkas file website..."
tar -czf $BACKUP_DIR/website-$DATE.tar.gz -C /var/www/ $DOMAIN

echo "Mengamankan berkas konfigurasi Nginx dan SSL Let's Encrypt..."
tar -czf $BACKUP_DIR/config-$DATE.tar.gz /etc/nginx/sites-available/$DOMAIN /etc/letsencrypt/live/$DOMAIN/

# Kebijakan Retensi: Hapus file kompresi lama yang usianya melewati 30 hari harian
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

echo "Proses backup file selesai untuk tanggal: $DATE"

Simpan berkas, lalu aktifkan izin eksekusi biner script di VPS Linux Anda melalui perintah terminal:

chmod +x ~/backup-scripts/backup-files.sh

3. Otomatisasi Skrip Dump Pangkalan Data (MySQL / MariaDB)

Bagi website dinamis seperti WordPress atau Laravel, data pangkalan data SQL berubah setiap waktu. Kita akan menggunakan utility mysqldump untuk mengekspor struktur tabel pangkalan data database secara aman:

nano ~/backup-scripts/backup-database.sh

Tempel baris skrip otomasi dump pangkalan data database berikut:

#!/bin/bash
# Skrip Otomatisasi Dump Database SQL
BACKUP_DIR="/home/surya/backups/database"
DB_USER="user_suryassh"
DB_PASS="PasswordKuatDatabase123!"
DB_NAME="db_suryassh"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

echo "Mengekspor struktur tabel pangkalan data database..."
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/db-$DATE.sql

# Lakukan kompresi biner gzip untuk menghemat ruang disk penyimpanan server
gzip $BACKUP_DIR/db-$DATE.sql

# Hapus backup database lokal yang berusia di atas 30 hari harian
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete

echo "Ekspor pangkalan data database sukses: db-$DATE.sql.gz"

Kunci file dengan izin eksekusi terminal:

chmod +x ~/backup-scripts/backup-database.sh
Cron Scheduling

4. Manajemen Penjadwalan Otomatis Lewat Daemon Crontab

Agar pencadangan berjalan secara konsisten tanpa perlu intervensi manual harian, kita daftarkan kedua skrip bash di atas ke dalam sistem penjadwalan internal Linux server via Crontab daemon:

# Buka editor crontab user Linux Anda
crontab -e

# Tempel baris makro jadwal eksekusi berikut di baris paling bawah berkas file:
# Trigger backup file website setiap hari jam 02:00 dini hari
0 2 * * * /home/surya/backup-scripts/backup-files.sh

# Trigger backup database SQL setiap hari jam 02:30 dini hari
30 2 * * * /home/surya/backup-scripts/backup-database.sh

5. Sinkronisasi Cadangan Data ke Cloud Storage (Offsite rclone)

Guna menerapkan prinsip ketahanan data 3-2-1, kita pasang utility **rclone** untuk melempar file hasil backup lokal yang ada di VPS menuju cloud storage terpisah (misal Google Drive, Dropbox, atau S3 bucket):

# 1. Pasang engine biner rclone ke dalam sistem VPS Ubuntu
curl -s https://rclone.org/install.sh | sudo bash

# 2. Jalankan konfigurasi interaktif untuk menautkan akun cloud storage Anda
rclone config

*Ikuti langkah interaktif di layar terminal untuk membuat remote baru (beri nama remote kustom Anda, misal: mygoogledrive).* Setelah itu, buat skrip sinkronisasi akhir:

nano ~/backup-scripts/backup-to-cloud.sh

# Isi file berkas dengan skrip sinkronisasi makro rclone:
#!/bin/bash
LOCAL_DIR="/home/surya/backups"
CLOUD_REMOTE="mygoogledrive" # Nama remote yang Anda set saat rclone config

echo "Sinkronisasi file arsip dari disk server lokal ke cloud storage..."
rclone sync $LOCAL_DIR $CLOUD_REMOTE:vps-backups/suryassh/

echo "Sinkronisasi offsite sukses dilakukan."

Aktifkan izin file dan daftarkan skrip cloud tersebut ke Crontab harian Anda pada jam 03:00 subuh agar berjalan berurutan pasca kompresi lokal selesai.

Disaster Recovery

6. Protokol Pemulihan Data Total (Disaster Recovery Scenario)

Jika server utama Anda hancur total dan Anda terpaksa menyewa VPS Linux baru yang kosong, berikut adalah urutan rangkaian eksekusi pemulihan data dari nol agar website live kembali:

Langkah A: Tarik Kembali Arsip File dari Cloud ke VPS Baru

Setelah melakukan instalasi LEMP Stack dasar di VPS baru, hubungkan kembali rclone dan tarik file arsip cadangan Anda:

# Menarik seluruh file backup dari Google Drive ke folder lokal VPS baru
rclone copy mygoogledrive:vps-backups/suryassh/ ~/backups/
Langkah B: Ekstraksi File Website dan Konfigurasi

Ekstrak berkas file source code website menuju folder kerja utama web server Linux, lalu kembalikan hak kepemilikan user:

# 1. Ekstrak data biner website ke folder temporer lalu pindahkan ke root web
tar -xzf ~/backups/files/website-20260605_xxxxxx.tar.gz -C /tmp/
sudo mkdir -p /var/www/suryassh.net
sudo cp -r /tmp/suryassh.net/* /var/www/suryassh.net/

# 2. Kembalikan standarisasi hak perizinan berkas file permissions nginx (www-data)
sudo chown -R www-data:www-data /var/www/suryassh.net/
sudo find /var/www/suryassh.net/ -type d -exec chmod 755 {} \;
sudo find /var/www/suryassh.net/ -type f -exec chmod 644 {} \;

# 3. Ekstrak dan kembalikan berkas konfigurasi Nginx vhost server block
tar -xzf ~/backups/files/config-20260605_xxxxxx.tar.gz -C /tmp/
sudo cp /tmp/etc/nginx/sites-available/suryassh.net /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/suryassh.net /etc/nginx/sites-enabled/
Langkah C: Impor Kembali Basis Data Pangkalan Data

Bangun ulang skema pangkalan data database kosong di MySQL server baru Anda, lalu tuangkan kembali string query SQL dari file kompresi backup:

# 1. Masuk ke MySQL console untuk membuat database wadah penampung baru
sudo mysql -e "CREATE DATABASE db_suryassh; CREATE USER 'user_suryassh'@'localhost' IDENTIFIED BY 'PasswordKuatDatabase123!'; GRANT ALL PRIVILEGES ON db_suryassh.* TO 'user_suryassh'@'localhost'; FLUSH PRIVILEGES;"

# 2. Unzip file backup database dan tembak masuk isi kueri ke database baru
gunzip -c ~/backups/database/db-20260605_xxxxxx.sql.gz | mysql -u user_suryassh -p'PasswordKuatDatabase123!' db_suryassh

# 3. Test konfigurasi sintaks web server lalu muat ulang layanan daemon
sudo nginx -t && sudo systemctl restart nginx mysql
Kesalahan Fatal Sektor Backup yang Wajib Anda Hindari

Kepatuhan pada pengamanan data server Linux akan menjamin keselamatan kelangsungan aset digital Anda jangka panjang. Hindari kekhilafan taktis berikut:

  • Tidak Pernah Melakukan Simulasi Uji Pemulihan (*Untested Backups*): File backup yang tidak pernah diuji coba diekstraksi nilainya sama dengan nol. Lakukan simulasi proses *restore* data minimal sebulan sekali pada server lokal (*localhost*) atau VPS cadangan kecil untuk memastikan berkas SQL tidak korup saat dibutuhkan.
  • Menyimpan Tumpukan Backup di Folder Publik Web Server: Ini adalah celah fatal manajemen sekuritas! Jangan menaruh arsip berkas tarbal `.tar.gz` atau file SQL dump di dalam folder direktori publik seperti /var/www/html/backup.sql. Folder publik dapat di-scan dan diunduh langsung lewat browser oleh pihak luar yang tidak bertanggung jawab.
  • Mengabaikan Log File Pemicu Kerusakan (*Error Monitoring*): Kadang skrip backup terhenti di tengah jalan karena disk server penuh (*out of storage*) atau password database diganti namun parameter skrip lupa diperbarui. Sempurnakan Bash skrip Anda dengan menyisipkan baris notifikasi email atau bot telegram log pemicu kegagalan.
v