4.2 KiB
Резервное копирование LMS
Резервное копирование обязательно:
- перед каждым обновлением (
./deploy/deploy.sh upделает backup автоматически); - ежедневно по расписанию (systemd timer);
- перед миграциями и любыми ручными изменениями схемы/данных.
Что входит в backup
Один каталог backups/lms-<UTC timestamp>/:
| Файл | Содержимое |
|---|---|
db.dump |
pg_dump --format=custom всей БД lms |
submissions.tar.gz |
volume lms_lms_submissions — решения студентов |
assets.tar.gz |
volume lms_lms_assets — файлы материалов |
SHA256SUMS |
контрольные суммы |
manifest.txt |
дата, БД, пользователь, проект, retention |
Каталоги бэкапов создаются с правами 700: внутри персональные данные.
Настройки
В .env.prod:
LMS_BACKUP_DIR=/opt/lms/backups
LMS_BACKUP_KEEP_DAYS=14
LMS_BACKUP_KEEP_DAYS — сколько дней хранить. 0 отключает автоудаление.
Ручные команды
./deploy/backup.sh backup # создать backup
./deploy/backup.sh backup --if-running # пропустить, если стек не запущен
./deploy/backup.sh list # список backup-каталогов
./deploy/backup.sh verify <dir> # проверить суммы и целостность
./deploy/backup.sh restore <dir> # восстановить (destructive)
restore требует ввести RESTORE, останавливает прикладные сервисы,
пересоздаёт БД, восстанавливает файлы и поднимает стек. PostgreSQL при этом
не удаляется.
Автоматически перед обновлением
deploy/deploy.sh up вызывает:
./deploy/backup.sh backup --if-running
Если стек ещё не запущен (первый деплой), шаг пропускается. Если backup завершился ошибкой — деплой прерывается.
Ежедневное расписание (systemd)
sudo cp deploy/systemd/lms-backup.service /etc/systemd/system/
sudo cp deploy/systemd/lms-backup.timer /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now lms-backup.timer
systemctl list-timers lms-backup.timer
По умолчанию — каждый день в 03:00 с разбросом до 30 минут. Persistent=true
означает, что пропущенный запуск выполнится после включения сервера.
Если systemd недоступен, cron:
0 3 * * * cd /opt/lms && ./deploy/backup.sh backup >>/var/log/lms-backup.log 2>&1
Восстановление
./deploy/backup.sh verify /opt/lms/backups/lms-20261023T030000Z
./deploy/backup.sh restore /opt/lms/backups/lms-20261023T030000Z
Проверка после восстановления:
./deploy/deploy.sh ps
curl -fsS http://127.0.0.1:8090/actuator/health
Внешняя копия
Backup на том же сервере не защищает от потери сервера. Настройте выгрузку:
rsync -a --delete /opt/lms/backups/ backup-host:/srv/lms-backups/
Требования:
- шифрование при передаче и хранении (backups содержат ПДн);
- отдельный хост/хранилище;
- проверка восстановления не реже раза в месяц на staging;
- не хранить backup в git и в каталоге проекта без
.gitignore.
Проверка
Минимум раз в месяц:
./deploy/backup.sh verify <dir>.- Развернуть копию на staging.
- Восстановить БД и файлы.
- Проверить вход, группу, лабу, сдачу и скачивание файла.