From 3ec8fe86c2de96dad972c6a58a0d47ae6a170c88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sun, 16 Aug 2026 15:11:13 +0400 Subject: [PATCH] =?UTF-8?q?docs:=20HISTORY=20=E2=80=94=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D1=80=D0=BE=D0=B1=D0=BD=D0=B0=D1=8F=20=D1=81=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=D0=BA=D0=B0=20=D1=80=D0=B0=D0=B7=D0=B2=D1=91=D1=80=D0=BD?= =?UTF-8?q?=D1=83=D1=82=D0=BE=D0=B3=D0=BE=20=D1=81=D1=82=D0=B5=D0=BA=D0=B0?= =?UTF-8?q?,=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=B0=D1=82=D1=84=D0=BE=D1=80=D0=BC=D1=8B,=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD=20=D1=85=D0=B2=D0=BE=D1=81=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HISTORY/2026-08-16-session-log.md | 49 +++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/HISTORY/2026-08-16-session-log.md b/HISTORY/2026-08-16-session-log.md index 9048090..2b8d31f 100644 --- a/HISTORY/2026-08-16-session-log.md +++ b/HISTORY/2026-08-16-session-log.md @@ -798,3 +798,52 @@ consumer → PG → чтение через /v1/.../telemetry. - Процедура для чужого кластера без kubectl: PG-auth в EMQX (вместо HTTP), порядок деплоя EMQX→iot-service, UUID из консоли deck, DSN с sslmode=require, роль с CREATEROLE/CREATEDB, один EXPOSE-порт в образе EMQX. + +--- + +## 25. ПОДРОБНАЯ СВОДКА: что развёрнуто на платформе (16.08) + +### Контейнеры (realm iot-naeel, кластер iot-naeel) +| Компонент | ns (instanceUid) | Домен | Образ | +|---|---|---|---| +| EMQX | `2fdd9658-4995-494f-892a-d88dda7da1ee` | exqx.containerk8s.dev.nubes.ru | naeel/iot-emqx:v0.2.0 | +| iot-service | `4504e05b-7b7f-4689-a61f-fbf6234dd0ed` | iot.containerk8s.dev.nubes.ru | naeel/iot-service:v0.1.0 | +| shared-sqs | `f1ffb134-7d16-45bd-8bef-69f6ec8ab33c` | sqs.containerk8s.dev.nubes.ru | (чужой) | +| ws-probe (тест) | `2d9b96ff-…` | testiot.containerk8s.dev.nubes.ru | (тестовый) | + +### Managed-сервисы +- PostgreSQL: инстанс `postgresqlk8s`, instanceUid `509145c3-ba71-4687-a084-d9dcbc88d3d2`, + internalMaster `postgresqlk8s-master.509145c3-….svc.cluster.local:5432`. + Роль `iot_service` (CREATEROLE, CREATEDB), БД `iotdb`. DSN: + `postgresql://iot_service:<пароль>@…:5432/iotdb?sslmode=require` (SSL обязателен!). +- shared-sqs: тенант `t-fec713a719ad0b33`, очередь `iot-telemetry`, + внутренний endpoint `containerk8s.f1ffb134-….svc.cluster.local:4100`. + +### Env iot-service (заданы/пропатчены) +IOT_PG_DSN (sslmode=require), SQS_ACCESS_KEY, SQS_SECRET_KEY, MQTT_USERNAME, +MQTT_PASSWORD, ADMIN_STATS_TOKEN, MQTT_HOST=containerk8s.2fdd9658-….svc.cluster.local, +AUTH_TEST_MODE=true (ТЕСТ! вернуть false). + +### Env EMQX (пропатчены kubectl) +EMQX_AUTHENTICATION__1__URL=http://containerk8s.4504e05b-….svc.cluster.local:9090/internal/mqtt/auth +EMQX_AUTHORIZATION__SOURCES__1__URL=http://containerk8s.4504e05b-….svc.cluster.local:9090/internal/mqtt/acl +EMQX_LOG__CONSOLE_HANDLER__LEVEL=debug (диагностика) + +### Правила платформы (выстраданы) +1. Путь к образу в deck фиксируется при создании → только latest + redeploy; + зеркало кэширует latest → в НАШЕМ кластере kubectl set image уникальным тегом. +2. Env в deck фиксируются при создании (формат JSON в форме — выяснить!). +3. Порт приложения берётся из EXPOSE образа; поле порта в форме отсутствует → + образ обязан иметь РОВНО один EXPOSE. +4. Загрузка EMQX на CPU-квоте 500m — 5–10 мин (не зависание!); dashboard + падает с таймаутами; для deck задавать CPU ≥1000m. +5. PG требует SSL: pg_hba no encryption → sslmode=require. + +### Хвосты (текущий план работ) +1. AUTH_TEST_MODE=false. +2. EMQX v0.2.1: убрать dashboard из конфига; CPU-квота (наш кластер — patch, + deck — рекомендация). +3. PG-auth в EMQX (без kubectl для чужого кластера): authentication postgres + (devices + bridge) + authorization postgres + http-фолбэк; монолит создаёт + bridge-строку в iot_devices (EnsureBridgeDevice). +4. Процедура деплоя для чужого кластера (документ).