[Laravel] Backup

jeudi 8 février 2018

Laravel nous met aussi a disposition un service pour gérer les backups de notre site

Dans un premier temps, on va installer la librairie via composer

composer require spatie/laravel-backup

Ensuite, nous devons rajouter un service provider dans /config/app.php

Spatie\Backup\BackupServiceProvider::class,

Nous allons demander à artisan de créer les fichiers de configurations nécessaire pour notre service:

php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"

Il va donc créer le fichier de configuration pour définir ou nous allons backuper le site sur amazon s3 par exemple.
Ce fichier sera copier dans /config/backup.php.

Il ne reste plus qu’a éditer ce fichier pour définir ce que vous souhaitez sauver et ou le stocker!
Dans ce fichier, vous allez définir les fichiers à backuper, la db à backuper, et la destination pour sauver le backup.
Il suffit de définir le disk storage de laravel dans la propriété destinations et c’est fini.

Il est aussi possible de créer plusieurs buckets, pour cela, il suffit de définir un nouveau disk dans le fichier /config/filesystems

Exemple:

's3' => [
            'driver' => 's3',
            'key' => env('AWS_KEY'),
            'secret' => env('AWS_SECRET'),
            'region' => env('AWS_REGION'),
            'bucket' => env('AWS_BUCKET'),
        ],
's3Backup' => [
            'driver' => 's3',
            'key' => env('AWS_KEY'),
            'secret' => env('AWS_SECRET'),
            'region' => env('AWS_REGION'),
            'bucket' => env('AWS_BUCKET_BACKUP'),
        ],

Et donc dans le fichier /config/backup.php on va juste stipuler:

'destination' => [
    'disks' => [
        's3Backup',
    ],

Dans ce fichier, on peut aussi choisir si on veut être notifié par email ou non en fonction des events disponible lors de la création de backup.

        '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'],
        ],

Donc surtout ne pas oublier de définir un email valide et de configurer vos informations smtp dans le dossier .env!

Maintenant, il vous reste juste à tester votre configuration via la commande:

php artisan backup:run

Enfin, si vous souhaitez faire un cron de votre backup.
Il suffit de rajouter dans la fonction schedule du fichier app\Console\Kernel.

$schedule->command('backup:run')->daily()->at('03:30');

Il faut bien sur aussi créer le schedule cron de laravel sur le serveur.

crontab -e
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

Tags: backup , cron , Laravel , PHP , schedule