OffshoreVps
Безопасность8 окт. 20268 мин чтенияАвтор: команда OffshoreVps

Как делать резервные копии VPS с помощью restic: автоматически и с шифрованием

Правило 3-2-1, что копировать, настройка restic с шифрованием, cron-скрипт и почему обязательно проверять восстановление. Снимков от провайдера недостаточно.

VPS может выйти из строя, быть удалён по ошибке или сломан неудачным обновлением. Единственная защита — проверенная резервная копия. В этом руководстве настраиваются простые автоматизированные зашифрованные резервные копии с помощью бесплатных инструментов.

Окно терминала на VPS с командами для резервного копирования VPS, начиная с «sudo apt install -y restic»
Примерно такие команды вы будете выполнять на своём сервере в этом руководстве.

Правило 3-2-1

Храните 3 копии данных на 2 разных типах носителей и 1 копию в совсем другом месте. Для VPS это обычно означает рабочие данные, локальный снимок и внешнюю копию у другого провайдера или в другой стране.

Что копировать

  • Файлы сайта и загрузки (/var/www).
  • Базы данных, предварительно выгруженные в файл (никогда не копируйте файлы работающей базы данных).
  • Конфигурация: /etc/nginx, изменения в /etc, файлы Docker Compose и тома.
  • Задания cron и любые собственные скрипты.

Операционную систему можно переустановить за считанные минуты. Невозможно переустановить ваши данные и настройки.

Используйте restic для зашифрованных копий с дедупликацией

sudo apt install -y restic
export RESTIC_REPOSITORY=sftp:backup@other-server:/backups/vps1
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init

Создайте файл с паролем, используя длинную случайную строку, и сохраните копию в надёжном месте. Если вы потеряете этот пароль, копии нельзя будет открыть. restic также поддерживает S3-совместимые хранилища, поэтому можно отправлять копии в любое объектное хранилище.

Шаги этого руководства по порядку: 1. Правило 3-2-1; 2. Что копировать; 3. Используйте restic для зашифрованных копий с дедупликацией; 4. Скрипт резервного копирования; 5. Проверьте восстановление; 6. Снимки помогают, но их недостаточно
Шаги этого руководства по порядку.

Скрипт резервного копирования

#!/bin/bash
set -e
export RESTIC_REPOSITORY=sftp:backup@other-server:/backups/vps1
export RESTIC_PASSWORD_FILE=/root/.restic-pass

mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
restic backup /var/www /etc /var/backups/db.sql.gz
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

Сохраните его как /usr/local/bin/backup.sh, сделайте исполняемым и запланируйте:

sudo chmod +x /usr/local/bin/backup.sh
echo "30 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1" | sudo tee /etc/cron.d/backup

Проверьте восстановление

restic snapshots
restic restore latest --target /tmp/restore-test --include /etc/nginx

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

Снимки помогают, но их недостаточно

Снимки провайдера быстры и удобны перед рискованными изменениями, но они находятся у того же провайдера и в том же аккаунте. Считайте их удобством и храните независимую внешнюю копию.