Что умеет:
* Поддерживает MySQL
* Сжимает в Zip
* Выгружает на Яндекс.Диск
Что выгружает:
* Юзеров, у которых есть конфиг dumper.yaml в корне
* Папки /root/ и /etc/
* Логи
Вроде бы, всё так-же, как было в старом древнем YaDiskBackuper на Python, но!
Dumper работает быстрее, стабильнее, устанавливается через Composer. Помимо этих существенных преимуществ, Dumper читает конфиги в корневой директории юзера и если не находит, то юзер не бекапится.
В конфиге юзера нужно указать доступ к БД и можно указать папки, которые исключить из бекапа.
Например, у нас есть большой сайт (10 ГБ) с кучей картинок, которые хранятся в /assets/images/ (9.9 ГБ). Мы просто добавим эту папку в исключения:
... exclude: [ '/www/assets/images/*', ]и в хранилище будет выгружаться 0.1 ГБ + база данных.
Что ещё?
Я предусмотрел расширение функциональности приложения.- Помимо Яндекс.Диск можно добавить любое другое хранилище. Делается это довольно просто для посвящённого в программирование на PHP.
- Кроме MySQL можно добавить поддержку ещё чего угодно!
- А архивирование в Zip легко можно заменить на какой-нибудь GZip, просто добавив такой класс-обработчик в соответствующую папку библиотеки.
Как использовать
- Заходим на сервер от рута,
- Проверяем версию PHP для консоли (нужно >=7.1.3) php -v, если ниже — устанавливаем требуемую.
- Создаём папку, в которой будет лежать приложение и заходим в неё, например:
/root/scripts/dumper/
- Устанавливаем библиотеку: composer require gvozdb/dumper, если нет Composer — устанавливаем и его.
- Создаём файл cron.php:
<?php use Gvozdb\Dumper; require __DIR__ . '/vendor/autoload.php'; try { $config = new Dumper\Config\Load(__DIR__ . '/config.yaml'); $backup = new Dumper\Backup($config); $backup->run(); } catch (Exception $e) { print_r($e->getMessage() . PHP_EOL); }
- Там же создаём конфиг-файл приложения config.yaml
main: prefix: "%Y%m%d-" # префикс для названия архивов expires: &main.expires 4 # сколько дней хранить clean_logs: true # чистить старые логи path: tmp: '/tmp/dumper/%Y%m%d/' # временная папка на сервере users: '/var/www/' # директория с юзерами root: '/root/' # директория root log: '/var/log/' # директория логов etc: '/etc/' # директория etc # Хранилища storages: YandexDisk: token: 'AQAAAAABEJ2-AAVH0ERr79Yz4E5dpd-7nhV1W18' # токен хранилища path: 'disk:/Dumper/%Y%m%d/' # где хранить expires: *main.expires # сколько дней хранить для конкретного хранилища
Настраиваем конфиг под свой сервер.
Как получить токен Яндекс.Диск, описано в шапке класса YandexDisk. - Заходим в корень каждого юзера, которого хотим бекапить и создаём конфиг-файл dumper.yaml
# Включить enabled: true # Доступ к БД database: type: 'mysql' port: 3306 host: 'localhost' name: 'dbname' user: 'dbuser' pass: 'dbpassword' # Массив папок для исключения, указывается от корня юзера exclude: [ '/www/core/cache/*', ]
Настраиваем для каждого юзера отдельно. - Запускаем php /root/scripts/dumper/cron.php и следим, происходит ли выгрузка в хранилище.
- Если всё OK — прописываем задание в cron:
0 2 * * * php /root/scripts/dumper/cron.php