Я тут написал библиотеку для создания резервных копий сервера на моём любимом PHP. Хочу поделиться с вами!

Что умеет:
* Поддерживает 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, просто добавив такой класс-обработчик в соответствующую папку библиотеки.

Как использовать

  1. Заходим на сервер от рута,
  2. Проверяем версию PHP для консоли (нужно >=7.1.3) php -v, если ниже — устанавливаем требуемую.
  3. Создаём папку, в которой будет лежать приложение и заходим в неё, например:
    /root/scripts/dumper/
  4. Устанавливаем библиотеку: composer require gvozdb/dumper, если нет Composer — устанавливаем и его.
  5. Создаём файл cron.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);
    }
  6. Там же создаём конфиг-файл приложения 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.
  7. Заходим в корень каждого юзера, которого хотим бекапить и создаём конфиг-файл dumper.yaml
    # Включить
    enabled: true
    
    # Доступ к БД
    database:
        type: 'mysql'
        port: 3306
        host: 'localhost'
        name: 'dbname'
        user: 'dbuser'
        pass: 'dbpassword'
    
    # Массив папок для исключения
    # указывается от корня юзера
    exclude: [
        '/www/core/cache/*',
      ]
    
    Настраиваем для каждого юзера отдельно.
  8. Запускаем php /root/scripts/dumper/cron.php и следим, происходит ли выгрузка в хранилище.
  9. Если всё OK — прописываем задание в cron:
    0 2 * * * php /root/scripts/dumper/cron.php

P.S.

С удовольствием приму критику относительно кода библиотеки. И, конечно, ставьте звёздочки на GitHub, мне будет приятно!