На главную сайта / Laravel - Бэкапы БД (Yandex)

Laravel - Бэкапы БД (Yandex)

21-03-2026, 22:41

Получите ключ аккаунта - YANDEX TOKEN 
Если не сработает по YANDEX TOKEN:

Инструкция: Получение Пароля Приложения

1. Перейдите по ссылке: https://id.yandex.ru/security/app-passwords (Вам может потребоваться снова войти в аккаунт).

2. Нажмите кнопку "Создать пароль" (или "+" / "Добавить").

3. В поле "Для какого приложения" выберите "Почта" (или просто напишите название, например "Laravel Backup" — разницы нет, WebDAV воспринимает их одинаково).

4. Нажмите "Создать".

5. Скопируйте полученный код (он будет выглядеть как набор случайных букв и цифр, обычно 16 символов, например: xk9d...2ab).

Настройка конфига .ENV:
YANDEX_DISK_PASSWORD=пароль приложения
(Если не срабатывает YANDEX_DISK TOKEN поставьте #YANDEX_DISK_TOKEN=0
YANDEX_DISK_TOKEN=ваш_очень_длинный_токен
YANDEX_DISK_LOGIN=ваш_email_или_логин_яндекса

Инструкция дополнительная:
Установите пакет Guzzle (Если у вас его нет) 

- Выполните команду : composer require guzzlehttp/guzzle
- Создание команды: php artisan make:command BackupToYandexDisk
- Замените файлом из архива в папке /app/Console/Commands/
- Настройте файл BackupToYandexDisk.php - backupFolder = 'Укажите свой путь до папки созданной в яндекс диске';
- Залейте из архива в папку storage : backups
- Выдайте права на папку backups - 777

Важно: Бэкапы хранятся дополнительно в /storage/backups


Настройка cron'a:

Чтобы планировщик Laravel работал, нужно добавить одну строку в crontab вашего сервера.

Выполните в консоли сервера: crontab -e 
Добавьте строку (замените пути на ваши): * * * * * cd /путь/к/вашему/проекту && php artisan schedule:run >> /dev/null 2>&1
Чтобы проверить, не дожидаясь ночи, выполните команду вручную: php artisan backup:yandex

Важные примечания:

1. Убедитесь, что на сервере установлен mysqldump (обычно идет вместе с mysql-server или mariadb-server).

2. Если база данных очень большая, скрипт может выполняться долго. Поставлен тайм-аут 300 секунд, при необходимости увеличьте его в коде (setTimeout).



Вернуться на сайт