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

3.7 KiB
Raw Permalink Blame History

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 его быть не должно (чужие данные).

Чеклист

  • 1. Шаблон репо deploy/docker-compose.yml приведён к прод-файлу (контейнер/том/порт прода). Добавлен deploy/shared-postgres/docker-compose.yml как документация соседнего compose-проекта (управляется отдельно).
  • 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.
  • 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 не наш».
  • 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 вне скоупа.