Настройка бэкапирования для Laravel в облако AWS S3
Table of contents
Introduction
Существует отличный пакет для настройки бэкапирования на Laravel: spatie/laravel-backup.
Используя данный пакет, мы настроим автоматическое бэкапирования базы данных и файлов в облако AWS S3
.
Установка пакета
Добавляем пакет в composer
:
composer require spatie/laravel-backup
Публикуем настройки и языковые файлы:
php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"
Проверка установки созданием локального бэкапа
После установки необходимо произвести настройки пакета в файле config/backup.php
.
Указываем пути для бэкапирования файлов и базы данных (как в config/database.php
):
'backup' => [
'source' => [
'files' => [
'include' => [
'...',
],
],
'databases' => [
'mysql',
],
Настроим и диск для бэкапирования:
'backup' => [
'destination' => [
'disks' => [
'backup',
],
],
Сами же настройки диска производим в файле config/filesystems.php
:
'backup' => [
'driver' => 'local',
'root' => storage_path('backups'),
],
Далее в секции notifications
настраиваем оповещения о выполнении бэкапирования.
Для email достаточно указать адрес, на который будет отсылаться репорт (про настройки отправки почты можно прочитать в статье: Настройка почты через Gmail SMTP на Laravel).
Запуск бэкапирования
Процесс бэкапирования запускается командой:
php artisan backup:run
Если все настройки произведены корректно, то на указанном диске появится бэкап выбранных файлов и базы данных, а также будет отправлено уведомление на канал, указанный в настройках нотификации.
Настройка расписания
Бэкапирование необходимо выполнять автоматически, поэтому зададим расписание (например, ежедневно в 18:00) в файле: app/Console/Kernel.php
:
protected function schedule(Schedule $schedule)
{
$schedule->command('backup:run')->daily()->at('18:00');
}
Но данные команды сработают, только если у нас настроен cron
, который будет запускать их. Если cron
не был настроен, то выполним команду:
crontab -e
И добавим в конец файла строку с настройкой, как указано в документации (https://laravel.com/docs/master/scheduling):
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
После проделанных операций, бэкапирование будет запускаться каждый день в 18:00.
Настройка AWS S3
Люди делятся на два вида: те, кто не делает бэкапы, и те, кто уже делает.
Настроить бэкапирование на том же сервере не очень хорошая практика, т.к. при потере сервера потеряются и все бэкапы.
Поэтому мы настроим бэкапирование в облако AWS S3
, которое гарантирует 99,99999999999%
вероятность сохранности данных.
Для этого нам необходимо создать (приватный) bucket
https://s3.console.aws.amazon.com/s3/home:
Далее нам необходимо создать ключи доступа по адресу https://console.aws.amazon.com/iam/home:
Созданные ключи заносим в файл .env
:
BACKUP_EMAIL=
BACKUP_AWS_ACCESS_KEY_ID=
BACKUP_AWS_SECRET_ACCESS_KEY=
BACKUP_AWS_DEFAULT_REGION=
BACKUP_AWS_BUCKET=backups
BACKUP_AWS_URL
В файле настроек диска config/filesystems.php
производим изменения:
'backup' => [
'driver' => 's3',
'key' => env('BACKUP_AWS_ACCESS_KEY_ID'),
'secret' => env('BACKUP_AWS_SECRET_ACCESS_KEY'),
'region' => env('BACKUP_AWS_DEFAULT_REGION'),
'bucket' => env('BACKUP_AWS_BUCKET'),
'url' => env('BACKUP_AWS_URL'),
],
Теперь после сохранения бэкапы будут отправляться в облако AWS S3.
Если ранее не была настроена работа с AWS S3
, то понадобится установить composer пакет: https://github.com/thephpleague/flysystem-aws-s3-v3.
Дата редактирования : 2020-11-12 00:32:10
Автор : Rosko