Доки B23-бэкап: SETUP_GUIDE §15 — скрипты backup/restore, грабля pg_wrapper PG18, выгрузка копий вне сервера, чек-лист
This commit is contained in:
+33
-3
@@ -336,12 +336,21 @@ docker exec vector-postgres pg_dump -U postgres -d vector_mchs \
|
||||
# 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
|
||||
# 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`
|
||||
→ `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 умер вместе с ним. Что подлежит резервному копированию:
|
||||
|
||||
```text
|
||||
@@ -350,9 +359,28 @@ docker exec vector-postgres pg_dump -U postgres -d vector_mchs \
|
||||
+ конфигурация 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 на отдельном стенде:
|
||||
файл читается → БД восстанавливается → 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
|
||||
|
||||
| Величина | Вопрос | Рекомендация для пилота |
|
||||
@@ -508,8 +536,10 @@ docker exec vector-postgres psql -U postgres -d vector_mchs -c \
|
||||
|
||||
### Backup
|
||||
|
||||
- [ ] cron прикладного дампа настроен, копии вне сервера
|
||||
- [ ] restore проверен на стенде
|
||||
- [ ] cron прикладного дампа настроен (`backup-app.sh`, 03:00), копии вне сервера
|
||||
- [ ] первый дамп лежит в `/root/backups/` и проверен `pg_restore --list`
|
||||
- [ ] restore проверен на стенде (`restore-app.sh`), counts совпали
|
||||
- [ ] копии выгружаются вне сервера (rsync на второй узел / NAS) — см. §15
|
||||
- [ ] RPO/RTO осознаны и приняты (§15)
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user