Обновить dev-стек: frontend и observability
В dev-стек добавлены deal-frontend (:8080, SPA через Caddy) и storage-service; профиль observability расширен Loki/Promtail/Grafana. Статус Telegram: account из живого сервиса (KV — фолбэк), connected = phase ready.
@@ -286,7 +286,7 @@ settings(Key varchar(200) PK, ValueJson text, UpdatedAt timestamptz) --
|
|||||||
compose.prod; конфиг `deploy/observability/prometheus.yml` — job `deal` с таргетами
|
compose.prod; конфиг `deploy/observability/prometheus.yml` — job `deal` с таргетами
|
||||||
`core/telegram-service/ai-service/ml-service:9464` (target-метка `service`), retention 15 суток
|
`core/telegram-service/ai-service/ml-service:9464` (target-метка `service`), retention 15 суток
|
||||||
(volume `deal_prometheus_data`). UI — `127.0.0.1:9090` (оператору по SSH-туннелю). В dev тот же сервис
|
(volume `deal_prometheus_data`). UI — `127.0.0.1:9090` (оператору по SSH-туннелю). В dev тот же сервис
|
||||||
добавлен в `deploy/compose.dev.yml` (профиль `observability`, UI `localhost:9090`).
|
добавлен в `deploy/compose.dev.yml` (профиль `observability`): в dev также `loki`/`promtail`/`grafana` (Grafana `localhost:3001`, admin/admin), `tempo`/`otel-collector` (трейсы, UI :3200) и `cadvisor`/`node-exporter` (ресурсы); Prometheus — `localhost:9090`.
|
||||||
- **Grafana-провижининг**: `datasources/datasources.yml` — датасорсы Loki (uid `loki`, default) и
|
- **Grafana-провижининг**: `datasources/datasources.yml` — датасорсы Loki (uid `loki`, default) и
|
||||||
Prometheus (uid `prometheus`, `http://prometheus:9090`); дашборд `Deal-Metrics-Overview` (uid `deal-metrics`)
|
Prometheus (uid `prometheus`, `http://prometheus:9090`); дашборд `Deal-Metrics-Overview` (uid `deal-metrics`)
|
||||||
в папке «Дейл»: RPS/p95/5xx по сервисам, токены и вызовы AI/ML, глубины очередей, активные сессии,
|
в папке «Дейл»: RPS/p95/5xx по сервисам, токены и вызовы AI/ML, глубины очередей, активные сессии,
|
||||||
@@ -321,12 +321,16 @@ settings(Key varchar(200) PK, ValueJson text, UpdatedAt timestamptz) --
|
|||||||
| `deal-minio` | 9000/9001 | MinIO (вложения; в Local-режиме необязателен) |
|
| `deal-minio` | 9000/9001 | MinIO (вложения; в Local-режиме необязателен) |
|
||||||
| `deal-core` | 5080 / 5082 | Deal.Api: HTTP `/api` + gRPC-ингресс telegram |
|
| `deal-core` | 5080 / 5082 | Deal.Api: HTTP `/api` + gRPC-ингресс telegram |
|
||||||
| `deal-telegram-service` / `deal-ai-service` / `deal-ml-service` | 5101/5102/5103 | автономные сервисы этапа 6 |
|
| `deal-telegram-service` / `deal-ai-service` / `deal-ml-service` | 5101/5102/5103 | автономные сервисы этапа 6 |
|
||||||
|
| `deal-storage-service` | **5104** | хранилище вложений (storage-service) |
|
||||||
|
| `deal-frontend` | **8080** | SPA (Vite) через Caddy: статика + `/api → core:5080` |
|
||||||
|
|
||||||
`docker compose -f deploy/compose.dev.yml up -d --build` — весь стек в сквозном gRPC-режиме
|
`docker compose -f deploy/compose.dev.yml up -d --build` — весь стек в сквозном gRPC-режиме
|
||||||
(`Services__*__UseLocal=false`); `sh scripts/dev-smoke.sh` — одна команда (подъём → health → login →
|
(`Services__*__UseLocal=false`); `sh scripts/dev-smoke.sh` — одна команда (подъём → health → login →
|
||||||
`/api/tg/status` → `POST /api/cards` → trash → флашер MlOutbox → `/api/ml/status`; trap → down). Host-режим
|
`/api/tg/status` → `POST /api/cards` → trash → флашер MlOutbox → `/api/ml/status`; trap → down). Host-режим
|
||||||
(core с хоста, Local-заглушки) — §13.1–13.6.
|
(core с хоста, Local-заглушки) — §13.1–13.6.
|
||||||
|
|
||||||
|
Профиль `observability` (`--profile observability`) добавляет `prometheus`/`tempo`/`otel-collector`/`cadvisor`/`node-exporter` и `loki`/`promtail`/`grafana`: локально UI `http://localhost:8080`, Grafana `http://localhost:3001` (admin/admin), Prometheus `:9090`, Loki `:3100`, Tempo `:3200`.
|
||||||
|
|
||||||
### Prod-стек (`deploy/compose.prod.yml`)
|
### Prod-стек (`deploy/compose.prod.yml`)
|
||||||
|
|
||||||
- Одна внутренняя сеть; наружу — только **caddy** (80/443): TLS (шапка `deploy/caddy/Caddyfile` —
|
- Одна внутренняя сеть; наружу — только **caddy** (80/443): TLS (шапка `deploy/caddy/Caddyfile` —
|
||||||
@@ -988,6 +992,8 @@ ml 36/36 PASS; build 0/0 всех четырёх sln; `docker compose -f deploy/
|
|||||||
| `deal-telegram-service` | **5101** | Telegram: сессии/QR/диалоги/мониторинг/backfill/discovery-операции |
|
| `deal-telegram-service` | **5101** | Telegram: сессии/QR/диалоги/мониторинг/backfill/discovery-операции |
|
||||||
| `deal-ai-service` | **5102** | LLM-фасад: Filter/Classify/GenerateKeywords/EvaluateFit |
|
| `deal-ai-service` | **5102** | LLM-фасад: Filter/Classify/GenerateKeywords/EvaluateFit |
|
||||||
| `deal-ml-service` | **5103** | инкрементальная модель per-tenant: predict/train/status/reset |
|
| `deal-ml-service` | **5103** | инкрементальная модель per-tenant: predict/train/status/reset |
|
||||||
|
| `deal-storage-service` | **5104** | хранилище вложений (storage-service) |
|
||||||
|
| `deal-frontend` | **8080** | SPA (Vite) через Caddy: статика + `/api → core:5080` |
|
||||||
|
|
||||||
Порт каждого сервиса — env `GRPC_PORT` (контейнерный 5101/5102/5103), порт ингресса core — env
|
Порт каждого сервиса — env `GRPC_PORT` (контейнерный 5101/5102/5103), порт ингресса core — env
|
||||||
`GRPC_INGRESS_PORT` (5082). Health-проверки контейнеров — встроенный gRPC-health (`grpc_health_probe`
|
`GRPC_INGRESS_PORT` (5082). Health-проверки контейнеров — встроенный gRPC-health (`grpc_health_probe`
|
||||||
@@ -1035,7 +1041,7 @@ ml 36/36 PASS; build 0/0 всех четырёх sln; `docker compose -f deploy/
|
|||||||
|
|
||||||
```sh
|
```sh
|
||||||
cd /c/telbase
|
cd /c/telbase
|
||||||
docker compose -f deploy/compose.dev.yml up -d --build # весь стек (первый прогон собирает 4 образа)
|
docker compose -f deploy/compose.dev.yml --profile observability up -d --build # весь стек: 5 процессов + frontend + observability
|
||||||
sh scripts/dev-smoke.sh # сквозной smoke и авто-очистка (trap → down)
|
sh scripts/dev-smoke.sh # сквозной smoke и авто-очистка (trap → down)
|
||||||
docker compose -f deploy/compose.dev.yml down # погасить стек вручную (volumes сохраняются)
|
docker compose -f deploy/compose.dev.yml down # погасить стек вручную (volumes сохраняются)
|
||||||
```
|
```
|
||||||
@@ -1062,7 +1068,7 @@ docker compose -f deploy/compose.dev.yml down # погасить ст
|
|||||||
> `Deal.Api/Sources/SourceIngressGrpcService` (`sources.proto` → `PushSource`, proto → домен через
|
> `Deal.Api/Sources/SourceIngressGrpcService` (`sources.proto` → `PushSource`, proto → домен через
|
||||||
> `SourceProtoMapper`, тенант — `IngressTenantResolver`, превью — `TelegramSourceIngestObserver`).
|
> `SourceProtoMapper`, тенант — `IngressTenantResolver`, превью — `TelegramSourceIngestObserver`).
|
||||||
> `TelegramIngressService` обслуживает только `SyncDialogs`/`ReportStatus`.
|
> `TelegramIngressService` обслуживает только `SyncDialogs`/`ReportStatus`.
|
||||||
- Эндпоинты 1:1 api-map §3.3 (14 шт.): статус (§4.9 — live-поля фазы, `account` из KV, `monitored` из
|
- Эндпоинты 1:1 api-map §3.3 (14 шт.): статус (§4.9 — live-поля фазы, `account` — живое имя из telegram-service (KV `tgAccount` — фолбэк), `connected` = авторизация `phase=ready` (не транспортный флаг), `monitored` из
|
||||||
`count(Dialogs WHERE Monitor)`, `keysSet`), start-phone/start-qr/send-code/send-password/logout,
|
`count(Dialogs WHERE Monitor)`, `keysSet`), start-phone/start-qr/send-code/send-password/logout,
|
||||||
QR-image (SVG, Net.Codecrete.QrCodeGenerator; 404 «QR не активен — начните вход по QR»), dialogs/refresh/
|
QR-image (SVG, Net.Codecrete.QrCodeGenerator; 404 «QR не активен — начните вход по QR»), dialogs/refresh/
|
||||||
monitor-all/backfill-all/{id}/monitor/{id}/backfill (сервер-only)/preview. Boot-заглушка `GET /api/tg/status`
|
monitor-all/backfill-all/{id}/monitor/{id}/backfill (сервер-only)/preview. Boot-заглушка `GET /api/tg/status`
|
||||||
|
|||||||
Reference in New Issue
Block a user