Документация
VPS

Резервные копии через restic + S3

Инициализация репозитория, cron, retention, тестовое восстановление.

6 мин

Резервные копии через restic + S3

restic — стандартный инструмент для инкрементальных зашифрованных бэкапов. Работает с любым S3-совместимым хранилищем. Этот гайд поднимает автоматический ежедневный backup за 15 минут.

Установка

apt update
apt install restic -y
restic version

S3-хранилище

Дёшево и надёжно — BackBlaze B2 ($0.005/GB/мес) или Wasabi ($0.007/GB/мес). Создайте bucket и application key с правами read+write на этот bucket.

Инициализация репозитория

Сохраните переменные окружения в /root/.restic-env (chmod 600!):

export RESTIC_REPOSITORY="s3:s3.us-west-002.backblazeb2.com/mybucket"
export RESTIC_PASSWORD="<длинный-случайный-пароль>"
export AWS_ACCESS_KEY_ID="<b2-key-id>"
export AWS_SECRET_ACCESS_KEY="<b2-key-secret>"

Пароль обязательно сохраните в менеджер паролей. Без него бэкапы не восстановить — restic шифрует всё AES-256.

Инициализация (один раз):

source /root/.restic-env
restic init

Первый full backup

source /root/.restic-env
restic backup /var/www /etc /home

Первый прогон может занять 10-30 минут для нескольких ГБ. Следующие — incremental, минуты.

Ежедневный cron

Создайте /usr/local/bin/restic-daily.sh:

#!/bin/bash
set -euo pipefail
source /root/.restic-env

# Дамп БД перед бэкапом
mysqldump --single-transaction --all-databases | \
  gzip > /var/backups/db-latest.sql.gz

restic backup /var/www /etc /home /var/backups

# Retention: 7 daily, 4 weekly, 12 monthly
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
chmod +x /usr/local/bin/restic-daily.sh

Cron-задача в /etc/cron.d/restic:

30 3 * * * root /usr/local/bin/restic-daily.sh >>/var/log/restic.log 2>&1

Уведомление о статусе

Оберните запуск в Healthchecks.io — если бэкап упал, вы получите alert:

30 3 * * * root /usr/local/bin/restic-daily.sh >>/var/log/restic.log 2>&1 && \
  curl -fsS -m 5 https://hc-ping.com/YOUR-UUID

Проверить, что бэкапы есть

source /root/.restic-env
restic snapshots

Увидите список snapshot-ов с датами. Каждый — точечная копия.

Восстановление

source /root/.restic-env

# Смонтировать бэкап как FS (посмотреть, что там)
mkdir /mnt/restic-restore
restic mount /mnt/restic-restore &
# ... смотрите файлы через ls/cat ...
# fusermount -u /mnt/restic-restore

# Восстановить последний snapshot целиком в /tmp/restore
restic restore latest --target /tmp/restore

# Восстановить конкретный файл
restic restore latest --target /tmp/restore --include /etc/nginx/nginx.conf

Тестовое восстановление — обязательно

Правило номер один: backup, который не восстанавливали хотя бы раз, — не существует. Раз в месяц:

1. Поднимите чистый VPS. 2. Установите restic, скопируйте /root/.restic-env. 3. restic restore latest --target /. 4. Убедитесь, что БД поднимается и сайт работает.

Что дальше