Настройка бекапирования для 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:

aws s3 create bucket aws s3 create bucket step1 aws s3 create bucket step3

Далее нам необходимо создать ключи доступа в https://console.aws.amazon.com/iam/home:

iam

Созданные ключи заносим в файл .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-04-19 14:21:39
Автор :

Cookies and IP addresses allow us to deliver and improve our web content, resolve technical errors, and provide you with a personalized experience. Our website uses cookies and collects your IP address for these purposes.