food-market/docs/prod-launch-progress.md
nns b49abfdbd7
Some checks are pending
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
feat(prod): запуск admin.food-market.kz — бэкапы (hourly/daily/офсайт), restore-verify, мониторинг, deploy-prod
- prod-backup.sh (tier hourly 48ч / daily 30д + uploads), prod-backup-offsite-pull.sh (DR на dev-vm)
- prod-restore-verify.sh: restore во временную БД + сверка числа строк, дроп
- prod-monitor.sh: api/web/public/БД/диск/5xx → Telegram владельцу (+ --test)
- deploy-prod.sh: guard'ы (prod-postgres, .env chmod600, не dev-пароль, quick-login off,
  SEED_DEMO_DATA=false, issuer), бэкап ДО миграций, только --yes, НЕ в ночных
- systemd таймеры (backup-hourly/daily, monitor, offsite-pull); docs/prod-runbook.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 19:31:55 +05:00

4.3 KiB
Raw Permalink Blame History

Запуск прод-сервера admin.food-market.kz — прогресс

✅ ГОТОВО (09.10.2026): прод поднят и пуст, бэкап/восстановление проверены, мониторинг шлёт тест

Прод-стек (postgres 5437 + api 8080 + web 8081) поднят из релиз-образов SHA 77464d6. БД пуста (orgs=0, products=0; только SuperAdmin admin@food-market.local + 4 системные роли; демо-орг нет). Вход через https://admin.food-market.kz = 200, quick-login = 404. Бэкапы: hourly(48ч)/daily(30д)+ офсайт на dev-vm; restore-verify прошёл (все ключевые таблицы совпали). Мониторинг (5 мин) шлёт в Telegram владельцу — тест-уведомление отправлено ✓. ~/deploy-prod.sh с guard'ами (только --yes, backup до миграций, не в ночных). Рунбук: docs/prod-runbook.md.

Приоритет №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, сменить при первом входе).
    • Код: флаг SEED_DEMO_DATA=false отключает демо-орг «Demo Market»/demo-admin на проде (DevDataSeeder), сохраняя SuperAdmin+роли+ед.изм.+SystemSettings. QuickLoginDemoSeeder на проде и так no-op (issuer admin.food-market.kz глушит quick-login).
    • Прод .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. Публичный сайт food-market.kz — не трогаем (контейнер public оставлен как есть, PUBLIC_TAG=test).

Условие DONE

Прод поднят и пуст, бэкап/восстановление проверены, мониторинг шлёт тестовое уведомление → touch ~/.fm-watchdog/DONE.