DevOps

Backup VPS Otomatis dengan Restic — AES-256, Dedup, dan Retention 3-2-1 untuk Server Produksi

Backup VPS Otomatis dengan Restic — AES-256, Dedup, dan Retention 3-2-1 untuk Server Produksi

VPS tanpa backup bukan server produksi — itu bom waktu. Satu kesalahan ketik rm -rf, satu ransomware yang lolos dari firewall, atau satu disk yang mati tanpa aba-aba, dan seluruh data lenyap permanen. Ironisnya, banyak pemilik VPS yang mengaku "sudah backup" padahal cuma menyalin file ke folder lain di server yang sama — bukan backup, cuma ilusi keamanan.

Artikel ini membahas restic, tool backup open-source yang dirancang untuk server modern: enkripsi AES-256, deduplikasi berbasis isi (content-defined dedup), dan snapshot yang bisa di-restore kapan saja. Fakta di bawah diverifikasi dari dokumentasi resmi restic.net dan halaman GitHub proyek pada Agustus 2026.

Kenapa restic, bukan rsync atau tar?

rsync dan tar bukan tool yang buruk, tapi keduanya punya kelemahan struktural: rsync tidak punya versi snapshot, tar menyimpan duplikat penuh setiap kali dijalankan. Restic menyelesaikan keduanya dengan satu mekanisme: content-defined deduplication.

Alih-alih memecah file berdasarkan offset tetap, restic memecah data menjadi chunk berdasarkan isi (rolling hash). Akibatnya, file yang hanya berubah sedikit hanya menghasilkan beberapa chunk baru yang di-upload — sisanya di-skip. Untuk server yang datanya jarang berubah (config, database kecil, file statis), ukuran backup harian bisa jauh lebih kecil daripada data aslinya.

Setiap backup menghasilkan snapshot yang immutable. Restore bisa dilakukan per file, per folder, atau seluruh snapshot — ke mesin yang sama atau mesin baru.

Fitur utama restic 0.19

Rilis terbaru saat artikel ini ditulis adalah restic 0.19.1 (0.19.0 dirilis 9 Juni 2026, diumumkan di blog resmi restic.net). Proyek ini di-host di GitHub dengan lebih dari 35.100 bintang dan 1.800+ fork — sinyal bahwa kodenya di-review komunitas luas.

  • Enkripsi AES-256 — semua data terenkripsi sebelum meninggalkan mesin; tanpa password repo, data tidak bisa dibaca siapa pun, termasuk penyedia storage.
  • Content-defined dedup — hanya chunk baru yang di-upload, hemat bandwidth dan biaya storage.
  • Snapshot & restore fleksibel — restore file tunggal, direktori, atau snapshot penuh.
  • Backend luas — lokal, SFTP, dan S3-compatible (Backblaze B2, Cloudflare R2, Wasabi, AWS S3, MinIO).
  • Cross-platform — Linux, macOS, Windows, FreeBSD.

Instalasi restic

Di Ubuntu 24.04 (distro yang umum dipakai untuk VPS), restic tersedia di repositori resmi:

sudo apt update
sudo apt install restic
restic version

Alternatifnya, download binary langsung dari halaman GitHub Releases — cocok kalau versi di repositori distro tertinggal.

Inisialisasi repository

Restic menyimpan snapshot di sebuah repository. Buat repository di penyimpanan lokal dulu untuk memastikan konfigurasi dasar jalan:

export RESTIC_REPOSITORY=/mnt/backup/restic
export RESTIC_PASSWORD='ganti-dengan-password-kuat'
restic init

Untuk server produksi, repository sebaiknya berada di storage yang terpisah dari server — aturan 3-2-1 (tiga salinan data, dua media berbeda, satu di luar lokasi). Contoh endpoint S3-compatible yang umum dipakai:

  • Backblaze B2 — $0.006/GB/bulan ($6/TB), salah satu termurah untuk backup cold.
  • Cloudflare R2 — tanpa biaya egress, cocok kalau traffic restore sering.
  • Wasabi — flat pricing tanpa biaya API.
  • MinIO / S3 sendiri — kalau backup antar-VPS di jaringan internal.
export RESTIC_REPOSITORY=s3:s3.us-west-004.backblazeb2.com/nama-bucket
export RESTIC_PASSWORD='ganti-dengan-password-kuat'
export AWS_ACCESS_KEY_ID='kunci-aplikasi-b2'
export AWS_SECRET_ACCESS_KEY='rahasia-aplikasi-b2'
restic init

Script backup + systemd timer

Backup harus berjalan otomatis. Pola yang direkomendasikan: script shell sederhana + systemd timer — bukan cron, karena systemd menangani logging, dependency, dan random delay dengan lebih rapi.

Buat script /usr/local/bin/backup-restic.sh:

#!/bin/bash
set -euo pipefail

export RESTIC_REPOSITORY='s3:s3.us-west-004.backblazeb2.com/nama-bucket'
export RESTIC_PASSWORD='ganti-dengan-password-kuat'
export AWS_ACCESS_KEY_ID='kunci-aplikasi-b2'
export AWS_SECRET_ACCESS_KEY='rahasia-aplikasi-b2'

# Daftar direktori yang wajib di-backup
restic backup /etc /var/www /var/lib/docker/volumes

# Bersihkan snapshot lama sesuai retention
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

# Ping healthcheck (opsional)
curl -fsS -m 10 "https://hc-ping.com/ID-PING-KAMU" >/dev/null 2>&1 || true

Beri izin eksekusi, lalu buat unit service dan timer:

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

sudo tee /etc/systemd/system/restic-backup.service >/dev/null <<'EOF'
[Unit]
Description=Backup dengan restic
After=network-online.target

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

sudo tee /etc/systemd/system/restic-backup.timer >/dev/null <<'EOF'
[Unit]
Description=Jalankan backup restic tiap malam

[Timer]
OnCalendar=*-*-* 03:00
RandomizedDelaySec=900

[Install]
WantedBy=timers.target
EOF

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

RandomizedDelaySec=900 mengacak waktu eksekusi dalam 15 menit — menghindari semua VPS melakukan backup bersamaan di jam yang sama (masalah umum di jam 03:00).

Alternatif: resticprofile

Kalau mengelola banyak server atau banyak profil backup, resticprofile mempermudah konfigurasi: semua profil didefinisikan dalam satu file YAML, dan resticprofile bisa men-generate file systemd service + timer secara otomatis. Ini mengurangi kesalahan copy-paste script antar-server.

Retention: jangan menimbun snapshot selamanya

Snapshot yang menumpuk tanpa batas akan membengkakkan biaya storage. Policy yang umum dipakai: simpan harian seminggu, mingguan sebulan, bulanan enam bulan.

restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

Perintah forget menghapus snapshot lama sesuai policy; --prune membersihkan data yang tidak lagi direferensikan snapshot mana pun. Jalankan prune berkala (misalnya mingguan) karena operasi ini berat secara I/O.

Uji restore — bagian yang paling sering dilewati

Backup yang tidak pernah diuji restore-nya bukan backup, cuma asumsi. Minimal setahun sekali, atau sebelum migrasi besar, jalankan restore ke direktori sementara:

restic snapshots
restic restore latest --target /tmp/restore-test
# bandingkan isi /tmp/restore-test dengan sumber asli

Kalau restore gagal di sini, lebih baik ketahuan sekarang daripada saat server benar-benar mati.

Integrasi dengan monitoring

Backup yang gagal diam-diam sama bahayanya dengan tidak backup. Healthchecks.io (contoh di script di atas) mengirim ping setelah backup sukses — kalau ping tidak datang, monitoring akan memberi tahu. Pola ini juga cocok dipadukan dengan monitoring server self-hosted gratis yang sudah dibahas di artikel terpisah.

Ekspektasi vs Realita

EkspektasiRealita
Backup cukup pakai rsync ke folder lainFolder lain di server yang sama ikut hilang kalau disk mati — backup wajib ke media/storage terpisah
Backup harian penuh = mahalDedup restic membuat backup harian hanya mengirim delta — biaya jauh lebih kecil dari perkiraan
Enkripsi bikin restore ribetEnkripsi hanya butuh password repo; restore tetap satu perintah
Cukup sekali setup, lupa urusanRetention dan uji restore wajib dijadwalkan — snapshot menumpuk dan backup yang tak pernah diuji bisa gagal di saat kritis

Sumber & Validasi

Fakta dalam artikel ini diverifikasi dari sumber resmi pada 3 Agustus 2026:

Angka bintang GitHub (35.100+) dan harga B2 ($0.006/GB/bulan) bisa berubah — cek halaman sumber untuk data terbaru.

Penutup

Backup bukan fitur — ini bagian dari operasional server yang wajib. Dengan restic, enkripsi AES-256, dedup, dan retention policy yang jelas bisa didapat tanpa biaya lisensi, dan berjalan otomatis lewat systemd timer. Mulai dari hal kecil: backup /etc dan folder data utama, jadwalkan tiap malam, lalu uji restore-nya. Server yang backup-nya beres adalah server yang bisa tidur nyenyak.

Belum punya VPS? Baca perbandingan RackNerd vs IDCloudHost untuk VPS murah — atau langsung cek penawaran RackNerd lewat link ini. Untuk persiapan server dari awal, lihat juga panduan memilih VPS murah untuk developer, hardening SSH server Ubuntu, konfigurasi firewall UFW + Fail2ban, dan deploy static site dengan Nginx HTTP/3.

Langkah selanjutnya: setelah backup otomatis berjalan, amankan akses servermu dengan hardening SSH server Ubuntu, pastikan aplikasi production-mu ter-deploy rapi lewat tutorial lengkap deploy aplikasi web dengan Docker, Nginx, dan Let's Encrypt, dan kalau belum punya server mulai dari VPS murah untuk developer Indonesia.

💬 Komentar (0)

Belum ada komentar. Jadilah yang pertama! 💬

Komentar akan muncul setelah moderasi.