Backup & restore — jaring pengaman datamu
Backup otomatis & cara restore saat server rusak
Server bisa rusak, salah hapus, atau kena serangan kapan saja. Yang membedakan panik dari tenang adalah backup. Di panduan ini kamu akan memasang tiga lapis backup — snapshot, backup terjadwal lewat cron, dan salinan di cloud — lalu belajar cara memulihkannya. Dijelaskan dari nol.
Snapshot VPS
Salinan seluruh server. Sekali klik dari panel, pulih cepat saat parah.
Backup terjadwal
Skrip + cron menyalin file & database tiap malam, otomatis.
Salinan di cloud
Kirim backup ke luar server. Server hangus, data tetap aman.
Kenapa backup itu wajib?
Banyak orang baru sadar pentingnya backup justru di hari server mereka rusak — saat sudah terlambat. Penyebabnya beragam: salah ketik perintah rm, gagal update, hard disk rusak, atau akun VPS ter-suspend. Tanpa backup, semua tulisan dan data pelanggan bisa hilang permanen.
Kabar baiknya: backup yang baik bisa dipasang sekali, lalu berjalan otomatis selamanya. Kamu cukup memastikannya jalan, dan tahu cara memulihkannya.
Tiga lapis backup
Jangan bergantung pada satu jenis backup saja. Kombinasikan tiga lapis berikut agar aman dari berbagai jenis bencana:
Snapshot dari panel VPS
Hampir semua penyedia VPS (Hostinger, Contabo, DigitalOcean, Vultr) punya fitur Snapshot di panel mereka. Snapshot adalah foto utuh seluruh server pada satu waktu — kalau terjadi sesuatu, kamu bisa kembalikan server persis seperti saat snapshot dibuat.
- Buka panel VPS → menu "Snapshots" atau "Backups".
- Klik "Create Snapshot" sebelum melakukan perubahan besar (update, migrasi).
- Aktifkan "Automated Backups" bila tersedia (biasanya berbayar kecil, sangat layak).
Buat skrip backup
Sekarang buat skrip yang menyalin folder aplikasi (dan database bila ada) menjadi satu file .tar.gz. Buat filenya:
# DI SERVER — buat folder & file skrip backup
mkdir -p ~/backups ~/scripts
nano ~/scripts/backup.shIsi dengan skrip berikut (sesuaikan bagian Pengaturan):
1#!/usr/bin/env bash2# backup.sh — backup folder website + database (kalau ada)3set -euo pipefail4 5# === Pengaturan (sesuaikan) ===6APP_DIR="/home/deploy/myblog" # folder aplikasi kamu7BACKUP_DIR="/home/deploy/backups" # tempat menyimpan backup8KEEP_DAYS=7 # simpan backup 7 hari terakhir9STAMP=$(date +%Y%m%d-%H%M%S)10 11mkdir -p "$BACKUP_DIR"12 13# 1) Backup file aplikasi (kecualikan node_modules & .git biar ringan)14tar -czf "$BACKUP_DIR/files-$STAMP.tar.gz" \15 --exclude="node_modules" --exclude=".git" \16 -C "$APP_DIR" .17 18# 2) Backup database (hapus tanda # bila pakai PostgreSQL/MySQL)19# pg_dump myblog | gzip > "$BACKUP_DIR/db-$STAMP.sql.gz"20# mysqldump myblog | gzip > "$BACKUP_DIR/db-$STAMP.sql.gz"21 22# 3) Hapus backup yang lebih tua dari KEEP_DAYS23find "$BACKUP_DIR" -name "*.gz" -mtime +$KEEP_DAYS -delete24 25echo "Backup selesai: $STAMP"Beri izin eksekusi lalu coba jalankan sekali secara manual:
# Beri izin eksekusi & coba jalankan manual dulu
chmod +x ~/scripts/backup.sh
~/scripts/backup.sh
# Cek hasilnya
ls -lh ~/backupsdeploy@server:~$ ~/scripts/backup.shBackup selesai: 20260103-020000deploy@server:~$ ls -lh ~/backups-rw-r--r-- 1 deploy deploy 4.2M files-20260103-020000.tar.gz# file backup berhasil dibuat ✅Jadwalkan dengan cron
Cron adalah penjadwal bawaan Linux. Kita pakai untuk menjalankan skrip backup tiap malam tanpa perlu kamu sentuh. Buka editor cron:
# Buka penjadwal cron
crontab -eTambahkan baris berikut di paling bawah. Format 0 2 * * * berarti "menit 0, jam 2, setiap hari":
1# Jalankan backup tiap hari jam 02:00 dini hari20 2 * * * /home/deploy/scripts/backup.sh >> /home/deploy/backups/backup.log 2>&1crontab -l. Log hasil backup tersimpan di ~/backups/backup.log sehingga kamu bisa memastikan ia benar-benar jalan tiap malam.Kirim backup ke cloud
Backup yang hanya ada di server yang sama tidak berguna jika server itu hilang. rclone bisa menyalin backup ke Google Drive, Dropbox, atau S3 secara gratis. Pasang dan konfigurasi sekali:
# DI SERVER — pasang rclone (untuk kirim backup ke Google Drive dll)
sudo apt update && sudo apt install -y rclone
# Konfigurasi sekali (ikuti wizard, beri nama remote: "gdrive")
rclone configSetelah remote bernama gdrive jadi, tambahkan satu baris ini di akhir backup.sh agar tiap backup otomatis terunggah:
1# Tambahkan di akhir backup.sh agar otomatis terunggah:2rclone copy "$BACKUP_DIR" gdrive:vps-backups --max-age 24hvps-backups di Google Drive-mu. Pastikan filenya benar-benar muncul sebelum kamu mengandalkannya.Cara restore saat server rusak
Backup tidak ada artinya kalau kamu tidak tahu cara memulihkannya — dan jangan baru belajar saat sedang panik. Berikut langkah memulihkan di server baru: unduh file backup (dari cloud), ekstrak, pulihkan database, lalu jalankan ulang aplikasinya.
# DI SERVER BARU — pulihkan file dari backup
mkdir -p ~/myblog
tar -xzf ~/backups/files-20260103-020000.tar.gz -C ~/myblog
# Pulihkan database (kalau ada)
# gunzip < ~/backups/db-20260103-020000.sql.gz | psql myblog
# gunzip < ~/backups/db-20260103-020000.sql.gz | mysql myblog
# Lalu install ulang dependency & jalankan
cd ~/myblog && pnpm install && pnpm build && pm2 restart allMasalah umum & cara mengatasinya
Kalau backup atau restore bermasalah, cek tabel ringkas berikut:
| Gejala | Sebab | Solusi |
|---|---|---|
| Cron tidak jalan | Path skrip salah atau tidak executable. | Pakai path absolut di crontab & jalankan chmod +x pada skrip. |
| Backup membengkak besar | node_modules / .git ikut ter-backup. | Pastikan --exclude="node_modules" --exclude=".git" ada di perintah tar. |
| Disk penuh karena backup menumpuk | Backup lama tidak pernah dihapus. | Pastikan baris find ... -mtime +$KEEP_DAYS -delete aktif. |
| pg_dump / mysqldump: permission denied | User database belum punya akses, atau perlu password. | Buat user backup khusus, atau simpan kredensial di ~/.pgpass / ~/.my.cnf. |
Datamu kini aman
Dengan tiga lapis backup yang berjalan otomatis, kamu bisa tidur nyenyak. Lanjutkan dengan memasang pemantauan agar tahu lebih dulu kalau servermu bermasalah.