Скрипт резервного копирования сайта с шифрованием и выгрузкой на Яндекс.диск

Прошло некоторое время и замечательная утилита 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. Главное не забывать пароль!

Заказать создание и поддержку безопасной IT-инфраструктуры любой сложности

Быть уверенным в своей IT-инфраструктуре — это быть уверенным в завтрашнем дне.

Для того, чтобы сделать заказ:

Заполните форму обратной связи и мы обязательно с вам свяжемся:
Форма обратной связи
Позвоните нам по телефону:
+7(909)952-44-33
Напишите нам на электронную почту:
order@blackdiver.net
Напишите нам в Telegram:
Telegram
Другие способы связи Вы сможете найти в разделе Контакты.

4 мысли о “Скрипт резервного копирования сайта с шифрованием и выгрузкой на Яндекс.диск”

  1. Хранить пароль от всех сервисов яндекса в открытом виде не есть хорошо (лучше сказать совсем плохо). Почему бы не использовать OAuth токен и REST API?

    1. Эта статья рассчитывалась для новичков и не хотелось ее усложнять, поэтому вопрос серьезной безопасности не ставились. Да и под бекапы лучше использовать отдельные аккаунты. Все равно серьезные проекты бекапить будут по другому, но раз есть потребность в описании более безопасной схемы, без хранения паролей, то в ближайшее время напишу дополнение к статье.

    1. Я периодически чищу их вручную. Но можно и написать скрипт. Зная имена файлов и принцип их генерации это не сложно.