СКРИПТ РЕЗЕРВНОГО КОПИРОВАНИЯ САЙТА С ШИФРОВАНИЕМ И ВЫГРУЗКОЙ НА ЯНДЕКС.ДИСК

Прошло некоторое время и замечательная утилита Grive для выгрузки файлов на Google Drive перестала корректно работать, в связи с чем перестало работать резервное копирование. Поэтому было решено использовать Яндекс.диск для хранения резервных копий, а он поддерживает работу по протоколу WebDAV, что сильно упрощает работу с ним.

Итак, создадим новый скрипт для резервного копирования.

Для его работы потребуются дополнительные утилиты: mysqldump, openssl, curl.

установим их:

Далее сам скрипт резервного копирования и пояснения к нему.

Разберем что делает этот скрипт:
Для начала задается набор переменных для удобства работы
Переменные описаны в комментариях, в самом скрипте. Поэтому повторяться не буду, а лучше опишу логику работы.

Сначала задается массив переменных для формирования имен файлов. Основные переменные это DATE (текущее время) и SITE_NAME (имя сайта для архива). Остальные переменные вспомогательные, для формирования имен файлов.

Потом задаем пути BACKUP_DIR (место хранения локальных резервных копий) и WEB_DIR (путь до файлов сайта).

После этого указываем реквизиты доступа к базе MySQL.

Пароль для архива хранится в переменной ARC_PASS.

И заканчиваем переменными для хранения реквизитов доступа к WebDAV серверу.

WEBDAV_USER — имя пользователя (для Яндекс.диска указывается целиком в формате имя_пользователя@yandex.ru)
WEBDAV_PASS — пароль
WEBDAV_DIR — конечный путь сохранения файлов. Указывается вместе с папками на удаленном сервере ( для резервных копий на Яндекс.диске была создана папка backup. Адрес WebDAV сервера Яндекс.диска: https://webdav.yandex.ru/)

Далее мы меняем рабочую директорию на место хранения резервных копий.
Описание этих команд есть в предыдущей статье: Резервное копирование MySQL и всех файлов web сервера
Создаем резервную копию базы данных и записываем ее в файл.
Создаем не сжатую резервную копию всех файлов (tar с опциями -cf).
Далее берем файл резервной комии БД и файл резервной копии файлов и создаем из них один общий сжатый (tar с опциями -czf) архив.

Далее шифруем получившийся архив с помощью OpenSSL.
Параметры OpenSSL:
enc — режим шифрования
-e — указываем, что будем шифровать файл
-aes-256-cbc — указываем алгоритм шифрования
-k — указываем пароль шифрования
-in — файл, который будем шифровать
-out — файл который получится после шифрования.

Теперь вызываем curl и подключаемся к WebDAV серверу.
—user — передаем имя пользователя в формате имя_пользователя:пароль
-T — загрузить файл
и указываем путь к серверу WebDAV.

Остается только стереть лишнее. Оставим локально только незашифрованную копию, остальное сотрем командой rm.

После создания скрипта его нужно добавить в cron для автоматического выполнения по расписанию, как это сделать описывается в статье Добавление задачи в cron.

Резервное копирование на внешний сервер настроено, остается только рассказать, как расшифровывать архив.
Для расшифровки архива нам так же потребуется утилита openssl, но параметр -e (зашифровать) изменится на параметр -d (расшифровать).

Соответственно расшифровывать будем командой:

получив на выходе обычный архив tar.gz. Главное не забывать пароль!