README: убрал лишнее, прямые ссылки на репо приложений
This commit is contained in:
+36
-71
@@ -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 |
|
|
||||||
|
|||||||
Reference in New Issue
Block a user