Producer -> RabbitMQ -> Consumer -> Redis+MongoDB -> Dashboard Подробная инструкция в README.md: - Что заменить в locals.tf (домены, git_path, ресурсы) - Как заполнить terraform.tfvars - Как форкнуть репо приложений
5.8 KiB
5.8 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. Подготовка
# Склонируйте репозиторий
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.tf → prod_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 |