Библиотека для создания резервных копий сервера
Я тут написал библиотеку для создания резервных копий сервера на моём любимом 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, просто добавив такой класс-обработчик в соответствующую папку библиотеки.
Как использовать
- Заходим на сервер от рута,
- Проверяем версию 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.
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, мне будет приятно!
