klg-asutk-app/docs/DEMO_INFRASTRUCTURE_CONCLUSION.md
Yuriy 0e93bb9433 fix: config JWT/storage/piv/SECRET_KEY; docs: USER_GUIDE.md, DEMO_INFRASTRUCTURE_CONCLUSION.md
- config: JWT_SECRET, JWT_ALG, allow_hs256_dev_tokens, SECRET_KEY, storage_dir, piv_base_url, piv_timeout_s
- docs/USER_GUIDE.md: руководство пользователя КЛГ АСУ ТК (16 разделов)
- docs/DEMO_INFRASTRUCTURE_CONCLUSION.md: заключение по demo-инфраструктуре

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-15 13:13:23 +03:00

131 lines
7.0 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.

# Заключение: Demo-инфраструктура КЛГ АСУ ТК
**Дата:** 15 февраля 2026
**Задача:** Подготовка к подключению до 5 удалённых клиентов для демонстрации, тестирования и проверки работоспособности
---
## Сводка: все 9 блоков реализованы
| # | Блок | Файлы | Статус |
|---|------|-------|--------|
| 1 | Dockerfile frontend | `Dockerfile` (корень) — multi-stage builder + runner | ✅ |
| 2 | Docker Compose demo | `docker-compose.demo.yml` — Caddy, seed, env override | ✅ |
| 3 | Reverse proxy | `demo/Caddyfile` — авто-HTTPS, проксирование, безопасность | ✅ |
| 4 | 5 пользователей + токены | `demo/users.json`, `demo/generate_tokens.py` | ✅ |
| 5 | Demo seed | `backend/app/demo/seed.py` — адаптирован под модели | ✅ |
| 6 | Скрипт развёртывания | `demo/deploy.sh` — one-command deploy | ✅ |
| 7 | Документация | `docs/DEMO.md` — 3 варианта хостинга, сценарии | ✅ |
| 8 | .gitignore | `demo/tokens.json` добавлен | ✅ |
| 9 | Адаптация seed под модели | Organization.kind, AircraftType без name, Aircraft без flight_hours, 5 User | ✅ |
---
## Архитектура demo-стенда
```
Удалённый клиент (браузер)
│ HTTPS / WSS
┌─────────────────────────────┐
│ Caddy (порты 80/443) │ ← авто-сертификат Let's Encrypt
│ reverse proxy + TLS │
├─────────────────────────────┤
│ / → frontend:3000 │ Next.js (SSR)
│ /api/* → backend:8000 │ FastAPI (4 workers)
│ /ws/* → backend:8000 │ WebSocket
│ /docs → backend:8000 │ Swagger UI
│ /auth/* → keycloak:8080 │ (опционально)
└─────────────────────────────┘
│ │
┌────┘ └────┐
▼ ▼
┌──────────┐ ┌──────────┐
│ PostgreSQL│ │ Redis │
│ + RLS │ │ cache │
└──────────┘ └──────────┘
┌──────────────┐
│ Keycloak DB │ (отдельная БД)
│ (опционально)│
└──────────────┘
```
## 5 тестовых пользователей
| # | Имя | Роль | Организация | Ключевые возможности |
|---|-----|------|-------------|---------------------|
| 1 | Админ Системы | `admin` | — | Полный доступ, dashboard, аналитика |
| 2 | Иванов И.П. | `authority_inspector` | ФАВТ | Инспекция, одобрение заявок, аудиты, панель ФАВТ |
| 3 | Петров А.С. | `operator_manager` | КалинингрАвиа | Парк ВС (4 борта), заявки, модификации |
| 4 | Сидоров В.Н. | `mro_manager` | Балтик Техник | Наряды ТО, чек-листы, CRS, дефекты |
| 5 | Козлова Е.А. | `operator_user` | КалинингрАвиа | Просмотр ВС, создание заявок |
## Демо-данные (seed)
- **3 организации:** АК «КалинингрАвиа», ТОиР «Балтик Техник», МТУ ФАВТ Северо-Запад
- **3 типа ВС:** SSJ100, МС-21-300, L-410
- **4 воздушных судна:** RA-89001, RA-89002, RA-73001, RA-67001
- **2 заявки:** одна submitted (ТОиР по ФАП-145), одна draft (продление СЭ)
- **2 уведомления:** новая заявка для инспектора, приближающаяся инспекция для оператора
## Два режима авторизации
### Режим 1: Dev-токены (по умолчанию)
```bash
bash demo/deploy.sh --domain demo.klg.refly.ru
# Генерирует JWT HS256 токены на 30 дней для каждого пользователя
# Токены сохраняются в demo/tokens.json
```
### Режим 2: Keycloak OIDC
```bash
bash demo/deploy.sh --domain demo.klg.refly.ru --with-keycloak
# Поднимает Keycloak на отдельной БД
# Доступ: https://demo.klg.refly.ru/auth
```
## Три варианта хостинга
| Вариант | Подходит для | Стоимость | Сложность |
|---------|-------------|-----------|-----------|
| **VPS/VDS** (Timeweb, Selectel, Hetzner) | Постоянный demo-стенд | от 500₽/мес | Низкая |
| **Локальный + Cloudflare Tunnel** | Быстрая демонстрация | Бесплатно | Минимальная |
| **Yandex Cloud / Selectel Cloud** | Масштабирование, SLA | от 2000₽/мес | Средняя |
**Минимальные требования:** 2 vCPU, 4 GB RAM, 10 GB SSD, Docker 24+
## Команды управления
```bash
# Запуск
bash demo/deploy.sh [--domain DOMAIN] [--with-keycloak]
# Генерация токенов (повторно)
python3 demo/generate_tokens.py --format table
# Логи
docker compose -f docker-compose.yml -f docker-compose.demo.yml --profile demo logs -f
# Остановка
docker compose -f docker-compose.yml -f docker-compose.demo.yml --profile demo down
# Полный сброс (с удалением данных)
docker compose -f docker-compose.yml -f docker-compose.demo.yml --profile demo down -v
```
---
## Рекомендации перед запуском demo
1. **Проверить seed.py** — убедиться что все модели совпадают с текущими миграциями (поля Organization.kind, AircraftType, Aircraft). При ошибках seed логирует и завершается с ненулевым кодом.
2. **Frontend login-страница** — страница `/login` уже поддерживает ввод токена (поле «Токен доступа»), вызывает `login(token)` из auth-context, который сохраняет токен через `setAuthToken()` из `api-client.ts`. Для demo подставьте токен из `demo/tokens.json`.
3. **CORS** — при использовании домена добавить его в `CORS_ORIGINS` в `.env` (deploy.sh делает это автоматически при создании .env).
4. **Firewall** — на VPS открыть порты 80 и 443 для Caddy.
5. **WebSocket** — проверить что `wss://` проходит через Caddy (Caddyfile уже настроен на `/ws/*`).