59 lines
2.1 KiB
Markdown
59 lines
2.1 KiB
Markdown
# Шаг 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` — баг платформы |
|