Настроим резервное копирование сервера VDS с помощью утилиты duplicity на операционной системе CentOS 7. Для хранения резервных копий будем использовать Yandex Disk. Бэкапы защитим с помощью надежного шифрования OpenPGP. Возможность автоматического создания архивов.
Содержание:
Введение
В статье «Backup надежный и безопасный» в примере мы рассмотрели как настроить резервное копирование файлов и базы данных сайтов, но для полного спокойствия этого мало. Как правило, ресурсы предоставляющие VDS не делают резервных копий и заботится о безопасности приходится самим владельцам VDS. Мне гораздо спокойней перед любыми действиями с сервером создать полную резервную копию. Сюрпризы после обновления или настройкой могут вывести сервер из работы. Без резервной копии придется потратить много времени и нервов для восстановления работы сервера.
Установка Duplicity
Ознакомиться более детально с работой, настройкой и возможностями сервиса вы можете на официальном сайте производителя.
Установим репозиторий Epel без вопросов, если он не был установлен ранее:
yum -y install epel-release
Установим Duplicity без вопросов:
yum -y install duplicity
Создания ключа OpenPGP
Можно хранить резервные копии без шифрования, но мы рассмотрим вариант с защитой. Duplicity использует OpenPGP для шифрования.
Создадим необходимый ключ выполнив команду:
gpg --gen-key = вывод команды с пояснениями. Часть информации удалена. = Выберите требуемый тип ключа: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (только для подписи) (4) RSA (только для подписи) Ваш выбор (?-подробнее)? 1 ключи RSA могут иметь длину от 1024 до 4096 бит. Какой размер ключа необходим? (2048) Запрашиваемый размер ключа 2048 бит Выберите срок действия ключа. 0 = без ограничения срока действительности <n> = срок действительности n дней <n>w = срок действительности n недель <n>m = срок действительности n месяцев <n>y = срок действительности n лет Ключ действителен до? (0) Ключ не имеет ограничения срока действительности Все верно? (y/N) y GnuPG необходимо составить UserID в качестве идентификатора ключа. Ваше настоящее имя: sevo44 Email-адрес: test@sevo44.ru Комментарий: duplicity-backup Вы выбрали следующий User ID: "sevo44 (duplicity-backup) <test@sevo44.ru>" Сменить (N)Имя, (C)Комментарий, (E)email-адрес или (O)Принять/(Q)Выход? o Для защиты секретного ключа необходима фраза-пароль. !!! Ввводим пароль 2 раза и не забываем его !!! gpg: ключ 37D34631 помечен как абсолютно доверяемый. открытый и закрытый ключи созданы и подписаны. pub 2048R/37D34631 2017-05-08 Отпечаток ключа = 0AFF 9E2E 52DB 7ED2 480D 5DE2 971F 83F8 37D3 4631 uid sevo44 (duplicity-backup) <info@sevo44.ru> sub 2048R/C5730EC9 2017-05-08
Для создания ключа откройте новый терминал и делайте там любые действия. У меня генерация длилась минут 30.
Вот наш ID ключа 37D34631 который мы и будем использовать.
Обязательно сохраните ключ в надежное место и не забывайте пароль который указывали при создании ключа!
Подключение Yandex disk
Установим необходимый пакет:
yum -y install davfs2
Создадим папку куда будем монтировать:
mkdir /mnt/ydisk_backup_vds
Подключим Yandex Disk:
mount -t davfs https://webdav.yandex.ru /mnt/ydisk_backup_vds/ = вывод команды = Please enter the username to authenticate with server https://webdav.yandex.ru or hit enter for none. Username: test@sevo44.ru Please enter the password to authenticate user test@sevo44.ru with server https://webdav.yandex.ru or hit enter for none. Password: ******** /sbin/mount.davfs: Warning: can't write entry into mtab, but will mount the file system anyway
Для отмантирования диска:
umount /mnt/ydisk_backup_vds
Вводить каждый раз данные не удобно и мы настроим подключение без этих вопросов:
mcedit /etc/davfs2/secrets
= необходимые данные для добавления =
# Данные для подключения к Yandex Disk
/mnt/ydisk_backup_vds/ test@sevo44.ru password
Теперь при подключении не будет запроса логина и пароля.
Cсоздадим папку на сервере куда будем распаковывать из архива:
mkdir /restore
Все подготовительные действия выполнены и можно приступать к работе с сервисом.
Работа с Duplicity
Рассмотрим основные моменты работы с сервисом.
Ручное создание архивов
Можно настроить автоматическое монтирование Yandex Diska при загрузке сервера указав нужные параметры в файл /etc/fstab. Мне кажется это не разумно, но как именно настраивать решать только вам.
Создадим полный архив с помощью ключа и исключим папки не нужные для резервной копии.
Можно указать full для полной резервной копии. Если ничего не указывать то создастся вначале полный архив а последующие будут создаваться incremental.
Имейте в виду, что надо точно указать папку куда создаете резервную копию! Если ошибетесь то создаётся папка что указали.
Внимательно отнеситесь к папкам которые мы исключаем из резервного копирования! Настройте при необходимости под свои требования.
duplicity --encrypt-key=37D34631 --exclude=/restore --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/tmp --exclude=/var/spool --exclude=/var/cache --exclude=/var/tmp --exclude=/swap / file:///mnt/ydisk_backup_vds/backup_vds
= вывод команды =
Локальные и удалённые метаданные синхронизированы, синхронизация не требуется.
Время последней полной резервной копии: нету
Сигнатуры не найдены, переключение на полную резервную копию.
!!!! Процесс не быстрый, ждем !!!!
-------------[ Статистика резервного копирования ]-------------
StartTime 1494264679.29 (Mon May 8 20:31:19 2017)
EndTime 1494264988.55 (Mon May 8 20:36:28 2017)
ElapsedTime 309.26 (5 minutes 9.26 seconds)
SourceFiles 43662
SourceFileSize 1504877467 (1.40 GB)
NewFiles 43662
NewFileSize 1504877467 (1.40 GB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 43662
RawDeltaSize 1481346284 (1.38 GB)
TotalDestinationSizeChange 627905129 (599 MB)
Errors 0
Распакуем все что есть в папку restore:
duplicity --encrypt-key=37D34631 --file-to-restore / file:///mnt/ydisk_backup_vds/backup_vds /restore
= вывод команды =
Локальные и удалённые метаданные синхронизированы, синхронизация не требуется.
Время последней полной резервной копии: Mon May 8 20:42:33 2017
Кодовая фраза GnuPG: тот пароль что указывали при генерации ключа!
После появления строки приглашения консоли проверяем папку restore.
Если необходимо выдернуть из архива только определенные папки или файлы необходимо выполнить команду ( в нашем случае мы распаковали папки etc):
duplicity --encrypt-key=37D34631 --file-to-restore etc file:///mnt/ydisk_backup_vds/backup_vds /restore/etc
Полуавтоматическое создание архивов
Немного автоматизируем процесс работы с сервисом. Напишем скрипт который выполнит монтирование Yandex Disk, произведёт резервное копирование и отключать диск.
Создадим скрипты для бэкапа и восстановления в папку restore.
mcedit /root/duplicity_bakup.sh = необходимые данные = #!/bin/sh # Монтируем Yandex.Disk mount -t davfs https://webdav.yandex.ru /mnt/ydisk_backup_vds/ # Создаем резервную копию duplicity --encrypt-key=37D34631 --exclude=/restore --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/tmp --exclude=/var/spool --exclude=/var/cache --exclude=/var/tmp --exclude=/swap / file:///mnt/ydisk_backup_vds/backup_vds # Отключаем Yandex.Disk umount /mnt/ydisk_backup_vds/
mcedit /root/duplicity_restore.sh = необходимые данные = #!/bin/sh # Монтируем Yandex.Disk mount -t davfs https://webdav.yandex.ru /mnt/ydisk_backup_vds/ # Распаковываем архив в папку restore duplicity --encrypt-key=37D34631 --file-to-restore / file:///mnt/ydisk_backup_vds/backup_vds /restore # Отключаем Yandex.Disk umount /mnt/ydisk_backup_vds/
Дадим необходимые права файлам:
chmod +x /root/duplicity_bakup.sh chmod +x /root/duplicity_restore.sh
Для проверки можете запустить в консоли скрипты, указав полный путь к ним и убедится что все работает правильно.
Для постоянного автоматического резервного копирование можно добавить строчку в /etc/crontab и копии будет создаваться по расписанию.
Проверка и удаление архивов
Посмотрим информацию о резервных копиях в необходимом каталоге:
duplicity collection-status --encrypt-key=37D34631 file:///mnt/ydisk_backup_vds/backup_vds/ = вывод команды = Синхронизация удалённых метаданных с локальными временными файлами... Время последней полной резервной копии: Tue May 9 11:49:43 2017 Состояние сбора ----------------- Соединение с внутренним интерфейсом: BackendWrapper Папка архива: /root/.cache/duplicity/7662853acae7adf7fc3957d15d7c9b58 Найдено 0 вторичных цепочек резервных копий. Найдена первичная цепочка резервного копирования с соответствующей цепочкой подписи: ------------------------- Цепочка начата: Tue May 9 11:49:43 2017 Цепочка завершена: Tue May 9 11:49:43 2017 Количество содержащихся наборов резервного копирования: 1 Общее число содержащихся томов: 4 Тип резервной копии: Время: Число томов: Полная Tue May 9 11:49:43 2017 4 ------------------------- Отсутствуют изолированные или неполные наборы резервного копирования.
Удаление всех резервных копий кроме последней:
duplicity --encrypt-key=37D34631 remove-all-but-n-full 1 --force file:///mnt/ydisk_backup_vds/backup_vds/
Удаление копий старше 1 месяца:
duplicity --encrypt-key=37D34631 remove-older-than 1M file:///mnt/ydisk_backup_vds/backup_vds/
Есть команда для просмотра файлов в архиве но смысла выводить эту портянку просто нет. Гораздо быстрей восстановить все что надо в папку restore и спокойно с ней работать.
Результат
Данная утилита очень гибкая в настройке и позволяет использовать её в разных вариантах. Существуют готовые скрипты автоматизации управления которые у меня не получилось настроить да и незачем усложнять то что не надо. Шифрование архивов еще никому не вредило и сервис делает это просто и понятно.
Спасибо за подробную инструкцию, Алексей Николаевич! По ней создал и сконфигурировал скрипты.
Но возникла проблема. Можете подсказать решение?
Почему-то при создании бэкапа копируются только конфигурационные файлы на Яндекс (*sigtar.gpg, *.difftar.gpg, *manifest.gpg) весом меньше килобайта, но не сами зашифрованные файлы (задумка была синхронизировать архивы бэкапа, созданные системой (vestacp)).
Дополнительно при монтировании Яндекс.Диска запрашивается согласие использования сертификата Яндекса:
issuer: Yandex Certification Authority, Yandex LLC, RU
subject: Russian Federation, Moscow, ITO, Yandex LLC, RU
identity: webdav.yandex.ru
You only should accept this certificate, if you can
verify the fingerprint! The server might be faked
or there might be a man-in-the-middle-attack.
Accept certificate for this session? [y,N]
Но ведь вместе с файлами конфига должны копироваться и файлы назначенной директории в зашифрованном виде?
Пожалуйста 🙂 Никита, скорей всего проблема с путями для копируемой папки. В последствии я отказался от создания основных бэкапов на Yandex диск из за периодических ошибок. Использую Yandex диск лишь как третью копию, если это необходимо.
Запрос на сертификат один раз спрашивает или каждый раз?
Спрашивает каждый раз.
А на какую схему для удаленных бэкапов Вы перешли, если не секрет?
Скорей не схему а место хранения. Сайты бэкаплю по принципу как тут https://sevo44.ru/backup-sajta-na-jandeks-disk/. Dupliccity использую для бэкапа файловых помоек. Yandex диск использую. только как дополнительный вариант. Например, создаю почту клиенту и ложу туда бэкапы его сайта.