3.9 KiB
3.9 KiB
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
cp terraform.tfvars.example terraform.tfvars
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. Деплой
terraform init
terraform apply
4. Проверка
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 |
Node.js + amqplib |
| Consumer | Nail/tf-iot-consumer |
Node.js + amqplib + redis + mongodb |
| Dashboard | 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).