food-market/docs/shared-postgres-followup-progress.md
nns c4a59d7bf2
Some checks failed
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Docker Public / Build + push Public (test + latest) (push) Has been cancelled
Docker Web / Build + push Web (push) Has been cancelled
Docker Public / Deploy :test → test.food-market.kz (push) Has been cancelled
Docker Web / Deploy Web on stage (push) Has been cancelled
docs(prod): репа догоняет новую раскладку postgres на prod-vm
05.10.2026 общий postgres-инстанс с чужими боевыми базами (sklad, purchase,
calcman, calcman_staging, makesales + мусорная старая food_market) вынесен
из compose прода food-market в отдельный compose-проект shared-postgres
(контейнер shared-postgres, порт 5434, том food-market-postgres-data external).
Прод food-market поднимается в собственный контейнер food-market-prod-postgres
(порт 5437, том food-market-prod-postgres-data). Простой при разделении — 12с,
соседи живы. См. docs/shared-postgres-followup-progress.md.

Этот коммит синхронизирует репозиторий, чтобы следующий деплой из main не
воскресил старую раскладку:

- deploy/docker-compose.yml: container_name/port/volume приведены к прод-файлу
  (food-market-prod-postgres, 127.0.0.1:5437, food-market-prod-postgres-data).
- deploy/shared-postgres/ (новое): документационная копия соседнего compose'а,
  с явной пометкой «food-market им не управляет».
- deploy/food-market-backup.sh / anonymize-prod.sh / db-schema-diff.sh:
  defaults FM_PG_CONTAINER / FM_PROD_CONT = food-market-prod-postgres.
- docs/RUNBOOK.md: новый раздел «Postgres на prod-vm» с таблицей трёх
  инстансов и явным запретом трогать shared-postgres из наших скриптов.
- docs/backup-restore.md: контейнер в таблице и примерах — новый.

Guards (не в репе — живут в ~/deploy-stage.sh и ~/quality-watchdog.sh)
расширены симметрично: стенду запрещены shared-postgres, food-market-prod-
postgres[-data], 5434/5437; проду — food-market-postgres-data (чужие данные).
Проверка: docker compose config/ps на prod-vm shared-postgres не упоминают,
grep по репе — ни один скрипт не делает docker exec в shared-postgres.
2026-10-06 00:35:54 +05:00

25 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# shared-postgres follow-up: репозиторий ↔ новая раскладка postgres прода
**Задача.** 2026-10-05 координатор физически разделил два инстанса postgres на prod-vm:
- `shared-postgres` (`~/shared-postgres/docker-compose.yml`, контейнер `shared-postgres`, порт `127.0.0.1:5434`, том `food-market-postgres-data` *external*). Внутри — ЧУЖИЕ боевые базы: `sklad`, `purchase`, `calcman`, `calcman_staging`, `makesales`, плюс мусорная старая `food_market` (повреждена, не восстанавливаем). Проект compose — `shared-postgres`, не наш, живёт отдельно.
- `food-market-prod-postgres` (`~/food-market/deploy/docker-compose.yml` на prod-vm, контейнер `food-market-prod-postgres`, порт `127.0.0.1:5437`, том `food-market-prod-postgres-data`). Это НОВЫЙ собственный postgres прода food-market. Пока не запущен — прод-API лежит.
Старый compose прода (project `deploy`, контейнер `food-market-postgres`, том `food-market-postgres-data` на тех же данных) **более не существует**. Простой при разделении — 12 секунд, соседи живы. Бэкап: `docker-compose.yml.bak-20261005` на prod-vm.
Теперь нужно догнать репозиторий (шаблоны, guards, скрипты, доки), чтобы следующий деплой из main не воскресил старую раскладку, а любой `docker exec` в `shared-postgres` из кода food-market был бы невозможен.
**Правила на будущее**
- Прод food-market использует `food-market-prod-postgres` / том `food-market-prod-postgres-data` / порт `127.0.0.1:5437`.
- `shared-postgres` **не принадлежит проекту food-market**. Его `container_name`, том и порт — запрещённые паттерны в наших compose/скриптах.
- Том `food-market-postgres-data` — исторический для `shared-postgres`, в food-market compose его быть не должно (чужие данные).
## Чеклист
- [x] 1. Шаблон репо `deploy/docker-compose.yml` приведён к прод-файлу (контейнер/том/порт прода). Добавлен `deploy/shared-postgres/docker-compose.yml` как документация соседнего compose-проекта (управляется отдельно).
- [x] 2. Guards расширены: `~/deploy-stage.sh` и `~/quality-watchdog.sh` (+их копии в репо, если есть) запрещают стенду `shared-postgres`, `food-market-prod-postgres`, `food-market-prod-postgres-data`, порты `5434`/`5437`; проду — том `food-market-postgres-data`.
- [x] 3. Скрипты и доки: `deploy/food-market-backup.sh`, `deploy/anonymize-prod.sh`, `deploy/db-schema-diff.sh`, `docs/RUNBOOK.md`, `docs/backup-restore.md` указывают на `food-market-prod-postgres` вместо старого `food-market-postgres`; RUNBOOK явно говорит «shared-postgres не наш».
- [x] 4. Проверка на prod-vm: `docker compose -f ~/food-market/deploy/docker-compose.yml config` и `docker compose ps -a` не упоминают `shared-postgres`; `grep` по репе — ни один скрипт не делает `docker exec` в `shared-postgres`.
Прод не запускается, `shared-postgres` и чужие базы не трогаются, `global.json` и gateway nginx вне скоупа.