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

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 = truedestroy не удаляет, а засыпает (suspend).
  • Все внутренние соединения — K8s Service (.svc.cluster.local).