README: убрал лишнее, прямые ссылки на репо приложений

This commit is contained in:
2026-07-22 10:23:32 +04:00
parent 5511546534
commit ce7d031068
+36 -71
View File
@@ -1,6 +1,6 @@
# IoT Demo — Nubes Cloud # 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 ```bash
# Склонируйте репозиторий
git clone <этот-репо> / cd tf_examples/iot-rmq-demo
# Скопируйте и заполните переменные
cp terraform.tfvars.example terraform.tfvars 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 ```hcl
api_token = "xxx" # API-токен из ЛК Nubes api_token = "xxx" # API-токен из ЛК Nubes
realm = "k8s-4-sandbox-nubes-ru" # Ваш K8s-кластер realm = "k8s-4-sandbox-nubes-ru" # Ваш K8s-кластер
api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc" # test или prod 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 ### 3. Деплой
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. Деплой
```bash ```bash
terraform init terraform init
terraform plan # проверить что всё ok terraform apply
terraform apply # развернуть (≈3–5 минут)
``` ```
### 6. Проверка ### 4. Проверка
```bash ```bash
# Producer — отправил ли события? curl https://<prod_domain>.nodejsk8s.dev.nubes.ru # → {"events_sent": N, "errors": 0}
curl https://<prod_domain>.nodejsk8s.dev.nubes.ru curl https://<cons_domain>.nodejsk8s.dev.nubes.ru # → {"consumed": N, "errors": 0}
# → {"events_sent": 150, "errors": 0} # Dashboard: открыть https://<dash_domain>.nodejsk8s.dev.nubes.ru в браузере
# Consumer — обработал ли?
curl https://<cons_domain>.nodejsk8s.dev.nubes.ru
# → {"consumed": 150, "errors": 0}
# Dashboard — открыть в браузере:
# https://<dash_domain>.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://<cons_domain>.nodejsk8s.dev.nubes.ru
## Примечания ## Примечания
- **MongoDB без пароля** — для демо-стенда. В продакшене настроить аутентификацию. - **MongoDB без пароля** — для демо. В проде настроить аутентификацию.
- **`adopt_existing_on_create = true`** — позволяет повторный `apply` без удаления старых инстансов. - **`adopt_existing_on_create = true`** — повторный `apply` подхватывает существующие инстансы.
- **`suspend_on_destroy = true`** — при `destroy` инстансы не удаляются, а засыпают (suspend). - **`suspend_on_destroy = true`** — `destroy` не удаляет, а засыпает (suspend).
- Все внутренние соединения — через K8s Service (`.svc.cluster.local`), трафик не выходит наружу. - Все внутренние соединения — 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 |