Probleem
Helaas realiseren veel nieuwe Laravel-ontwikkelaars dit niet totdat ze hun code in productie hebben genomen, en er gebeurt iets waardoor ze hun gegevens verliezen.
Laravel biedt geen databaseback-up als onderdeel van hun kernfunctionaliteit, dus nieuwe Laravel-ontwikkelaars gaan daar niet mee aan de slag tijdens het lezen van Laravel-artikelen of het bouwen van een Laravel-applicatie.
Tegenwoordig wordt het steeds belangrijker om uw back-upgegevens op te slaan en te bewaren voor het geval u ze ooit nodig heeft.
Veelvoorkomende fouten die nieuwe Laravel-ontwikkelaars maken, is om naar phpmyadmin te gaan en deze export handmatig uit te voeren. Hoewel dit nog steeds werkt, is dit niet de beste methode, omdat u er soms niet bent om de back-up te maken en uw gebruikers al nieuwe gegevens hebben gegenereerd.
Wat u wilt doen, is dat automatiseren.
Oplossing
Er zijn veel manieren waarop u een back-up van uw database kunt maken, maar hoeveel mensen gebruiken dit pakket https://github.com/spatie/laravel-backup . Het bedrijf erachter is zeer betrouwbaar en bekend in de branche.
Allereerst is het pakket GRATIS, dus je hoeft niets te betalen.
Aan de positieve kant, de installatie is vrij eenvoudig en wat ik vooral leuk vind, is dat het niet alleen je databaseback-up maakt, je hebt ook een optie om een back-up van je bestanden te maken en dat vervolgens allemaal op te slaan in een zip-bestand. Als ik bestanden zeg, bedoel ik opslagbestanden, zoals de documentuploads of bestanden die u genereert met uw toepassing.
Bovendien kun je dat ook naar AWS S3 verplaatsen, wat slim is om te doen. Het enige dat u hoeft te doen is (ervan uitgaande dat u al een AWS-account heeft, een nieuwe S3-bucket met nieuwe machtigingen te gaan maken. Dan kun je gewoon de documentatie op hun Github-pagina volgen.
Hier is een snel voorbeeld van het configuratiebestand dat u kunt aanpassen, zodat u meldingen ontvangt via andere media zoals Slack en e-mail.
'meldingen' => ['meldingen' => [
\Spatie\Backup\Notifications\Notifications\BackupHasFailed::class => ['mail', 'slack'],
\Spatie\Backup\Notifications\Notifications\UnhealthyBackupWasFound::class => ['mail', 'slack'],
\Spatie\Backup\Notifications\Notifications\CleanupHasFailed::class => ['mail', 'slack'],
\Spatie\Backup\Notifications\Notifications\BackupWasSuccessful::class => ['mail', 'slack'],
\Spatie\Backup\Notifications\Notifications\HealthyBackupWasFound::class => ['mail', 'slack'],
\Spatie\Backup\Notifications\Notifications\CleanupWasSuccessful::class => ['mail', 'slack'],
],
/*
* Hier kunt u de meldingsplichtige opgeven waarnaar de meldingen moeten worden verzonden. De standaard
* notifiable zal de variabelen gebruiken die in dit configuratiebestand zijn gespecificeerd.
*/
'notifiable' => \Spatie\Backup\Notifications\Notifiable::class,
'mail' => [
'naar' => ['[email protected]'],
],
'slap' => [
'webhook_url' => 'https://hooks.slap.com/services/ABMGGK7AB/B9PBCDSM8/kam02gzLrycaUBctgAdRv52M',
/*
* Als dit is ingesteld op null, wordt het standaardkanaal van de webhook gebruikt.
*/
'kanaal' => null,
],
],
Automatisering instellen
Ten slotte zou dit allemaal niet veel zin hebben als je zou besluiten om het automatiseringsgedeelte over te slaan. Hiervoor wilt u vertrouwen op cron-taken die al op uw host moeten zijn ingeschakeld en verwijzen naar het Laravel-schema-commando als volgt:
* * * * * cd /pad-naar-uw-project && php artisan schema:run >> /dev/null 2>&1Vanaf hier, in je app/Console/Kernel.php-bestand moet je het volgende doen als je het op een bepaald moment wilt automatiseren (ik doe dit meestal wanneer de meeste van onze gebruikers slapen):
if (app('env') == 'productie')$schedule->command('backup:clean')->daily()->at('01:00');
$schedule->command('backup:run')->daily()->at('02:00');