Доки B23: README (010, password_history, таблица политики с колонкой «исполнение»), SETUP_GUIDE (cron бэкапа+purge, alembic 010, диагностика 400-пароль), чек-листы

This commit is contained in:
2026-09-25 09:58:23 +03:00
parent 2222b7ad5b
commit c6be70ce36
2 changed files with 42 additions and 19 deletions
+18 -3
View File
@@ -153,7 +153,7 @@ docker compose ps # все 4 контейнера Up/healthy
```bash
docker exec vector-backend sh -c 'cd /app/backend && alembic upgrade head'
docker exec vector-backend sh -c 'cd /app/backend && alembic current' # 009_e3_operations
docker exec vector-backend sh -c 'cd /app/backend && alembic current' # 010_b23_policy
```
Миграции идемпотентны на чистой БД. **Если** БД уже была инициализирована через create_all и `alembic upgrade` падает `DuplicateTable` — применить стемп-скрипт:
@@ -330,6 +330,18 @@ docker exec vector-postgres pg_dump -U postgres -d vector_mchs \
Рекомендация: ежедневный cron прикладного дампа (он небольшой) + еженедельный полный. Хранить копии вне сервера.
### Cron (рекомендуемый на сервере)
```cron
# 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
```
Проверка разового прогона: `docker exec vector-backend python -m backend.purge_logs`
→ `purge: {'audit_events': N, 'auth_events': N}` (0 — норма).
**Docker volume — не backup.** Если сервер умер вместе с диском, volume умер вместе с ним. Что подлежит резервному копированию:
```text
@@ -412,6 +424,8 @@ df -h && free -h # диск/память
### Диагностика по цепочке (начинать с места проблемы, не с перезапусков)
**Смена пароля даёт 400 «Пароль должен содержать буквы и цифры» / «совпадает с ранее использованным»** — это B23-политика (`security_settings`), не ошибка: с 25.09.2026 требования сложности и истории исполняются. Пароль, возвращённый ранее, отвергается, пока он в последних `password_history_count` записях.
**Бэкенд не подключается к БД** — цепочка `backend → docker network → postgres:5432 → authentication → vector_mchs`:
```bash
@@ -490,7 +504,7 @@ docker exec vector-postgres psql -U postgres -d vector_mchs -c \
- [ ] прикладные логи `vector.*` доступны (`docker compose logs backend`, файл в контейнере)
- [ ] аудит 90 дней читается (вкладка «Аудит», право `view_audit`)
- [ ] ретенция настроена в `security_settings`
- [ ] ретенция **исполняется**: cron purge-логов установлен, `python -m backend.purge_logs` даёт счётчики
### Backup
@@ -506,7 +520,8 @@ docker exec vector-postgres psql -U postgres -d vector_mchs -c \
- [ ] Код получен (`/root/vector`), `.env` создан из `.env.example`
- [ ] `JWT_SECRET` заменён на случайный; пароль БД сменён (compose + DATABASE_URL)
- [ ] `docker compose up -d` — 4 контейнера Up
- [ ] `alembic current` = `009_e3_operations`
- [ ] `alembic current` = `010_b23_policy`
- [ ] cron бэкапа И cron purge-логов настроены (`crontab -l`), первый дамп лежит в /root/backups
- [ ] `seed_users.py` выполнен, пароль админа сменён при первом входе
- [ ] `seed_units.py` выполнен (142 подразделения в селектах)
- [ ] PostGIS установлен в контейнере БД, extension создан