Files
tf_examples/iot-rmq-demo/README.md
T

93 lines
3.9 KiB
Markdown

# IoT Demo — Nubes Cloud
Демо-стенд «Умный дом»: 6 сервисов Nubes Cloud, развёртывание через Terraform.
## Архитектура
```
Producer (Node.js) → RabbitMQ → Consumer (Node.js) → Redis + MongoDB → Dashboard (Node.js + Chart.js)
```
| Сервис | Тип Nubes | Роль |
|---|---|---|
| `iot-rmq` | RabbitMQ | Очередь сообщений |
| `iot-rds` | Redis | Кэш дашборда |
| `iot-mgo` | MongoDB | Постоянный архив |
| `iot-prod` | Node.js (22) | Генератор IoT-событий |
| `iot-cons` | Node.js (22) | Обработчик очереди |
| `iot-dash` | Node.js (22) | Веб-дашборд |
## Быстрый старт
### 1. Скопировать и заполнить `terraform.tfvars`
```bash
cp terraform.tfvars.example terraform.tfvars
```
```hcl
api_token = "xxx" # API-токен из ЛК Nubes
realm = "k8s-4-sandbox-nubes-ru" # Ваш K8s-кластер
api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc"
```
### 2. Заменить обязательные параметры в `locals.tf`
| Параметр | Что писать |
|---|---|
| `prod_git_path` | URL вашего форка producer в Gitea |
| `cons_git_path` | URL вашего форка consumer в Gitea |
| `dash_git_path` | URL вашего форка dashboard в Gitea |
| `prod_domain` | **Уникальный** поддомен для producer |
| `cons_domain` | **Уникальный** поддомен для consumer |
| `dash_domain` | **Уникальный** поддомен для dashboard |
| `prod_resource_name` | Имя инстанса producer в кабинете Nubes |
| `cons_resource_name` | Имя инстанса consumer |
| `dash_resource_name` | Имя инстанса dashboard |
> ⚠️ Домены (поддомены `.nodejsk8s.dev.nubes.ru`) должны быть **уникальны** в рамках кластера. Занятый домен — ошибка при деплое.
### 3. Деплой
```bash
terraform init
terraform apply
```
### 4. Проверка
```bash
curl https://<prod_domain>.nodejsk8s.dev.nubes.ru # → {"events_sent": N, "errors": 0}
curl https://<cons_domain>.nodejsk8s.dev.nubes.ru # → {"consumed": N, "errors": 0}
# Dashboard: открыть https://<dash_domain>.nodejsk8s.dev.nubes.ru в браузере
```
## Репозитории приложений
Код каждого приложения — отдельный репо. Склонируйте/форкните к себе в Gitea.
| Приложение | Репо | Стек |
|---|---|---|
| Producer | [`Nail/tf-iot-producer`](https://gitea.services.ngcloud.ru/Nail/tf-iot-producer) | Node.js + amqplib |
| Consumer | [`Nail/tf-iot-consumer`](https://gitea.services.ngcloud.ru/Nail/tf-iot-consumer) | Node.js + amqplib + redis + mongodb |
| Dashboard | [`Nail/tf-iot-dashboard`](https://gitea.services.ngcloud.ru/Nail/tf-iot-dashboard) | Node.js + express + redis + Chart.js |
## Файлы
| Файл | Назначение |
|---|---|
| `main.tf` | Провайдер, переменные |
| `locals.tf` | **Все настройки** — менять здесь |
| `infra.tf` | RabbitMQ + Redis + MongoDB |
| `producer.tf` | Node.js producer |
| `consumer.tf` | Node.js consumer |
| `dashboard.tf` | Node.js dashboard |
| `terraform.tfvars.example` | Шаблон секретов |
## Примечания
- **MongoDB без пароля** — для демо. В проде настроить аутентификацию.
- **`adopt_existing_on_create = true`** — повторный `apply` подхватывает существующие инстансы.
- **`suspend_on_destroy = true`** — `destroy` не удаляет, а засыпает (suspend).
- Все внутренние соединения — K8s Service (`.svc.cluster.local`).