Files
tf_examples/iot-rmq-demo
naeel 5511546534 IoT Demo: Terraform-конфиг для 6 сервисов Nubes Cloud
Producer -> RabbitMQ -> Consumer -> Redis+MongoDB -> Dashboard

Подробная инструкция в README.md:
- Что заменить в locals.tf (домены, git_path, ресурсы)
- Как заполнить terraform.tfvars
- Как форкнуть репо приложений
2026-07-22 10:19:24 +04:00
..

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. Подготовка

# Склонируйте репозиторий
git clone <этот-репо> / cd tf_examples/iot-rmq-demo

# Скопируйте и заполните переменные
cp terraform.tfvars.example terraform.tfvars

2. Что обязательно ЗАМЕНИТЬ в locals.tf

Файл locals.tf — центральное место всех настроек. Откройте и измените:

Параметр Где Что писать Пример
prod_git_path locals.tf URL вашего форка producer в Gitea https://gitea.../МОЙ_ЛОГИН/tf-iot-producer.git
cons_git_path locals.tf URL вашего форка consumer https://gitea.../МОЙ_ЛОГИН/tf-iot-consumer.git
dash_git_path locals.tf URL вашего форка dashboard https://gitea.../МОЙ_ЛОГИН/tf-iot-dashboard.git
prod_domain locals.tf Уникальный поддомен для producer my-iot-prod
cons_domain locals.tf Уникальный поддомен для consumer my-iot-cons
dash_domain locals.tf Уникальный поддомен для dashboard my-iot-dash
prod_resource_name locals.tf Имя инстанса в кабинете Nubes my-iot-prod
cons_resource_name locals.tf Имя инстанса my-iot-cons
dash_resource_name locals.tf Имя инстанса my-iot-dash

⚠️ ВАЖНО про домены: домены (поддомены .nodejsk8s.dev.nubes.ru) должны быть уникальными в рамках кластера. Если домен уже занят — деплой упадёт с ошибкой. Придумайте свои: myproject-prod, demo-iot-cons, etc.

3. Что заполнить в 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"  # test или prod

4. Форкнуть репозитории приложений

Код приложений лежит в apps/. Каждое приложение — отдельный Git-репо.

Порядок действий для каждого из трёх приложений (producer, consumer, dashboard):

cd apps/iot-producer    # (или iot-consumer, iot-dashboard)

# Создать репо в своём Gitea
# https://gitea.services.ngcloud.ru → Новый репозиторий → tf-iot-producer

git remote add my https://gitea.services.ngcloud.ru/МОЙ_ЛОГИН/tf-iot-producer.git
git push my main

# Скопировать хеш последнего коммита:
git rev-parse HEAD

Полученный хеш вставить в locals.tfprod_git_revision (и аналогично для consumer/dashboard). Или просто указать "main" — тогда Nubes будет деплоить последний коммит ветки.

5. Деплой

terraform init
terraform plan    # проверить что всё ok
terraform apply   # развернуть (≈3–5 минут)

6. Проверка

# Producer — отправил ли события?
curl https://<prod_domain>.nodejsk8s.dev.nubes.ru
# → {"events_sent": 150, "errors": 0}

# Consumer — обработал ли?
curl https://<cons_domain>.nodejsk8s.dev.nubes.ru
# → {"consumed": 150, "errors": 0}

# Dashboard — открыть в браузере:
# https://<dash_domain>.nodejsk8s.dev.nubes.ru

Файлы

Файл Назначение
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), трафик не выходит наружу.

Репозитории приложений

Приложение Репо (шаблон) Описание
Producer apps/iot-producer Node.js + amqplib
Consumer apps/iot-consumer Node.js + amqplib + redis + mongodb
Dashboard apps/iot-dashboard Node.js + express + redis + Chart.js