−25%

на годовую оплату Windows, до 31.10. К тарифам

EQVPS

Бэкап VPS с помощью restic: шифрование и копия вне сервера

Зашифрованные бэкапы VPS с дедупликацией через restic: репозиторий в S3-совместимом хранилище или на другом сервере, таймер systemd, ротация и проверка восстановления.

Бэкапы есть у всех — пока не попробуешь что-нибудь восстановить. Каталог оказывается пустым, cron-задача умерла ещё в марте, а архив лежит на том самом диске, который только что отказал. restic закрывает почти все эти проблемы: шифрует на вашей стороне, хранит каждый кусок данных один раз и позволяет восстановить один файл так же просто, как забэкапить весь сервер.

Вот настройка, которой мы бы доверились сами, на Ubuntu или Debian.

1. Ставим restic

apt update && apt install -y restic
restic self-update

Пакеты в дистрибутивах отстают; self-update подтянет актуальную версию.

2. Выбираем место для репозитория

Репозиторий не должен жить на сервере, который вы защищаете. Два частых варианта:

3. Сохраняем учётные данные

Держим всё в одном файле, доступном только root, чтобы таймер и ваша оболочка использовали одни настройки:

cat > /root/.restic-env <<'EOF'
export RESTIC_REPOSITORY="s3:https://s3.example.com/my-bucket/web1"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export AWS_ACCESS_KEY_ID="your-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret"
EOF
openssl rand -base64 32 > /root/.restic-pass
chmod 600 /root/.restic-env /root/.restic-pass

Теперь скопируйте содержимое /root/.restic-pass в менеджер паролей. Без него бэкапы не расшифровать — ни вам, ни кому-то ещё.

4. Инициализируем и делаем первый бэкап

source /root/.restic-env
restic init
restic backup /etc /home /root /srv /var/www \
  --exclude-caches --exclude '/root/.cache'
restic snapshots

Поправьте пути под то, где реально лежат ваши данные. Тома Docker находятся в /var/lib/docker/volumes, данные приложений часто — в /srv или /opt.

5. Базы данных: сначала дамп, потом бэкап

Не бэкапьте сырые файлы работающей базы. Сделайте дамп прямо перед бэкапом:

mkdir -p /var/backups/db
sudo -u postgres pg_dump -Fc mydb > /var/backups/db/mydb.dump

Добавьте /var/backups/db в пути бэкапа. Подробнее о дампах — в нашей инструкции по PostgreSQL.

6. Расписание через systemd

Таймер здесь лучше cron: он пишет в журнал и догоняет пропущенный запуск, если сервер был выключен.

# /etc/systemd/system/restic-backup.service
[Unit]
Description=restic backup

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'source /root/.restic-env && restic backup /etc /home /root /srv /var/www /var/backups/db --exclude-caches && restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune'
# /etc/systemd/system/restic-backup.timer
[Unit]
Description=Daily restic backup

[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true

[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer

forget --prune оставляет 7 ежедневных, 4 еженедельных и 6 ежемесячных снимков, остальное удаляет. Если нужен дамп базы, вынесите его в строку ExecStartPre=.

7. Действительно восстановите что-нибудь

Этот шаг превращает «бэкапы у нас есть» в факт. Вытащите один каталог во временную папку и посмотрите на него:

source /root/.restic-env
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls -la /tmp/restore-test/etc/nginx
restic check

Сделайте это сейчас и потом повторяйте раз в несколько месяцев. restic check проверяет структуру репозитория, а восстановление доказывает, что данные там действительно есть.

restic и Managed Backups

Они не конкурируют. Managed Backups делают ежедневную точку восстановления всего сервера с откатом из личного кабинета — быстрое лекарство после неудачного обновления. Стоят $2 в месяц и бесплатно входят в любой годовой тариф. restic даёт копии на уровне файлов в хранилище, которым управляете вы, — это важно, когда пропал файл с прошлого вторника или хочется иметь копию полностью вне нашей инфраструктуры.

Если храните чувствительные данные, добавьте полное шифрование диска, а для собственного хранилища бэкапов посмотрите сценарий с зашифрованным хранилищем. Большинству небольших серверов вместе с бэкапами хватает тарифа Micro.

Частые вопросы

Что будет, если потерять пароль restic?

Бэкапы пропадут навсегда. restic шифрует всё на стороне клиента, ключа восстановления нет. Храните пароль в менеджере паролей, а не только на сервере, который бэкапите.

Где держать репозиторий?

Где угодно, кроме самого сервера: в S3-совместимом объектном хранилище, на другом VPS по SFTP или на машине дома. Бэкап на том же диске умрёт вместе с диском.

Как бэкапить базу данных через restic?

Сначала сделайте дамп и бэкапьте его — для PostgreSQL 'pg_dump -Fc', для MySQL 'mysqldump --single-transaction'. Копирование файлов работающей базы может дать бэкап, из которого она не запустится.

Сколько места занимают бэкапы?

Меньше, чем кажется. restic режет файлы на блоки и хранит каждый блок один раз, поэтому ежедневные снимки почти не меняющегося сервера добавляют только изменения.

Нужны ли тогда Managed Backups?

Они решают разные задачи. Managed Backups дают ежедневные точки восстановления всего сервера с откатом из личного кабинета. restic даёт копии на уровне файлов вне сервера, которыми управляете вы. Многие используют оба.

Комментарии

Пока нет комментариев. Будьте первым.

Оставить комментарий

Комментарии проходят модерацию перед публикацией.