Files

2.8 KiB

Настройка бекапов на сервере

Что бекапится

  • PostgreSQL → дамп каждую ночь → Backblaze B2
  • S3-файлы (Hetzner Object Storage) → синхронизация → Backblaze B2
  • Хранение: последние 7 дневных дампов БД + все файлы (sync зеркало)

Шаг 1 — Backblaze B2: создать bucket и ключи

  1. Зарегистрироваться на https://www.backblaze.com/b2/
  2. Buckets → Create a Bucket:
    • Name: lms-backups-second-brain
    • Files in Bucket are: Private
  3. App Keys → Add a New Application Key:
    • Name: lms-server
    • Access: Read and Write
    • Bucket: lms-backups-second-brain
    • Сохранить keyID и applicationKey — показываются один раз

Шаг 2 — Установить rclone на сервере

curl https://rclone.org/install.sh | sudo bash

Шаг 3 — Настроить rclone: Backblaze B2

rclone config

Ответы:

n  (новый remote)
name: b2lms
type: b2
account: <keyID из шага 1>
key: <applicationKey из шага 1>
<Enter для остальных — defaults>
q  (quit)

Шаг 4 — Настроить rclone: Hetzner S3

Значения берём из .env на сервере.

rclone config

Ответы:

n
name: hetzner
type: s3
provider: Other
env_auth: false
access_key_id: <S3_ACCESS_KEY>
secret_access_key: <S3_SECRET_KEY>
region: <пусто — Enter>
endpoint: <S3_ENDPOINT, например: fsn1.your-objectstorage.com>
<Enter для остальных>
q

Проверить:

rclone ls hetzner:lms-uploads

Шаг 5 — Установить скрипт

sudo mkdir -p /opt/lms-backup
sudo cp scripts/backup.sh /opt/lms-backup/backup.sh
sudo chmod +x /opt/lms-backup/backup.sh

Шаг 6 — Настроить cron

sudo crontab -e

Добавить строку (запуск каждую ночь в 3:00):

0 3 * * * /opt/lms-backup/backup.sh >> /var/log/lms-backup.log 2>&1

Шаг 7 — Проверить вручную

sudo /opt/lms-backup/backup.sh
tail -50 /var/log/lms-backup.log

Восстановление из бекапа

База данных

# Скачать нужный дамп с B2
rclone copy b2lms:lms-backups-second-brain/db/db_20260408_0300.sql.gz /tmp/

# Восстановить в контейнер
gunzip -c /tmp/db_20260408_0300.sql.gz \
  | docker exec -i lms-system-db-1 psql -U lms_user lms_db

Файлы

# Синхронизировать файлы обратно на Hetzner S3
rclone sync b2lms:lms-backups-second-brain/files hetzner:lms-uploads