# Шаг 9 — DEV стенд: все 6 сервисов развёрнуты **Дата:** 2026-07-21 ## Финальный состав (6 сервисов) | # | Ресурс Terraform | Имя | Роль | |---|-----------------|------|------| | 1 | `nubes_kafka` | iot-kafka | Шина сообщений | | 2 | `nubes_redis` | iot-redis | Кэш дашборда | | 3 | `nubes_mongodb` | iot-mongo | Постоянное хранение | | 4 | `nubes_flask` | iot-producer | Генератор IoT → Kafka | | 5 | `nubes_flask` | iot-consumer | Kafka → Redis + MongoDB | | 6 | `nubes_nodejs` | iot-dashboard | Redis → графики Chart.js | ## Git-репозитории | Репо | Назначение | |------|-----------| | `Nail/tf-iot-producer` | Flask — IoT продюсер (Kafka TLS) | | `Nail/tf-iot-consumer` | Flask — Kafka → Redis + MongoDB | | `Nail/tf-iot-dashboard` | Node.js — дашборд Chart.js | ## Поток данных ``` Producer (Flask) → Kafka → Consumer (Flask) → Redis (кэш) → MongoDB (история) Dashboard (Node.js) ← Redis (API /api/latest, /api/counters, /api/recent) ``` ## Реальные ключи (определены опытным путём) ### Kafka - bootstrap: `state_out_flat["internalConnect.bootstrap.fqdn"]:9093` — **TLS** - vault: `vault_secrets["users"]["iot-app"]["user.password"]` ### Redis - host: `state_out_flat["internalConnect.master"]` - vault: `vault_secrets["users"]["default"]["password"]` ### MongoDB - host: `state_out_flat["internalConnect"]` - port: 27017 - vault: `vault_secrets["users"]["admin"]["password"]` ## Структура приложений - **Flask**: `site/app.py` + `requirements.txt` (БЕЗ Procfile) - **Node.js**: `server.js` + `package.json` (`npm start`) ## Неудачные сервисы | Сервис | Причина | |--------|--------| | `nubes_clickhouse` | GitHub release assets timeout | | `nubes_superset` | IAM 408 timeout | | `nubes_akhq` | `toBoolean() on null` — баг платформы |