From ce7d031068ab603a694b4fc6e3b673b158b64afa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Wed, 22 Jul 2026 10:23:32 +0400 Subject: [PATCH] =?UTF-8?q?README:=20=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B5,=20=D0=BF=D1=80=D1=8F?= =?UTF-8?q?=D0=BC=D1=8B=D0=B5=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=80=D0=B5=D0=BF=D0=BE=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iot-rmq-demo/README.md | 111 ++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 73 deletions(-) diff --git a/iot-rmq-demo/README.md b/iot-rmq-demo/README.md index 06b6895..573d9e4 100644 --- a/iot-rmq-demo/README.md +++ b/iot-rmq-demo/README.md @@ -1,6 +1,6 @@ # IoT Demo — Nubes Cloud -Разворачивание демо-стенда «Умный дом» из 6 сервисов Nubes Cloud через Terraform. +Демо-стенд «Умный дом»: 6 сервисов Nubes Cloud, развёртывание через Terraform. ## Архитектура @@ -19,86 +19,59 @@ Producer (Node.js) → RabbitMQ → Consumer (Node.js) → Redis + MongoDB → D ## Быстрый старт -### 1. Подготовка +### 1. Скопировать и заполнить `terraform.tfvars` ```bash -# Склонируйте репозиторий -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` - ```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" # test или prod +api_token = "xxx" # API-токен из ЛК Nubes +realm = "k8s-4-sandbox-nubes-ru" # Ваш K8s-кластер +api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc" ``` -### 4. Форкнуть репозитории приложений +### 2. Заменить обязательные параметры в `locals.tf` -Код приложений лежит в [`apps/`](../../apps/). Каждое приложение — отдельный Git-репо. +| Параметр | Что писать | +|---|---| +| `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 | -**Порядок действий для каждого из трёх приложений (producer, consumer, dashboard):** +> ⚠️ Домены (поддомены `.nodejsk8s.dev.nubes.ru`) должны быть **уникальны** в рамках кластера. Занятый домен — ошибка при деплое. -```bash -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. Деплой +### 3. Деплой ```bash terraform init -terraform plan # проверить что всё ok -terraform apply # развернуть (≈3–5 минут) +terraform apply ``` -### 6. Проверка +### 4. Проверка ```bash -# Producer — отправил ли события? -curl https://.nodejsk8s.dev.nubes.ru -# → {"events_sent": 150, "errors": 0} - -# Consumer — обработал ли? -curl https://.nodejsk8s.dev.nubes.ru -# → {"consumed": 150, "errors": 0} - -# Dashboard — открыть в браузере: -# https://.nodejsk8s.dev.nubes.ru +curl https://.nodejsk8s.dev.nubes.ru # → {"events_sent": N, "errors": 0} +curl https://.nodejsk8s.dev.nubes.ru # → {"consumed": N, "errors": 0} +# Dashboard: открыть https://.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 | + ## Файлы | Файл | Назначение | @@ -113,15 +86,7 @@ curl https://.nodejsk8s.dev.nubes.ru ## Примечания -- **MongoDB без пароля** — для демо-стенда. В продакшене настроить аутентификацию. -- **`adopt_existing_on_create = true`** — позволяет повторный `apply` без удаления старых инстансов. -- **`suspend_on_destroy = true`** — при `destroy` инстансы не удаляются, а засыпают (suspend). -- Все внутренние соединения — через K8s Service (`.svc.cluster.local`), трафик не выходит наружу. - -## Репозитории приложений - -| Приложение | Репо (шаблон) | Описание | -|---|---|---| -| Producer | [`apps/iot-producer`](../../apps/iot-producer) | Node.js + amqplib | -| Consumer | [`apps/iot-consumer`](../../apps/iot-consumer) | Node.js + amqplib + redis + mongodb | -| Dashboard | [`apps/iot-dashboard`](../../apps/iot-dashboard) | Node.js + express + redis + Chart.js | +- **MongoDB без пароля** — для демо. В проде настроить аутентификацию. +- **`adopt_existing_on_create = true`** — повторный `apply` подхватывает существующие инстансы. +- **`suspend_on_destroy = true`** — `destroy` не удаляет, а засыпает (suspend). +- Все внутренние соединения — K8s Service (`.svc.cluster.local`).