From a7b8bbc59324d6192e019b5ea5c811aa6d8227b3 Mon Sep 17 00:00:00 2001 From: nns Date: Fri, 9 Oct 2026 19:21:38 +0500 Subject: [PATCH] =?UTF-8?q?feat(prod):=20compose=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=D0=B8=D0=B4=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=20SEED=5FSUPER?= =?UTF-8?q?ADMIN=5FPASSWORD/SEED=5FDEMO=5FDATA=20+=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B3=D1=80=D0=B5=D1=81=D1=81=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- deploy/docker-compose.yml | 5 +++++ docs/prod-launch-progress.md | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 docs/prod-launch-progress.md diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index e42982c..cf169d5 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -67,6 +67,11 @@ services: # выключен (см. QuickLoginOptions.EffectivelyEnabled). QuickLogin__Enabled: ${QUICK_LOGIN_ENABLED:-false} QuickLogin__MasterPassword: ${QUICK_LOGIN_MASTER_PASSWORD:-} + # Прод: начальный SuperAdmin (DevDataSeeder) и отключение демо-данных для + # чистого (пустого) старта. На проде SEED_DEMO_DATA=false → без «Demo Market». + # Пустой SEED_SUPERADMIN_PASSWORD = SuperAdmin не сидируется (безопасный дефолт). + SEED_SUPERADMIN_PASSWORD: ${SEED_SUPERADMIN_PASSWORD:-} + SEED_DEMO_DATA: ${SEED_DEMO_DATA:-} # Host port mapping: pick free ports on existing stage server (80/443 taken by # legacy nginx, 5000/5002/5005 taken by legacy .NET apps). ports: diff --git a/docs/prod-launch-progress.md b/docs/prod-launch-progress.md new file mode 100644 index 0000000..8d2ec5e --- /dev/null +++ b/docs/prod-launch-progress.md @@ -0,0 +1,34 @@ +# Запуск прод-сервера admin.food-market.kz — прогресс + +Приоритет №2 (09.10.2026). Цель: поднять ПУСТОЙ рабочий прод для перехода магазина на ALL MARKET. +Прод-vm 192.168.1.190, compose `~/food-market/deploy` (свой `food-market-prod-postgres:5437`, +НЕ shared-postgres). gateway nginx проксирует admin.food-market.kz → :8081 (web). Стенд и прод +изолированы. Публичный сайт food-market.kz НЕ трогаем. + +## Контекст на старте +- Прод-стек НЕ был поднят целостно: web (8081) жил 3 мес, но postgres (5437) и api (8080) не + запущены → admin.food-market.kz отдавал SPA без живого API. Том `food-market-prod-postgres-data` + отсутствовал (чистый старт). В `api-data` лежали СТАРЫЕ dev OpenIddict-ключи — вычищаются. +- Прод .env был минимальный с `POSTGRES_PASSWORD=food_market_dev` (dev-дефолт!) и тегами latest/test. + +## План и статус +1. [~] **Чек-лист готовности** (`docs/prod-runbook.md`): релизные теги (SHA, не test), прод-секреты + (БД/OpenIddict/суперадмин) отдельно от стенда в `.env` chmod 600; ВЫКЛ quick-login/демо-сидеры/ + тест-орги; SuperAdmin — временный сложный пароль в `~/.fm-watchdog/prod-superadmin-initial.txt` + (chmod 600, сменить при первом входе). + - [x] Код: флаг `SEED_DEMO_DATA=false` отключает демо-орг «Demo Market»/demo-admin на проде + (DevDataSeeder), сохраняя SuperAdmin+роли+ед.изм.+SystemSettings. QuickLoginDemoSeeder на проде + и так no-op (issuer admin.food-market.kz глушит quick-login). + - [x] Прод .env собран: релиз-теги = SHA main, сильный POSTGRES_PASSWORD, SEED_SUPERADMIN_PASSWORD, + SEED_DEMO_DATA=false, QUICK_LOGIN_ENABLED=false, issuer прод; chmod 600. VAPID — автогенерация в + БД (секрет не нужен). SMTP — задаёт владелец (пока не настроен; сброс пароля по email неактивен). +2. [ ] **Бэкапы**: pg_dump каждый час (48 ч) + ежедневно (30 дн) + офсайт-копия; проверка + восстановления (реальный restore во временную БД + сверка числа строк). Мониторинг → Telegram. +3. [ ] **Развернуть прод** (compose up postgres+api+web), миграции, проверка https://admin.food-market.kz + (вход SuperAdmin, меню, касса), БЕЗ данных магазина. +4. [ ] **~/deploy-prod.sh** с guard'ами (только явная команда, backup до миграций), НЕ в ночных. +5. [x] Публичный сайт food-market.kz — не трогаем (контейнер public оставлен как есть, PUBLIC_TAG=test). + +## Условие DONE +Прод поднят и пуст, бэкап/восстановление проверены, мониторинг шлёт тестовое уведомление → touch +`~/.fm-watchdog/DONE`.