Cadangan yang dapat dipulihkan adalah pembeda antara sore yang menjengkelkan dan kehilangan sebuah proyek. Panduan cadangan VPS dasar membahas idenya. Panduan ini melangkah lebih jauh dengan restic dan BorgBackup: dua alat yang membuat cadangan terenkripsi dan terdeduplikasi ke server kedua atau ke object storage.
Mengapa restic atau borg, bukan salinan biasa
- Deduplikasi. Hanya data yang berubah yang disimpan, sehingga snapshot harian tetap kecil.
- Enkripsi. Data dienkripsi sebelum meninggalkan server Anda.
- Snapshot. Anda dapat memulihkan keadaan dari hari mana pun di masa lalu.
- Verifikasi. Kedua alat dapat memeriksa integritas repositori.
Pilih salah satu. Restic sederhana dan bekerja dengan banyak jenis penyimpanan, termasuk SFTP dan penyimpanan yang kompatibel dengan S3. Borg sangat efisien dan bekerja melalui SSH ke server yang memiliki borg terinstal.
Ke mana mengirim cadangan
Jangan pernah menyimpan satu-satunya cadangan di server yang sama. Gunakan VPS kedua di lokasi lain, bucket yang kompatibel dengan S3, atau storage box. VPS kecil dengan disk besar menjadi target cadangan yang murah. Lihat paket VPS.
Restic: penyiapan
sudo apt install -y restic
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic/myserver"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
Buat file kata sandi dengan kata sandi acak yang panjang dan simpan salinannya secara offline. Tanpa kata sandi itu, cadangan tidak dapat dipulihkan.
restic backup /etc /home /var/www --exclude-caches
restic snapshots
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic check
Borg: penyiapan
sudo apt install -y borgbackup
export BORG_REPO="ssh://backup@backup.example.com/srv/borg/myserver"
borg init --encryption=repokey-blake2
borg create --stats --compression zstd ::'{hostname}-{now:%Y-%m-%d}' /etc /home /var/www
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
borg check
Ekspor dan simpan kunci repositori dengan borg key export.
Database perlu penanganan khusus
Jangan menyalin file database yang sedang berjalan. Dump terlebih dahulu dan cadangkan hasil dump-nya:
mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
sudo -u postgres pg_dumpall | gzip > /var/backups/pg.sql.gz
Jadwalkan
Jalankan cadangan dari timer systemd atau cron. Baris cron sederhana:
15 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Beri peringatan ke diri Anda sendiri saat gagal, misalnya dengan ping pemantauan di akhir skrip.
Uji pemulihan
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls /tmp/restore-test
Sesekali uji pemulihan sungguhan di mesin cadangan. Cadangan yang tidak pernah diuji hanyalah harapan.