Backup Aplikasi Laravel Dan Database Menggunakan Package Spatie Laravel backup Dan Jalankan Schedule Otomatis Backup Di Laravel Forge Menggunakan Cronjob
Ketika aplikasi yang sudah kita develop sudah di tahap production tentu backup merupakan hal yang sangat penting baik itu melakukan backup di level aplikasi ataupun di level database, Untuk melakukan backup pada aplikasi yang kita deploy menggunakan laravel kita dapat menggunakan package dari spatie yaitu laravel backup silahkan anda baca dokumentasinya klik disini
Pada tutorial kali ini kita akan mengkombinasikan laravel backup + laravel Forge ya kali ini saya menggunakan laravel forge untuk deployment dan salah satu fitur yang terdapat pada laravel forge yaitu fitur schedule dimana kita dapat membuat schedule cronjob dengan mudah, Bagi anda yang tidak terbiasa dengan crontab parameter anda dapat menggunakan bantuan cronjob generate dari crontab guru silahkan cek disini
instalasi Package Laravel Backup
composer require spatie/laravel-backup
setelah anda install package ini akan otomatis melakukan register di service provider namun jika tidak anda dapat menambahkannya sendiri sbb
//config/app.php 'providers' => [ /* * Laravel Framework Service Providers... */ Spatie\Backup\BackupServiceProvider::class,
lalu kita publish backupo confignya dengan cara sbb
php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"
lalu buka file config/backup.php dan silahkan anda config storagenya disini saya menggunakan s3 storage dari amazon webservices
'destination' => [ /* * The filename prefix used for the backup zip file. */ 'filename_prefix' => '', /* * The disk names on which the backups will be stored. */ 'disks' => [ 's3-backup', ], ],
Dikarenakan kita menyimpan backup di s3 amazon web service maka disk monitornya harus kita arahkan ke s3 amazon web service juga sbb
'monitor_backups' => [ [ 'name' => env('APP_NAME', 'laravel-backup'), 'disks' => ['s3-backup'], 'health_checks' => [ \Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1, \Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumStorageInMegabytes::class => 5000, ], ], ],
Konfigurasi Amazon S3
Jika anda menyimpan backup ke amazon s3 storage maka anda harus menginstall package league/flysystem-aws-s3-v3 ~1.0
composer require league/flysystem-aws-s3-v3 ~1.0
Setelah Itu Setting Di File .ENV beberapa parameter sbb
AWS_ACCESS_KEY_ID_BACKUP=AKIAVJO3TM21232132 AWS_SECRET_ACCESS_KEY_BACKUP=1cX21321DTFGWWwGe43ZV1r1xkSu AWS_DEFAULT_REGION_BACKUP=ap-southeast-1 AWS_BUCKET_BACKUP=novalio-id-backup
Nilai dari Parameter di atas anda dapatkan dari amazon web service anda silahkan anda setup IAM untuk s3 Storagenya di AWS Console
Tahap Pengujian
setelah kita melakukan config seperti diatas maka tahap selanjutnya adalah kita menjalankan command yang tersedia di laravel backup beberapa command yang sangat sering di jalankan antara lain :
php artisan backup:clean
Command diatas berfungsi untuk melakukan cleanup backup di server
php artisan backup:run
Command diatas berfungsi untuk melakukan backup dan menyimpannya ke media penyimpanan yang telah kita tentukan di backup config di artikel ini kita menyimpan ke S3 Storage Amazon Web Service
php artisan backup:monitor
Command diatas berfungsi untuk melakukan monitor apakah ada kendala di backup yang kita jalankan misal proses backup gagal ataupun berhasil dan kita bisa setup notifikasi ke email ataupun ke provider lain seperti slack
Proses Menjalankan backup Clean
Proses Menjalankan backup Run
Proses Menjalankan Backup Monitor
Cek backup Di Amazon S3
Notifikasi Backup
Untuk Mendapatkan Notifikasi dari proses backup yang di jalankan kita dapat melakukan konfigrurasi notifikasi via email silahkan anda bukan backup config yang berada di config/backup.php dan lakukan konfigurasi sbb
'notifications' => [ 'notifications' => [ \Spatie\Backup\Notifications\Notifications\BackupHasFailed::class => ['mail'], \Spatie\Backup\Notifications\Notifications\UnhealthyBackupWasFound::class => ['mail'], \Spatie\Backup\Notifications\Notifications\CleanupHasFailed::class => ['mail'], \Spatie\Backup\Notifications\Notifications\BackupWasSuccessful::class => ['mail'], \Spatie\Backup\Notifications\Notifications\HealthyBackupWasFound::class => ['mail'], \Spatie\Backup\Notifications\Notifications\CleanupWasSuccessful::class => ['mail'], ],'mail' => [ 'to' => 'backup@adinata.id', 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'backup@adinata.id'), 'name' => env('MAIL_FROM_NAME', 'Backup Novalio'), ], ],
Agar Notifikasi Ini berjalan anda perlu melakukan konfigurasi SMTP pada File .ENV sbb
MAIL_MAILER=smtp MAIL_HOST=mail.adinata.id MAIL_PORT=465 MAIL_USERNAME=email anda MAIL_PASSWORD=password email anda MAIL_ENCRYPTION=SSL MAIL_FROM_ADDRESS=backup@adinata.id MAIL_FROM_NAME="${APP_NAME}"
Maka ketika anda menjalankan backup akan muncul notifkasi ke email anda sbb
Notifikasi Clean Up Backup
Notifikasi Backup Run
Notifikasi Backup Monitor
Notifikasi Gagal Backup
Otomatis Jalankan Backup Dengan Schedule
Tentu kita tidak akan menjalankan backup ini secara manual maka kita perlu melakukan schedule pada aplikasi kita dan untuk membuat schedule command di laravel sangat mudah sekali pertama kita tambahkan dulu command yang akan di jalankan pada file app/Console/Kernel.php sbb
protected function schedule(Schedule $schedule) { $schedule->command('backup:clean')->dailyAt('01:00'); $schedule->command('backup:run')->dailyAt('01:30'); $schedule->command('backup:monitor')->dailyAt('03:00'); }
Jika Server anda di deploy di satu negara saja maka anda dapat menambahkan method Schedule Timezone sbb
/** * Get the timezone that should be used by default for scheduled events. * * @return \DateTimeZone|string|null */ protected function scheduleTimezone() { return 'Asia/Jakarta'; }
Setelah kita berhasil menambahkan schedule command selanjutnya kita tambahkan cronjob dan kali ini kita menggunakan platform Laravel Forge bagi anda yang ingin menggunakan laravel forge silahkan cek
Pada Laravel Forge Kita dapat membuat cronjob sesuai dengan jadwal di jalankannya schedule backup sbb
Bagi anda yang bingung dengan parameter crontab anda dapat mengenerate crontab dengan bantuan Crontab Guru Silahkan Cek
Agar Jadwal Cronjob berjalan sesuai dengan waktu di negara anda maka jangan lupa seting timezone server anda di laravel forge ke timezone negara anda contohnya disini saya set ke Asia/Jakarta anda dapat melakukan setting di menu sbb
Command Untuk Menjalankan backup Di Laravel Forge ( Menggunakan PHP 8 )
php8.0 /home/forge/novalio.id/artisan schedule:run
Demikian Tutorial ini semoga bermanfaat
Salam,
Adinata
Referensi Terkait
Spatie Laravel backup klik disini
Laravel Forge Scheduler klik disini
Mattstaufer Forge Schedule klik disini
Originally published at https://adinata.id on April 23, 2021.