chore: добавить правила SSH/VM в copilot-instructions + лог мышления
This commit is contained in:
@@ -27,6 +27,55 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## ⚠️ ВЫПОЛНЕНИЕ КОМАНД — ТОЛЬКО НА УДАЛЁННОЙ МАШИНЕ
|
||||||
|
|
||||||
|
- Все команды (git, go, docker, kubectl, make и т.д.) выполнять **ТОЛЬКО на удалённой машине** через SSH.
|
||||||
|
- **На локальной машине команды не запускать вообще.**
|
||||||
|
- Если для задачи необходимо выполнить что-то локально — **спросить явное разрешение у пользователя** перед запуском.
|
||||||
|
|
||||||
|
### Параметры удалённой машины
|
||||||
|
|
||||||
|
| Параметр | Значение |
|
||||||
|
|---|---|
|
||||||
|
| Хост | `5.172.178.213` |
|
||||||
|
| Пользователь | `naeel` |
|
||||||
|
| SSH-ключ | `~/.ssh/id_ed25519` |
|
||||||
|
| Рабочий каталог | `/home/naeel/terra/IoT` |
|
||||||
|
|
||||||
|
### Шаблон команды
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh -i ~/.ssh/id_ed25519 \
|
||||||
|
-o StrictHostKeyChecking=no \
|
||||||
|
-o ConnectTimeout=10 \
|
||||||
|
naeel@5.172.178.213 \
|
||||||
|
'cd /home/naeel/terra/IoT && <КОМАНДА>'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Примеры
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# git статус
|
||||||
|
ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=10 naeel@5.172.178.213 \
|
||||||
|
'cd /home/naeel/terra/IoT && git status'
|
||||||
|
|
||||||
|
# commit + push
|
||||||
|
ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=10 naeel@5.172.178.213 \
|
||||||
|
'cd /home/naeel/terra/IoT && git add -A && git commit -m "..." && git push'
|
||||||
|
|
||||||
|
# сборка go
|
||||||
|
ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=10 naeel@5.172.178.213 \
|
||||||
|
'cd /home/naeel/terra/IoT && go build ./...'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Git / Gitea
|
||||||
|
|
||||||
|
- Remote: `https://gitea.services.ngcloud.ru/Nail/IoT.git` (HTTPS)
|
||||||
|
- SSH до Gitea **недоступен** с удалённой машины — использовать только HTTPS.
|
||||||
|
- Credentials сохранены на удалённой машине в `~/.git-credentials`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## О проекте
|
## О проекте
|
||||||
|
|
||||||
IoT managed service — отдельная репа, вынесенная из sless.
|
IoT managed service — отдельная репа, вынесенная из sless.
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# 2026-04-12 — GitHub Copilot (Claude Opus 4.6)
|
||||||
|
|
||||||
|
## Задача
|
||||||
|
Пользователь просит:
|
||||||
|
1. Просмотреть всё в репе IoT
|
||||||
|
2. Оценить замену Kafka и RabbitMQ на собственный SQS-service (из ~/terra/SQS-service)
|
||||||
|
3. Контекст: проект переехал из ~/terra/sless в отдельную репу ~/remote_dev/IoT
|
||||||
|
|
||||||
|
## План
|
||||||
|
1. Изучить текущую структуру IoT репы — что есть, как используется Kafka
|
||||||
|
2. Посмотреть SQS-service — что он из себя представляет
|
||||||
|
3. Посмотреть старую репу sless — что оттуда переехало, что осталось
|
||||||
|
4. Дать краткую оценку замены Kafka/RabbitMQ → SQS
|
||||||
|
|
||||||
|
## Ход работы
|
||||||
|
|
||||||
|
### Анализ: что нашёл
|
||||||
|
|
||||||
|
**IoT — текущее использование Kafka:**
|
||||||
|
- `cmd/mqtt-bridge/main.go` — MQTT → Kafka writer (топик `iot.telemetry`, библиотека `segmentio/kafka-go`)
|
||||||
|
- `cmd/kafka-consumer/main.go` — Kafka reader → Postgres (consumer group `iot-pg-consumer`)
|
||||||
|
- `internal/api/handler/iot_admin_stats_handler.go` — admin UI: показывает Kafka consumer lag
|
||||||
|
- `cmd/iot-operator/main.go` — передаёт KAFKA_BROKERS в handler
|
||||||
|
- `deployments/k8s/kafka.yaml` — деплоймент Kafka в кластере
|
||||||
|
- В документации (deployment.md, iot-mvp-plan.md) упоминается RabbitMQ как изначальный план, но в коде **RabbitMQ нет** — в реальности уже Kafka
|
||||||
|
|
||||||
|
**SQS-service (shared-sqs):**
|
||||||
|
- AWS SQS-совместимый сервис на Go (модуль `shared-sqs`)
|
||||||
|
- HTTP API с SQS-протоколом: CreateQueue, SendMessage, ReceiveMessage, DeleteMessage и т.д.
|
||||||
|
- Multi-tenant: TenantStore с auth
|
||||||
|
- Persistence: Redis (write-through) + in-memory
|
||||||
|
- Billing через PostgreSQL
|
||||||
|
- Порт 4100, gorilla/mux
|
||||||
|
- **Не Kafka-совместимый** — это pull-based очередь (SQS-like), не streaming platform
|
||||||
|
|
||||||
|
**RabbitMQ в IoT:** только в документах (plan). В коде не используется.
|
||||||
|
|
||||||
|
**shared-SQS (из Gitea README):**
|
||||||
|
- AWS SQS-совместимый managed сервис — 17 операций SQS
|
||||||
|
- Уже задеплоен: endpoint `https://qu.kube5s.ru`, Web UI `https://qu.kube5s.ru/ui/`
|
||||||
|
- Multi-tenant с auth (JWT nubes → auto-create tenant → Access Key / Secret Key)
|
||||||
|
- Можно использовать через стандартные AWS SDK (Go, Python boto3, Node.js @aws-sdk/client-sqs)
|
||||||
|
- Persistence: Redis + in-memory
|
||||||
|
- Billing: PostgreSQL
|
||||||
|
- Benchmark: конкурентоспособен с Yandex MQ
|
||||||
|
|
||||||
|
### Выводы по замене Kafka → shared-SQS
|
||||||
|
|
||||||
|
**Что реально нужно сделать в IoT:**
|
||||||
|
1. `mqtt-bridge`: заменить `kafka.Writer` → AWS SDK SQS `SendMessage` (endpoint = qu.kube5s.ru или внутрикластерный)
|
||||||
|
2. `kafka-consumer` → переименовать в `sqs-consumer`: заменить `kafka.Reader` → SQS `ReceiveMessage` + `DeleteMessage` polling loop
|
||||||
|
3. `admin stats handler`: вместо Kafka lag → SQS `GetQueueAttributes` (ApproximateNumberOfMessages)
|
||||||
|
4. Удалить `deployments/k8s/kafka.yaml`
|
||||||
|
5. Убрать `segmentio/kafka-go` из go.mod, добавить `aws-sdk-go-v2`
|
||||||
|
6. Обновить env vars: KAFKA_BROKERS → SQS_ENDPOINT + SQS credentials
|
||||||
|
7. Обновить документацию
|
||||||
|
|
||||||
|
**Плюс:** AWS SDK for Go — стандартная библиотека, код станет проще. shared-SQS уже живой.
|
||||||
|
**Минус:** polling latency (ReceiveMessage WaitTimeSeconds до 20s) vs Kafka push. Для IoT телеметрии — приемлемо.
|
||||||
Reference in New Issue
Block a user