Strategi backup dengan restic

Berbicara tentang strategi backup, restic adalah program yang selalu bisa saya handalkan. restic adalah sebuah program yang sederhana, namun sangat powerfull. restic bekerja seperti git. Sederhanyanya, dia akan mengcapture snapshot, dan selanjutnya bisa ditransfer ke storage server atau layanan S3 compatible yang kita mau. restic mendukung berbagai skenario backup. Mulai dari local, SFTP, REST server, AWS S3, DigitalOcean Space, atau Minio — jika kita ingin melakukan self-hosted layanan S3 kita sendiri.

restic tersedia untuk sistem operasi mayor seperti Linux, MacOS dan Windows. Comand line interfacenya mudah dipahami dan intuitif, membuat restic bisa disetup dalam hitungan menit, dan kita bia melakukan backup dengan instan.

Fun fact: website ini menggunakan restic sebagai salah satu strategi backupnya

Sebagai system administrator backup adalah pekerjaan esensial, dan restic bisa membantu kita tidur dengan tenang di malam hari. Kombinasikan dengan cron, dan kita bisa melakukan backup ke target repository secara otomatis, praktis, dan aman. Bahkan, kita bisa melakukan backup ke multi repository sekaligus. Yes! Backup juga perlu backup bukan?

Tutorial ini akan mengulas singkat bagaimana cara menerapkan strategi backup sederhana dengan menggunakan restic. Mari kita mulai.

Setup Restic

Install restic via distro repository atau unduh lewat restic.net Saya akan contohkan dengan menggunakan Ubuntu.

sudo apt install restic

Sebelum kita melakukan backup, kita membutuhkan sebuah repository. Repository adalah remote storage yang digunakan untuk menyimpan backup. Salah satunya kita bisa menggunakan AWS S3. Buatlah sebuah S3 bucket baru melalui AWS Console.

Anda bisa menggunakan layanan S3 compatible lainnya seperti DigitalOcean Space, Cloudflare R2, atau Minio.

Setelah selesai membuat S3 bucket baru, simpan dan copy credentials S3 yang digunakan. Credentials akan kita gunakan pada tahap inisiasi repository.

Inisiasi repository dan melakukan backup

Pertama set beberapa enrionment variable untuk proses inisiasi. Jalankan perintah berikut satu per satu pada shell Anda.

export AWS_DEFAULT_REGION="<region AWS s3 bucket>"
export RESTIC_REPOSITORY="s3:<URL repository>"
export AWS_ACCESS_KEY_ID=""
export AWS_SECRET_ACCESS_KEY=""
export RESTIC_PASSWORD="randompassword"

Sesuaikan variable di atas dengan URL S3 dan credentials user yang digunakan. Jangan lupa isi RESTIC_PASSWORD dengan password yang kuat untuk mengamankan backup kita. Password ini perlu kita ingat setiap kita melakukan backup dan restorasi. Jadi jangan sampai lupa.

Jangan merubah prefix AWS_ pada environment variable di atas, walaupun Anda menggunakan S3 service selain AWS S3. restic akan menggunakan environment variable yang sama untuk semua repository S3 compatible.

Pastikan semua credentials sudah benar. Selanjutnya jalankan restic init:

restic init

Dan terakhir lakukan backup pada file atau directory yang diinginkan.

restic backup /path/file/atau/directory/target

contoh:

# backup seluruh isi dari /var/www
restic backup /var/www

Melakukan restorasi

restic bekerja dengan membuat snapshot. Setiap kita menjalankan backup, dia akan mengcapture bagian yang berubah, ya seperti git. Snapshot adalah checkpoint yang nantinya kita gunakan sebagai target titik restorasi.

Untuk melihat daftar snapshot, kita bisa gunakan perintah:

restic snapshots --path="/var/www"

–path argument berfungsi sebagai filter untuk menampilkan snapshot dari path yang kita inginkan saja. Tanpa filter ini, secara default semua snapshot akan ditampilkan.

Selanjutnya untuk melakukan restorasi, kita bisa lakukan dari snapshot yang kita inginkan.

restic restore <id_snapshot> --target /path/ke/target

Otomasi backup

Cara paling sederhana untuk melakukan otomasi backup adalah dengan bash script dan cron. Pertama, mari kita siapkan sebuah file yang berisikan environment variable seperti pada tahap inisiasi sebelumnya. Berikut contohnya:

export AWS_DEFAULT_REGION="<region AWS s3 bucket>"
export RESTIC_REPOSITORY="s3:<URL repository>"
export AWS_ACCESS_KEY_ID=""
export AWS_SECRET_ACCESS_KEY=""
export RESTIC_PASSWORD="randompassword"

Simpan file tersebut dengan ektensi .env. Contoh credentials.env Saya menggunakan ekstensi .env karena .env sangat umum digunakan untuk menyimpan environment variable.

Selanjutnya buat sebuah bash script untuk menjalankan serangkaian proses backup yang akan ditrigger dengan cron.

#!/bin/bash

# baca credentials 
source /path/ke/env/credentials.env

# melakukan backup repository
echo "Memulai backup"
restic backup /path/ke/directory/target/backup
if [ $? -ne 0 ]; then
  echo "Wolowolo! terjadi error saat backup"
  exit 1
fi
echo "Mantap backup berhasil!"

# Optional: Hapus snapshot lama yang tidak diperlukan, namun pertahankan 7 hari terakhir, 4 di bulan terakhir, dan 1 di 6 bulan terakhir
echo "Bersih-bersih..."
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

echo "Backup selesai. Yay!"

Kemudian buat penjadwalan backup dengna dengan crontab -e. Contoh backup yang akan dilakukan setiap pukul 04.00 subuh setiap hari.

0 4 * * * /path/ke/script/backup.sh >> /path/ke/log/file.log 2>&1

Anda bisa sesuaikan jadwal cron sesuai dengan kebutuhan Anda.

Kesimpulan

  • restic adalah program yang mudah digunakan untuk melakukan backup, mendukung berbagai macam target repository populer
  • resric bekerja dengan menggunakan snapshot, mirip dengan git.
  • melakukan backup otomatis dengan restic sangat mudah. Hanya perlu membuat bash script dan menjalankannya dengan cron scheduller