feat(ops): обязательный backup БД и файлов перед деплоем

This commit is contained in:
2026-10-26 15:47:22 +03:00
parent de9535d35c
commit 7c45de8d9f
9 changed files with 447 additions and 12 deletions

View File

@@ -96,24 +96,38 @@ sudo certbot --nginx -d lms.our-place.ru --redirect -m admin@our-place.ru --agre
```bash
cd /opt/lms
git pull
./deploy/deploy.sh up # пересоберёт изменённые образы и перезапустит
./deploy/deploy.sh up # backup → сборка → миграции → перезапуск
```
Миграции БД (Flyway) применяются автоматически при старте сервисов.
`deploy.sh up` **обязательно** делает backup перед обновлением. Если backup
завершился ошибкой, деплой прерывается. Миграции БД (Flyway) применяются
автоматически при старте сервисов.
## 8. Резервное копирование
```bash
# БД
docker compose -f docker-compose.prod.yml --env-file .env.prod exec -T postgres \
pg_dump -U "$LMS_DB_USER" "$LMS_DB_NAME" | gzip > lms-$(date +%F).sql.gz
Полная инструкция — [`BACKUP.md`](BACKUP.md). Кратко:
# Файлы (решения и материалы)
docker run --rm -v lms_lms_submissions:/sub -v lms_lms_assets:/assets -v "$PWD":/backup alpine \
tar czf /backup/lms-files-$(date +%F).tar.gz -C / sub assets
```bash
./deploy/backup.sh backup # БД + решения + материалы
./deploy/backup.sh list
./deploy/backup.sh verify <dir>
./deploy/backup.sh restore <dir> # destructive, требует ввода RESTORE
```
Восстановление БД: `gunzip -c backup.sql.gz | docker compose ... exec -T postgres psql -U lms lms`.
Backup включает `pg_dump` БД, volume решений и volume материалов, контрольные
суммы и manifest. По умолчанию хранится 14 дней (`LMS_BACKUP_KEEP_DAYS`),
каталог — `/opt/lms/backups` (`LMS_BACKUP_DIR`).
Ежедневное расписание:
```bash
sudo cp deploy/systemd/lms-backup.service deploy/systemd/lms-backup.timer /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now lms-backup.timer
```
Backup на том же сервере — не единственная защита: настройте выгрузку на
отдельный хост и периодически проверяйте восстановление на staging.
## 9. Диагностика