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

43 lines
4.3 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.

# Запуск прод-сервера 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, сменить при первом входе).
- [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`.