−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 дає копії на рівні файлів поза сервером, якими керуєте ви. Багато хто використовує обидва.

Коментарі

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

Залишити коментар

Коментарі проходять модерацію перед публікацією.