Доки B23-бэкап: SETUP_GUIDE §15 — скрипты backup/restore, грабля pg_wrapper PG18, выгрузка копий вне сервера, чек-лист

This commit is contained in:
2026-09-25 10:08:06 +03:00
parent 9b6659a85a
commit 1fdcc04af6
+33 -3
View File
@@ -336,12 +336,21 @@ docker exec vector-postgres pg_dump -U postgres -d vector_mchs \
# 03:10 — ретенция журналов (удаление audit_events/auth_events старше audit_retention_days) # 03:10 — ретенция журналов (удаление audit_events/auth_events старше audit_retention_days)
10 3 * * * docker exec vector-backend python -m backend.purge_logs >> /var/log/vector-purge.log 2>&1 10 3 * * * docker exec vector-backend python -m backend.purge_logs >> /var/log/vector-purge.log 2>&1
# 03:00 — прикладной дамп (planet_osm_* исключены; OSM восстанавливается b16-import.sh) # 03:00 — прикладной дамп (planet_osm_* исключены; OSM восстанавливается b16-import.sh)
0 3 * * * docker exec vector-postgres pg_dump -U postgres -d vector_mchs --exclude-table="planet_osm_*" -F c -f /tmp/vector_app_$(date +\%F).dump && docker cp vector-postgres:/tmp/vector_app_$(date +\%F).dump /root/backups/ && find /root/backups -name vector_app_*.dump -mtime +14 -delete >> /var/log/vector-backup.log 2>&1 0 3 * * * /root/vector/scripts/backup-app.sh >> /var/log/vector-backup.log 2>&1
``` ```
`backup-app.sh` (в репо, `scripts/`) делает: дамп прикладных таблиц → выгрузка в
`/root/backups/` → архив `.env` + `docker-compose.yml` (chmod 600) → проверка
оглавления через pg_restore → чистка старше 14 дней.
Проверка разового прогона: `docker exec vector-backend python -m backend.purge_logs` Проверка разового прогона: `docker exec vector-backend python -m backend.purge_logs`
→ `purge: {'audit_events': N, 'auth_events': N}` (0 — норма). → `purge: {'audit_events': N, 'auth_events': N}` (0 — норма).
**Грабля pg_wrapper PG18** (реальный прогон на CT108, postgres:16): `pg_dump`/`pg_restore`
без пути — это клиент PG18. `pg_dump 18` создаёт архив версии 1.16, который `pg_restore 16`
не читает (`unsupported version`), и пишет `SET transaction_timeout`, отсутствующий в
PG16-сервере. Оба скрипта используют только `/usr/lib/postgresql/16/bin/pg_*`.
**Docker volume — не backup.** Если сервер умер вместе с диском, volume умер вместе с ним. Что подлежит резервному копированию: **Docker volume — не backup.** Если сервер умер вместе с диском, volume умер вместе с ним. Что подлежит резервному копированию:
```text ```text
@@ -350,9 +359,28 @@ docker exec vector-postgres pg_dump -U postgres -d vector_mchs \
+ конфигурация compose + конфигурация compose
``` ```
`backup-app.sh` покрывает БД и конфигурацию. **Копии должны уходить с сервера** —
иначе гибель LXC/диска убивает и бэкапы. Варианты (по возрастанию надёжности):
1. rsync на второй Proxmox-узел по SSH (минимум для пилота):
`rsync -az -e ssh /root/backups/ <второй-узел>:/root/backups/vector/` — добавить в backup-app.sh
2. Syncthing/NAS (в инфраструктуре Виктора NAS уже есть)
3. Для боевого контура МЧС — сетевой шарой организации
**Backup ≠ восстановление.** Копия проверяется периодическим restore на отдельном стенде: **Backup ≠ восстановление.** Копия проверяется периодическим restore на отдельном стенде:
файл читается → БД восстанавливается → backend подключается → расчёт выполняется. Непроверенный restore — это не стратегия, а файл с именем «backup». файл читается → БД восстанавливается → backend подключается → расчёт выполняется. Непроверенный restore — это не стратегия, а файл с именем «backup».
### Восстановление
```bash
/root/vector/scripts/restore-app.sh /root/backups/vector_app_<дата>.dump
```
Скрипт: `--clean --if-exists` (пересоздание объектов из дампа) + TOC без
EXTENSION postgis (иначе дропает postgis и падает на зависимостях planet_osm_*).
OSM-таблицы не трогает (их в дампе нет). Проверено на CT108: restore → counts
(cases/users/audit/password_history) совпали → login ok → analyze 200.
### RPO и RTO ### RPO и RTO
| Величина | Вопрос | Рекомендация для пилота | | Величина | Вопрос | Рекомендация для пилота |
@@ -508,8 +536,10 @@ docker exec vector-postgres psql -U postgres -d vector_mchs -c \
### Backup ### Backup
- [ ] cron прикладного дампа настроен, копии вне сервера - [ ] cron прикладного дампа настроен (`backup-app.sh`, 03:00), копии вне сервера
- [ ] restore проверен на стенде - [ ] первый дамп лежит в `/root/backups/` и проверен `pg_restore --list`
- [ ] restore проверен на стенде (`restore-app.sh`), counts совпали
- [ ] копии выгружаются вне сервера (rsync на второй узел / NAS) — см. §15
- [ ] RPO/RTO осознаны и приняты (§15) - [ ] RPO/RTO осознаны и приняты (§15)
--- ---