🔐 Mengapa Backup Itu Penting?
Bayangkan skenario ini: website Anda sudah berjalan berbulan-bulan, ratusan artikel sudah dipublikasi, data pengguna sudah terkumpul, lalu suatu hari... server crash. Database corrupt. Semua data hilang dalam sekejap.
Tanpa backup, Anda hanya bisa pasrah. Dengan backup yang teratur, Anda bisa memulihkan semuanya dalam hitungan menit.
Dalam artikel ini, saya akan membagikan cara mengimplementasikan sistem backup otomatis di Laravel yang langsung tersimpan di Google Drive — gratis, aman, dan bisa diakses dari mana saja.
📋 Arsitektur Sistem
Sistem backup yang kita bangun memiliki arsitektur sebagai berikut:
- BackupController — Menangani logika create, list, download, dan delete backup
- GoogleDriveServiceProvider — Menghubungkan Laravel Filesystem dengan Google Drive API
- Flysystem Adapter — Library yang menjembatani Laravel Storage dengan Google Drive
- Admin UI — Halaman admin untuk mengelola backup secara visual
Alur kerjanya sederhana:
- Admin klik "Buat Backup" di panel admin
- Sistem melakukan database dump (SQL)
- File SQL diupload ke Google Drive
- File temporary lokal dihapus
- Admin bisa download atau hapus backup kapan saja
🛠️ Langkah 1: Instalasi Package
Kita menggunakan package masbug/flysystem-google-drive-ext sebagai adapter Flysystem untuk Google Drive. Install via Composer:
composer require masbug/flysystem-google-drive-ext
Package ini akan otomatis menginstall dependensi yang diperlukan:
google/apiclient— Google API Client Librarygoogle/apiclient-services— Google Drive Servicefirebase/php-jwt— JWT token handlingphpseclib/phpseclib— PHP Secure Communications Library
🔑 Langkah 2: Konfigurasi Google Cloud Console
Ini bagian yang paling krusial. Anda perlu membuat OAuth2 credentials di Google Cloud Console.
2.1 Buat Project
- Buka Google Cloud Console
- Klik "New Project"
- Beri nama, misalnya: "MyBlog Backup"
- Klik "Create"
2.2 Aktifkan Google Drive API
- Navigasi ke APIs & Services → Library
- Cari "Google Drive API"
- Klik "Enable"
2.3 Konfigurasi OAuth Consent Screen
- Buka APIs & Services → OAuth consent screen
- Pilih "External"
- Isi nama aplikasi dan email
- Di bagian "Test users", tambahkan email Google Anda
- Klik "Save"
💡 Tips: Untuk penggunaan pribadi, Anda tidak perlu memverifikasi app ke Google. Mode "Testing" sudah cukup — cukup pastikan email Anda terdaftar sebagai test user.
2.4 Buat OAuth2 Credentials
- Buka APIs & Services → Credentials
- Klik "+ CREATE CREDENTIALS" → "OAuth client ID"
- Pilih tipe: Web Application
- Tambahkan Authorized Redirect URI:
https://developers.google.com/oauthplayground - Klik "Create"
- Catat Client ID dan Client Secret
2.5 Dapatkan Refresh Token
- Buka OAuth Playground
- Klik ⚙️ Settings → centang "Use your own OAuth credentials"
- Masukkan Client ID dan Client Secret dari langkah sebelumnya
- Di panel kiri, pilih: Google Drive API v3 → https://www.googleapis.com/auth/drive
- Klik "Authorize APIs" → Login dan klik "Allow"
- Klik "Exchange authorization code for tokens"
- Salin Refresh Token (dimulai dengan
1//...)
2.6 Siapkan Folder Google Drive
- Buka Google Drive
- Buat folder baru, misalnya: "MyBlog Backups"
- Buka folder tersebut
- Lihat URL di browser:
https://drive.google.com/drive/folders/FOLDER_ID_NYA - Salin bagian setelah
/folders/— itu adalah Folder ID
⚙️ Langkah 3: Konfigurasi Laravel
3.1 Environment Variables
Tambahkan ke file .env:
GOOGLE_DRIVE_CLIENT_ID=your-client-id
GOOGLE_DRIVE_CLIENT_SECRET=your-client-secret
GOOGLE_DRIVE_REFRESH_TOKEN=your-refresh-token
GOOGLE_DRIVE_FOLDER_ID=your-folder-id
3.2 Filesystem Disk
Tambahkan disk google di config/filesystems.php:
'google' => [
'driver' => 'google',
'clientId' => env('GOOGLE_DRIVE_CLIENT_ID'),
'clientSecret' => env('GOOGLE_DRIVE_CLIENT_SECRET'),
'refreshToken' => env('GOOGLE_DRIVE_REFRESH_TOKEN'),
'folder' => env('GOOGLE_DRIVE_FOLDER_ID'),
],
3.3 Service Provider
Buat GoogleDriveServiceProvider yang mendaftarkan driver google ke Laravel Filesystem. Provider ini menggunakan Google API Client untuk autentikasi OAuth2 dan membuat Flysystem adapter.
Poin penting dalam implementasi:
- Gunakan
fetchAccessTokenWithRefreshToken()untuk mendapatkan access token dari refresh token - Tambahkan error handling untuk mendeteksi token yang invalid atau expired
- Daftarkan provider di
bootstrap/providers.php
🎮 Langkah 4: BackupController
Controller ini menangani semua operasi backup:
Fitur-fitur:
1. List Backups — Mengambil daftar file backup dari Google Drive, menampilkan nama file, ukuran, dan tanggal. Diurutkan dari yang terbaru.
2. Create Backup — Proses pembuatan backup:
- Dump database menggunakan
mysqldump(jika tersedia) - Jika
mysqldumptidak ditemukan, gunakan PHP-based dump sebagai fallback - Simpan file SQL sementara di local storage
- Upload ke Google Drive menggunakan
Storage::disk('google') - Hapus file temporary
3. Download Backup — Mengambil file dari Google Drive dan mengirimkannya sebagai response download.
4. Delete Backup — Menghapus file backup dari Google Drive.
PHP-Based Database Dump
Tidak semua server memiliki akses ke binary mysqldump. Oleh karena itu, kami implementasikan fallback berbasis PHP yang:
- Mengambil daftar semua tabel menggunakan
SHOW TABLES - Untuk setiap tabel, mengambil
CREATE TABLEstatement - Mengekspor semua data baris per baris dengan
INSERT INTOstatement - Menangani foreign key constraints dengan
SET FOREIGN_KEY_CHECKS=0
🎨 Langkah 5: Admin Panel UI
Halaman backup di admin panel menampilkan:
- Status koneksi — Hijau jika terhubung, merah jika ada error
- Tombol "Buat Backup Baru" — Satu klik untuk membuat dan upload backup
- Tabel daftar backup — Menampilkan nama file, ukuran, tanggal, dan aksi (download/hapus)
- Panduan setup — Otomatis muncul jika Google Drive belum dikonfigurasi
Fitur UX yang Penting
- Tombol "Buat Backup" otomatis disabled saat diklik (mencegah double-click)
- Konfirmasi sebelum menghapus backup
- Empty state yang informatif ketika belum ada backup
- Panduan setup lengkap langsung di halaman (tanpa perlu buka dokumentasi terpisah)
🔒 Keamanan
Beberapa hal penting terkait keamanan:
- Credentials di .env — Client ID, Secret, dan Refresh Token disimpan di file
.envyang tidak ter-commit ke Git - Auth middleware — Semua route backup dilindungi middleware
auth, hanya admin yang bisa mengakses - Scope minimal — Gunakan scope
drive.fileagar app hanya bisa mengakses file yang dibuatnya sendiri (bukan seluruh Google Drive Anda) - Testing mode — App tidak perlu diverifikasi Google karena hanya digunakan secara pribadi
🚀 Deploy ke Server
Untuk deploy ke server production:
- Pull kode terbaru dari repository
- Jalankan
composer installuntuk menginstall package baru - Tambahkan 4 variabel Google Drive ke file
.envdi server - Clear config cache:
php artisan config:clear - Buka halaman backup di admin panel untuk verifikasi
💡 Tips: Gunakan Refresh Token yang sama untuk lokal dan server. Tidak perlu membuat credentials terpisah — satu set credentials bisa digunakan di banyak server.
📝 Best Practices
1. Backup Secara Rutin
Idealnya, buat backup minimal 1x sehari. Untuk traffic tinggi, buat backup setiap beberapa jam. Anda bisa mengotomasi ini dengan Laravel Scheduler:
// app/Console/Kernel.php
$schedule->call(function () {
app(BackupController::class)->create();
})->daily();
2. Retention Policy
Jangan biarkan backup menumpuk tanpa batas. Terapkan retention policy — misalnya, hanya simpan backup 30 hari terakhir, hapus yang lebih lama secara otomatis.
3. Test Restore
Backup yang tidak pernah di-test restore-nya sama saja dengan tidak punya backup. Secara berkala, download backup dan coba restore ke database test untuk memastikan file backup valid.
4. Monitor Google Drive Storage
Google Drive menyediakan 15 GB gratis. File backup SQL biasanya berukuran kecil (beberapa MB), tapi pastikan storage tidak penuh.
🏁 Kesimpulan
Dengan sistem backup ke Google Drive ini, data website Anda terlindungi dari:
- ✅ Server crash atau hardware failure
- ✅ Kesalahan manusia (accidental delete)
- ✅ Serangan hacker atau ransomware
- ✅ Masalah hosting provider
Implementasinya cukup straightforward — install satu package, buat beberapa file, konfigurasi OAuth2, dan sistem backup Anda siap. Investasi waktu 1-2 jam untuk ketenangan pikiran selamanya.
Semoga panduan ini bermanfaat! Jangan lupa untuk segera membuat backup pertama Anda setelah implementasi. 🚀
Wallahu a'lam bishawab.