# Запуск прод-сервера 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`.