2 minute read

1. Instal rclone di Server dan PC Lokal

Pastikan versi rclone di server dan PC lokal sama agar tidak ada masalah kompatibilitas.

Ubuntu (Server)

curl https://rclone.org/install.sh | sudo bash
rclone version

Windows (PC Lokal)

  1. Download rclone dari rclone.org/downloads.
  2. Ekstrak dan jalankan:
    rclone.exe version
    

2. Konfigurasi rclone dan Generate Token OAuth

a. Jalankan konfigurasi di server:

rclone config

Ikuti langkah-langkah berikut:

  • Pilih โ€œnโ€ untuk membuat remote baru.
  • Masukkan nama remote (misalnya: my_remote).
  • Pilih Google Drive sebagai penyimpanan.
  • Pilih client_id dan client_secret default (langsung tekan Enter).
  • Pilih scope dengan opsi 1 (Full access).
  • Pilih konfigurasi untuk shared drive (jika ada).
  • Saat diminta login OAuth, catat link yang diberikan (jika server tidak memiliki browser, pilih opsi manual).

b. Jalankan rclone di PC Lokal untuk login OAuth:

rclone authorize "drive"
  • Login ke akun Google Drive.
  • Jika sukses, akan muncul pesan โ€œSuccess! All done.โ€
  • Salin token OAuth ke server.

c. Simpan konfigurasi di server

Setelah token dimasukkan di server, ketik q untuk keluar.

d. Uji koneksi ke Google Drive dari server:

rclone lsd my_remote:

Pastikan folder Google Drive bisa ditampilkan.

3. Buat Folder Backup di Google Drive

rclone mkdir my_remote:"Database Backup"

Cek apakah folder sudah ada:

rclone lsf my_remote:"Database Backup"

4. Buat File .pgpass untuk Otentikasi PostgreSQL

Buat file .pgpass di home directory:

nano ~/.pgpass_mydb

Isi dengan format:

localhost:5432:mydb:myuser:mypassword

Simpan (Ctrl + X, Y, Enter).

Ubah permission agar hanya bisa dibaca oleh user:

chmod 600 ~/.pgpass_mydb

5. Buat Script Backup Otomatis

Buat file backup_mydb.sh:

nano ~/backup_mydb.sh

Isi dengan:

#!/bin/bash

set -e  # Keluar otomatis jika ada error

# Konfigurasi
DB_NAME="database_name"
DB_USER="database_user"
BACKUP_DIR="~/database_backup"
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M")  # Format: YYYY-MM-DD_HH-MM
BACKUP_FILE="database_backup_${TIMESTAMP}.sql"
REMOTE_FOLDER="Database Backup" # Folder di Google Drive
PGPASSFILE="~/.pgpass"
LOG_FILE="~/backup.log"

# Redirect output ke log file
exec >> "$LOG_FILE" 2>&1

echo "===== Backup dimulai: $(date) ====="

# Pastikan direktori backup ada
mkdir -p "$BACKUP_DIR"

# Backup database menggunakan pg_dump
if PGPASSFILE="$PGPASSFILE" pg_dump -U "$DB_USER" -h localhost "$DB_NAME" > "$BACKUP_DIR/$BACKUP_FILE"; then
    echo "Database berhasil di-backup: $BACKUP_FILE"
else
    echo "Gagal melakukan backup database" >&2
    exit 1
fi

# Kompres file backup jika belum dikompresi
if [ ! -f "$BACKUP_DIR/$BACKUP_FILE.gz" ]; then
    gzip "$BACKUP_DIR/$BACKUP_FILE"
    echo "File backup dikompresi: $BACKUP_FILE.gz"
else
    echo "File backup sudah dikompresi sebelumnya"
fi

# Upload ke Google Drive menggunakan rclone
if rclone copy "$BACKUP_DIR/$BACKUP_FILE.gz" backup_remote:"$REMOTE_FOLDER"; then
    echo "Backup berhasil diunggah ke Google Drive: $BACKUP_FILE.gz"
    
    # Hapus backup lokal setelah diunggah
    rm -f "$BACKUP_DIR/$BACKUP_FILE.gz"
    rm -f "$BACKUP_DIR/$BACKUP_FILE"
    echo "File backup lokal dihapus: $BACKUP_FILE.gz"
    echo "File backup lokal dihapus: $BACKUP_FILE"
else
    echo "Gagal mengunggah backup ke Google Drive" >&2
    exit 1
fi

echo "===== Backup selesai: $(date) ====="

Simpan (Ctrl + X, Y, Enter).

Beri izin eksekusi:

chmod +x ~/backup_mydb.sh

6. Jalankan Backup Secara Manual (Tes)

~/backup_mydb.sh

Jika sukses, file backup akan muncul di Google Drive.

7. Jadwalkan Backup Otomatis dengan Cronjob

Edit cronjob:

crontab -e

Tambahkan baris berikut untuk backup setiap hari pukul 23:50:

50 23 * * * ~/backup_mydb.sh >> ~/backup.log 2>&1

Simpan (Ctrl + X, Y, Enter).

Cek apakah cron aktif:

crontab -l

8. Verifikasi File Backup di Google Drive

Pastikan file muncul dengan:

rclone lsf my_remote:"Database Backup"

Selesai! ๐ŸŽ‰ Sekarang backup database PostgreSQL berjalan otomatis ke Google Drive setiap hari pukul 23:50.

Jika ada error, cek:

cat ~/backup.log

Jika ada yang tidak sesuai mohon dikoreksi, selamat mencoba! ๐Ÿš€