Backup ke Remote Server Dengan rsync

Untuk melakukan sync data antar server di Linux sangat mudah sekali dengan menggunakan rsync. Rsync ini adalah salah satu program yang bisa dibilang hampir ada di semua distro server popular. Jika tidak ada pun, bisa diinstall dengan sangat mudah.

Gunanya apa? Gunanya adalah untuk melakukan backup sinkronisasi data antar server, bisa juga untuk backup dan restore/recovery data ke remote server/external server.

Langkah Backup Data ke Remote Server dengan Rsync

Yang pertama, buka koneksi ke remote server, bisa dengan menggunakan SSH Key. Kita buat dulu SSH Key Private dan Public di server local:

ssh-keygen -t rsa

Nanti akan generated sebuah pasangan SSH Keys di ~/.ssh/id_rsa.pub and ~/.ssh/id_rsa.

Selanjutnya, kita transfer public key kita ke remote server, commandnya:

ssh-copy-id username@remotehostname

Isian remotehostname di sini bisa berupa IP atau hostname

Pertama konek kita akan diminta mengisikan username dan password. Setelah logged in, public key di server kita (yang sudah generated) akan dicopy ke server lain. Pastikan public key kita sudah masuk ke file .ssh/authorized_keys di server tujuan, dan pastikan permission file authorized_keys tersebut adalah 644 dan permission folder .ssh adalah 755, serta mode End Of Line adalah UNIX (bukan DOS/Windows)

Berikutnya kita tinggal melakukan command “ssh remotehostname” untuk bisa login ke server yang remote.

Melakukan Upload Rsync

Berikutnya, lakukan rsync “push” dari local server ke remote server, commandnya

rsync -azv /path/to/local/directory/ username@remote_host:path/to/remote/directory

Di atas contoh untuk arsip data. Untuk menghapus data di folder tujuan yg sudah tidak ada di folder asli, kita tambahkan flag delete dan ignore errors

rsync -azv --delete --ignore-errors /path/to/local/directory/ username@remote_host:path/to/remote/directory

Untuk melakukan upload, seringkali ada kegagalan atau rsync tidak responsive. Ada baiknya kita berikan time limit (dalam detik) kapan rsync harus diakhiri, untuk ini kita gunakan fungsi timeout, misalnya timeout dalam 18.000 detik (6 jam) setelah process rsync dimulai pada tengah malam (00:00), maka proses rsync akan berhenti tepat pukul 06:00.

timeout 18000 rsync -azv --delete --ignore-errors /path/to/local/directory/ username@remote_host:path/to/remote/directory

Ingat: source directory diakhiri /, target directory TANPA akhiran /

Testing dulu sebelum melakukan rsync!

Melakukan Download Rsync

Untuk sebaliknya, melakukan rsync “pull” dari remote server ke local server, tinggal dibalik urutannya

rsync -azv username@remote_host:path/to/remote/directory/ /path/to/local/directory

Di atas contoh untuk arsip data. Untuk menghapus data di folder tujuan yg sudah tidak ada di folder asli

rsync -azv --delete username@remote_host:path/to/remote/directory/ /path/to/local/directory

Seperti umumnya kode untuk copy file, argumen pertama selalu merupakan source file, berikutnya baru target files

Ingat: source directory diakhiri /, target directory TANPA akhiran /

Agar Bisa Diakses Public

Ingin membuat local CDN? Tambahkan –chmod=D755,F644 pada parameter saat melakukan rsync, agar file yang disinkronisasikan bisa diakses oleh public

Agar Tetap Berjalan Saat Terminal Mati

Tambahkan ampersand (&) di akhir rsync, lalu masukkan perintah disown pada baris selanjutnya untuk membuat rsync tetap berjalan walau terminal di komputer kita mati atau terputus.

disown %1

Tentang Slash

You may have noticed that there is a trailing slash (/) at the end of the first argument in the above commands:

rsync -a dir1/ dir2

This is necessary to mean “the contents of dir1”. The alternative, without the trailing slash, would place dir1, including the directory, within dir2. This would create a hierarchy that looks like:

~/dir2/dir1/[files]

https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps

Beberapa Parameter Penting

-azv // untuk mengarsipkan file
–delete // untuk menghapus file di tujuan yang sudah tidak ada di sumber
–chmod=Du=rwx,Dgo=rx,Fu=rw,Fog=r // untuk membuat file tujuan ber-permission 644 dan folder tujuan berpermission 755
–exclude error_log // exclude folder atau file dengan nama error_log
–exclude ‘*.php’ // exclude folder atau file dengan akhiran *.php

Pastikan Hanya Satu Rsync Yang Berjalan

Agar tidak ada beberapa proses rsync yg berjalan bersamaan, silakan ikuti tutorial Memastikan Hanya Satu Instance Bash Script Yang Berjalan

Referensi:

https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server-in-ubuntu

https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps

Backup Dengan Rsync ke S3 Storage?

Gunakan rclone, https://rclone.org/

Run rclone config to setup. See rclone config docs for more details.

rclone config

Sync /home/local/directory to the remote bucket, deleting any excess files in the bucket.

rclone sync /home/local/directory remote:bucket --auto-confirm

–auto-confirm If enabled, do not request console confirmation (source)

-i, –interactive Enable interactive mode

Mau dibalik juga bisa, dari remote ke local. Ganti saja urutan source dan destinationnya, menjadi:

rclone sync remote:bucket /home/local/directory --auto-confirm

PENTING: perhatikan bahwa di local directory dan remot bucket tidak ada akhiran /

Bisa juga ditambah timeout 86400s, jadi max jalan 24 jam

timeout 86400s rclone sync /home/local/directory remote:bucket –auto-confirm

PENTING: rclone sync tidak menghapus folder yang sudah ada, hanya upload file baru ke remote. Jadi hapus backup lama, biar mudah semuanya digabungkan dalam sebuah file .sh

Begini contoh file .sh yang dipakai dan bisa dijalankan setiap hari:

https://ahlikompie.com/wp-content/uploads/2023/03/rclone-to-s3idcloudhost.sh


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *