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