Files
IoT/doc/progress.md
T
Naeel 907aaad100 docs: полная документация v0.2.3 — архитектура, API, деплой, тестирование
Новые файлы:
- doc/architecture/current-v0.2.3.md — актуальная архитектура
- doc/api/endpoints-v0.2.3.md — полная документация REST API
- doc/deployment-v0.2.3.md — инструкция деплоя v0.2.3
- doc/run-and-test.md — руководство по запуску и E2E тесту

Обновлено:
- doc/progress.md — секция документации
- doc/thinking/2026-04-12.md — лог мышления
2026-04-12 18:36:12 +03:00

6.5 KiB
Raw Blame History

IoT Managed Service — Трекер прогресса

2026-04-12: Перенос из sless в отдельную репу

Выполнено

  • Создана репа https://gitea.services.ngcloud.ru/Nail/IoT
  • Go модуль: gitea.services.ngcloud.ru/Nail/IoT
  • Перенесены все IoT-компоненты из sless:
    • iot/api/v1alpha1/api/v1alpha1/ (CRD types: IoTDevice)
    • iot/controllers/controllers/ (IoTDevice reconciler)
    • iot/cmd/mqtt-bridge/cmd/mqtt-bridge/ (MQTT→Kafka)
    • iot/cmd/kafka-consumer/cmd/kafka-consumer/ (Kafka→Postgres)
    • internal/storage/iotpg/internal/storage/iotpg/ (per-tenant PG)
    • internal/api/handler/iot_*.gointernal/api/handler/ (REST handlers)
    • internal/api/ui/iot-*.htmlinternal/api/ui/ (embedded HTML)
    • internal/api/middleware/internal/api/middleware/ (auth, logging)
    • deployments/k8s/iot-*.yaml + kafka.yamldeployments/k8s/
    • config/crd/bases/config/crd/bases/
    • doc/iot/, examples/IOT/doc/, examples/
  • Созданы новые файлы:
    • cmd/iot-operator/main.go — точка входа (controller-manager + REST API)
    • internal/api/handler/handler.go — упрощённый Handler (без S3/PG от sless)
    • internal/api/router.go — только IoT маршруты
    • Dockerfile — multi-stage build, 3 бинарника, distroless
    • Makefile — build/docker/deploy команды
    • .gitignore
    • .github/copilot-instructions.md
  • Все import paths заменены: sless/iot/...Nail/IoT/...
  • Все 3 бинарника собираются без ошибок (go build ./...)
  • Запушено в Gitea

Следующие шаги

  • Docker build + push на Docker Hub (naeel/iot-operator)
  • Обновить k8s manifests для нового образа
  • Деплой в кластер
  • E2E тест: создание устройства → MQTT → Kafka → Postgres → API
  • Убрать IoT-код из sless (опционально, после подтверждения что всё работает)

2026-04-12: Замена Kafka → shared-SQS + деплой в новый кластер

Выполнено

  • Создана ветка feature/replace-kafka-with-sqs
  • Документировано решение: doc/decisions/2026-04-12-replace-kafka-with-sqs.md
  • mqtt-bridge (cmd/mqtt-bridge/main.go): Kafka Writer → AWS SDK SQS SendMessage
  • sqs-consumer (cmd/sqs-consumer/main.go): новый — заменяет kafka-consumer, SQS ReceiveMessage → Postgres
  • kafka-consumer (cmd/kafka-consumer/): удалён из кода
  • admin stats (internal/api/handler/iot_admin_stats_handler.go): Kafka lag → SQS GetQueueAttributes
  • handler.go: убрано поле KafkaBrokers
  • iot-operator/main.go: убрана передача KAFKA_BROKERS
  • go.mod: убран segmentio/kafka-go, добавлен aws-sdk-go-v2 (v1.41.5 + sqs v1.42.25)
  • Dockerfile: kafka-consumer → sqs-consumer
  • Makefile: build-consumer → sqs-consumer
  • .gitignore: исправлен баг (паттерны без / игнорировали cmd/ директории)
  • go build ./... проходит на ВМ
  • Коммит и пуш в ветку

Деплой в кластер iot-naeel (новый кластер)

  • shared-SQS: создан tenant iot-service (t-96afe7e9f781f6ca), очередь iot-telemetry
  • Namespace sless создан
  • Secret iot-sqs-credentials создан
  • Secret iot-bridge-credentials создан
  • Postgres: переключён на managed PG17 (тот же что SQS billing)
  • Secret iot-postgres-secret создан (DSN → managed PG)
  • Docker: собран и запушен naeel/iot-operator:v0.2.0 в Docker Hub
  • Deployment YAML: обновлены image на Docker Hub, убраны imagePullSecrets
  • EMQX: задеплоен (emqx.yaml + emqx-ws-ingress.yaml, адаптирован из sless)
  • iot-operator: задеплоен (новый iot-operator.yaml с RBAC)
  • CRD iotdevices.iot.kube5s.ru установлен
  • iot-mqtt-bridge: задеплоен, Running
  • iot-sqs-consumer: задеплоен, Running — подключился к PG и SQS
  • cert-manager: выпускает TLS для iot.kube5s.ru
  • Коммит и пуш

Что работает

  • Все 4 пода Running 1/1
  • iot-operator: controller стартовал, MQTT auth/acl обрабатывает запросы от EMQX
  • sqs-consumer: подключился к Postgres и SQS, polling loop запущен
  • mqtt-bridge: подключён к EMQX и SQS, SQS queue resolved
  • EMQX: MQTT :1883, WS :8083, dashboard :18083

Следующие шаги

  • E2E тест: создание устройства → MQTT → SQS → Postgres → API
  • Нагрузочный тест
  • Мерж ветки в master
  • Убрать IoT-код из sless (опционально)

2026-04-12: Документация v0.2.3

Выполнено

  • Аудит документации из репозитория sless (thinking 04-04/05/06/09, decisions, progress, api, examples)
  • Аудит документации в IoT репозитории (deployment.md, overview.md, endpoints.md, mvp-plan.md)
  • Анализ расхождений — определены устаревшие секции (Kafka, RabbitMQ)
  • Решение: старые документы НЕ удалять, новые создавать отдельно
  • Создан doc/deployment-v0.2.3.md (295 строк) — актуальная инструкция деплоя
  • Создан doc/architecture/current-v0.2.3.md (256 строк) — полная архитектура v0.2.3
  • Создан doc/api/endpoints-v0.2.3.md (~300 строк) — полная документация REST API
  • Создан doc/run-and-test.md (~180 строк) — руководство по запуску и E2E тесту
  • Обновлён doc/progress.md
  • Дописан doc/thinking/2026-04-12.md — лог мышления сессии

Баг-фиксы v0.2.1—v0.2.3

  • v0.2.1: mqtt-bridge — bridge auth fix (BridgeUsername/BridgePassword проверяется ДО парсинга username)
  • v0.2.3: финальный образ со всеми фиксами