Setup Auto Backup Database Aplikasi Laravel
Berikut alur proses setup auto backup database aplikasi laravel menggunakan package spatie/laravel-backup.
TIP
tulisan manusia, butuh yang terstruktur dan rapi (AI Generate) BACA DI SINI
1. Siapkan storage S3 atau sejenisnya
Gunakan layanan storage eksternal seperti AWS S3 atau Cloudflare R2.
Install package
league/flysystem-aws-s3-v3composer require league/flysystem-aws-s3-v3Siapkan pilihan disk baru pada
config/filesystems.php, bisa diberikan namar2_backup.php'r2_backup' => [ 'driver' => 's3', 'key' => env('R2_BACKUP_ACCESS_KEY_ID'), 'secret' => env('R2_BACKUP_SECRET_ACCESS_KEY'), 'region' => env('R2_BACKUP_REGION', 'auto'), 'bucket' => env('R2_BACKUP_BUCKET'), 'url' => env('R2_BACKUP_URL'), 'endpoint' => env('R2_BACKUP_ENDPOINT'), 'use_path_style_endpoint' => env('R2_BACKUP_USE_PATH_STYLE_ENDPOINT', false), 'visibility' => env('R2_BACKUP_VISIBILITY', 'private'), 'retries' => (int) env('R2_BACKUP_RETRIES', 10), 'http' => [ 'connect_timeout' => 30, 'timeout' => 600, ], 'throw' => true, ],.env disk
r2_backupdotenvR2_BACKUP_ACCESS_KEY_ID= R2_BACKUP_SECRET_ACCESS_KEY= R2_BACKUP_BUCKET="backup_bucket_name" R2_BACKUP_ENDPOINT=
2. Install spatie/laravel-backup
Ini poin pentingnya.
install package, dengan run:
bashcomposer require spatie/laravel-backuppublish config dengan run:
bashphp artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider" --tag=backup-configuntuk terjemahan notifikasi backup, bisa publish dengan run (opsional):
bashphp artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider" --tag=backup-translations
Sesuaikan config/backup.php, edit yang dibutuhkan saja, berikut beberapa config key yang dibutuhkan untuk penyesuaian.
timestamp file dump
bash'database_dump_file_timestamp_format' => 'Y-m-d-H-i-s'extenstion file hasil dump
bash'database_dump_file_extension' => 'backup',prefix file
bash'filename_prefix' => env('DB_DATABASE').'_'.env('APP_ENV').'_'disk, tempat dimana backup akan disimpan, bisa multi disk.
php'disks' => [ 'r2_backup', //local, //s3_aws ],Monitoring Backup, sesuaikan disknya.
php'monitor_backups' => [ [ 'name' => env('APP_NAME', 'laravel-backup'), 'disks' => ['r2_backup'], 'health_checks' => [ MaximumAgeInDays::class => 1, MaximumStorageInMegabytes::class => 5000, // 5GB ], ], ],Notifikasi via email (default), direkomendasikan pakai env value.
php'mail' => [ 'to' => env('BACKUP_NOTIFICATION_EMAIL', 'hello@example.com'), 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 'name' => env('MAIL_FROM_NAME', 'Example'), ], ],
Tambahkan route di routes/console.php
// backup database
Schedule::command('backup:clean')->daily()->at('01:00')->withoutOverlapping();
Schedule::command('backup:run --only-db')->daily()->at('01:30')->withoutOverlapping();
Schedule::command('backup:monitor')->daily()->at('02:00')->withoutOverlapping();3. Notifikasi
Secara default notifikasi via email, melalui config
mail.Opsional, tambahkan channel
discorddengan install package spatie/laravel-discord-alerts.bashcomposer require spatie/laravel-discord-alertssetup variable
DISCORD_ALERT_WEBHOOKpada .env, isinya berupawebhook_urldari aplikasi discord.setup channel
discordpadaconfig/backup.php.bash'discord' => [ 'webhook_url' => env('DISCORD_ALERT_WEBHOOK'), // [!code warning] /* * If this is an empty string, the name field on the webhook will be used. */ 'username' => '', /* * If this is an empty string, the avatar on the webhook will be used. */ 'avatar_url' => '', ],tambahkan channel notifikasi
discord
'notifications' => [
'notifications' => [
// config lama
BackupHasFailedNotification::class => ['mail'],
UnhealthyBackupWasFoundNotification::class => ['mail'],
CleanupHasFailedNotification::class => ['mail'],
BackupWasSuccessfulNotification::class => ['mail'],
HealthyBackupWasFoundNotification::class => ['mail'],
CleanupWasSuccessfulNotification::class => ['mail'],
// sesuaikan menjadi:
BackupHasFailedNotification::class => ['mail', 'discord'],
UnhealthyBackupWasFoundNotification::class => ['mail', 'discord'],
CleanupHasFailedNotification::class => ['mail', 'discord'],
BackupWasSuccessfulNotification::class => ['mail', 'discord'],
HealthyBackupWasFoundNotification::class => ['mail', 'discord'],
CleanupWasSuccessfulNotification::class => ['mail', 'discord'],
],
].env untuk notifikasi
dotenvBACKUP_NOTIFICATION_EMAIL="your@gmail.com" DISCORD_ALERT_WEBHOOK="webhook url..."
Testing local
php artisan backup:run --only-dbSelamat mencoba.
Orang Bijak Berkata:
Backup yang baik bukan yang paling canggih, tapi yang rutin jalan dan pernah terbukti bisa di-restore.