Резервные копии через restic + S3
restic — стандартный инструмент для инкрементальных зашифрованных бэкапов. Работает с любым S3-совместимым хранилищем. Этот гайд поднимает автоматический ежедневный backup за 15 минут.
Установка
apt update
apt install restic -y
restic versionS3-хранилище
Дёшево и надёжно — 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 --prunechmod +x /usr/local/bin/restic-daily.shCron-задача в /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. Убедитесь, что БД поднимается и сайт работает.