Backup VPS Otomatis dan Terenkripsi ke Google Drive

Kenapa cara ini

Backup yang tidak terenkripsi itu titipan data mentah ke pihak ketiga. Kalau akun Google Drive bocor, siapa pun bisa membaca dump database dan file konfigurasi server. Di sisi lain, backup yang tidak pernah diuji restorenya sama saja dengan tidak punya backup — banyak orang baru tahu arsipnya korup pada hari servernya mati.

Pola yang saya pakai: rclone mengunggah ke Google Drive lewat remote crypt, jadi file yang sampai di Drive sudah terenkripsi. Penjadwalan memakai systemd timer, bukan cron, karena timer punya log yang bisa dibaca dengan journalctl dan bisa diuji manual tanpa menunggu jadwal. Terakhir, setiap backup diuji restore ke direktori sementara — bukan ke lokasi asli.

Yang dibutuhkan

  • VPS Ubuntu 24.04 dengan akses root atau sudo.
  • Akun Google dengan ruang Drive yang cukup.
  • Dua hal yang wajib disimpan di luar server: password enkripsi rclone dan konfigurasi rclone. Kalau server hilang dan dua hal ini ikut hilang, backup terenkripsi tidak bisa dibuka lagi.

1. Instalasi rclone

Pasang dari repositori Ubuntu:

sudo apt update
sudo apt install rclone
rclone version

2. Hubungkan Google Drive

Jalankan konfigurasi interaktif:

rclone config

Pilih n (new remote), beri nama gdrive, pilih tipe drive. Saat diminta scope, pilih drive.file supaya rclone hanya bisa mengakses file yang ia buat sendiri, bukan seluruh Drive. Untuk otentikasi, rclone akan menampilkan tautan — buka di browser, izinkan, lalu tempelkan kode verifikasinya. Pada VPS tanpa browser, cara ini tetap bekerja karena kodenya ditempel manual.

Uji koneksinya:

rclone lsd gdrive:

Kalau muncul daftar folder, koneksi sudah jalan.

3. Tambahkan lapisan enkripsi

Jangan mengunggah langsung ke gdrive:. Buat remote crypt yang membungkusnya:

rclone config

Pilih n, beri nama gdrive-crypt, pilih tipe crypt. Saat ditanya remote target, isi gdrive:backup-vps. Buat password enkripsi yang panjang dan simpan di password manager — bukan di catatan server. Opsi password2 (salt) boleh dikosongkan; rclone akan memakai salt acak yang tersimpan di konfigurasi.

Perlu dipahami: enkripsi ini hanya berlaku untuk file yang lewat remote gdrive-crypt. File yang diunggah langsung ke gdrive: tidak terenkripsi. Jadi mulai sekarang, semua perintah backup dan restore memakai gdrive-crypt:.

Uji dengan satu file kecil:

echo "tes" > /tmp/tes.txt
rclone copy /tmp/tes.txt gdrive-crypt:
rclone ls gdrive-crypt:
rclone ls gdrive:backup-vps

Perintah ls yang pertama menampilkan nama asli, sedangkan ls yang kedua menampilkan nama file terenkripsi. Kalau hasilnya begitu, enkripsi bekerja.

4. Skrip backup

Buat skrip di /usr/local/bin/backup-vps.sh:

#!/bin/bash
set -euo pipefail

TANGGAL=$(date +%Y-%m-%d)
SUMBER="/etc /var/www /opt"
DUMP_DIR="/var/backups/vps"

mkdir -p "$DUMP_DIR"

# Dump database dulu (sesuaikan nama databasenya)
# mysqldump -u root -p'PASSWORD' nama_db > "$DUMP_DIR/db.sql"
# pg_dump -U postgres nama_db > "$DUMP_DIR/db.sql"

# Arsipkan, lalu unggah yang terenkripsi
tar -czf "$DUMP_DIR/backup-$TANGGAL.tar.gz" $SUMBER "$DUMP_DIR/db.sql" 2>/dev/null || \
  tar -czf "$DUMP_DIR/backup-$TANGGAL.tar.gz" $SUMBER

rclone copy "$DUMP_DIR/backup-$TANGGAL.tar.gz" gdrive-crypt: --progress

# Simpan 14 hari terakhir saja
rclone delete --min-age 14d gdrive-crypt:

# Bersihkan dump lokal yang lebih dari 3 hari
find "$DUMP_DIR" -name 'backup-*.tar.gz' -mtime +3 -delete

Dua baris mysqldump dan pg_dump sengaja saya komentari: sesuaikan dengan database yang benar-benar ada, jangan menjalankan perintah dump untuk database yang tidak dipakai. Perintah tar memakai fallback supaya skrip tetap jalan walau tidak ada dump database.

Jadikan skrip bisa dieksekusi:

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

Jalankan sekali secara manual dan periksa hasilnya sebelum dijadwalkan. Backup yang pertama kali dijadwalkan tanpa pernah dicoba manual adalah undangan masalah.

5. Jadwalkan dengan systemd timer

Buat service di /etc/systemd/system/backup-vps.service:

[Unit]
Description=Backup VPS ke Google Drive
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup-vps.sh

Buat timer di /etc/systemd/system/backup-vps.timer:

[Unit]
Description=Backup VPS harian

[Timer]
OnCalendar=daily
Persistent=true
RandomizedDelaySec=15min

[Install]
WantedBy=timers.target

Persistent=true membuat jadwal yang terlewat saat server mati tetap dijalankan begitu server hidup lagi. RandomizedDelaySec mengacak waktu dalam 15 menit supaya tidak bentrok dengan tugas lain tepat tengah malam.

Aktifkan:

sudo systemctl daemon-reload
sudo systemctl enable --now backup-vps.timer
sudo systemctl list-timers backup-vps.timer

list-timers menampilkan jadwal berikutnya — itu bukti timer aktif, bukan sekadar file yang tersimpan.

6. Uji restore (langkah yang paling sering dilewati)

Restore ke direktori sementara, jangan pernah menimpa data produksi saat pengujian:

mkdir -p /tmp/restore-test
rclone copy gdrive-crypt:backup-2026-10-25.tar.gz /tmp/restore-test/
tar -tzf /tmp/restore-test/backup-2026-10-25.tar.gz | head -20

Kalau daftar isi tampil tanpa error, arsip tidak korup. Untuk verifikasi yang lebih kuat, bandingkan isi Drive dengan sumbernya:

rclone cryptcheck /var/backups/vps gdrive-crypt: --include 'backup-*.tar.gz'

rclone cryptcheck membandingkan file lokal terhadap remote crypt dengan memperhitungkan enkripsi — remote crypt tidak mengekspos hash file asli, jadi rclone check biasa hanya membandingkan ukuran. Lihat daftar backup terbaru dengan rclone ls gdrive-crypt:.

Restore sesungguhnya saat darurat mengikuti pola yang sama: unduh arsip dari gdrive-crypt:, ekstrak ke lokasi sementara, periksa isinya, baru pindahkan ke lokasi asli. Database dipulihkan dari file dump yang ada di dalam arsip, setelah arsip diekstrak.

7. Kalau server hilang total

Urutannya: pasang VPS baru, instal rclone, salin file konfigurasi rclone dari cadangan di luar server, lalu unduh dan ekstrak backup terbaru. Tanpa file konfigurasi rclone dan password enkripsi, backup tidak bisa dibuka — jadi dua hal itu wajib tersimpan di tempat yang terpisah dari server, misalnya password manager dan satu salinan offline.

Checklist penutup

  • rclone lsd gdrive: menampilkan folder Drive.
  • rclone ls gdrive:backup-vps menampilkan nama file terenkripsi, bukan nama asli.
  • Skrip backup pernah dijalankan manual sampai selesai.
  • Timer aktif dan list-timers menampilkan jadwal berikutnya.
  • Restore ke /tmp/restore-test pernah dicoba dan arsip bisa dibuka.
  • Password enkripsi dan konfigurasi rclone tersimpan di luar server.

Baca juga: Systemd Timer vs Cron.

Komentar