Files
vps-tracker/.cursor/plans/evobgp__nats_5c5f192d.plan.md
T
2026-09-25 19:49:27 +07:00

6.7 KiB
Raw Blame History

name, overview, todos, isProject
name overview todos isProject
EvoBGP без NATS Код EvoBGP уже работает без NATS и прочих брокеров: очередь задач in-process в `evobgp-all`. Оптимизировать Go под ваш compose не требуется — достаточно подчистить сам compose (убрать мёртвый сервис nats) и по желанию ужесточить prod-флаги.
id content status
compose-drop-nats Удалить nats + depends_on + runtime-logs entry из production.example (и sync microvps-full при необходимости) pending
id content status
docs-align Синхронизировать quickstart/architecture: NATS optional, minimal stack без брокера pending
id content status
server-apply На сервере применить тот же compose diff (без правок Go) pending
false

Анализ compose без NATS: нужен ли рефакторинг EvoBGP?

Вердикт

Нет — оптимизировать текущий Go-код под этот compose не нужно. Приложение уже спроектировано как monolith (evobgp-all) с in-process очередью. NATS в репозитории — задел на будущее, не рабочая зависимость.

Как устроен runtime без брокера

flowchart LR
  subgraph host [Хост /opt/evobgp]
    Web[evobgp-web nginx]
    All[evobgp-all]
    PG[(postgres)]
    Bird[bird2]
    Agent[evobgp-agent]
    Edge[evobgp-edge Traefik]
  end
  Edge --> Web
  Web -->|"/v1 proxy"| All
  All --> PG
  All --> Bird
  Agent --> Bird
  All -->|"HTTP wake NODE_DISPATCH"| Agent
Компонент Роль для кода Нужен ли NATS?
evobgp-all API + jobs + scheduler/ingest/render/deploy in-process Нет
postgres Store + job_audit reclaim (ADR-001) Нет
bird2 + evobgp-agent Локальный speaker / birdc Нет
EVOBGP_NODE_DISPATCH_ENABLED HTTP POST на remote agent (internal/nodedispatch) Нет
EVOBGP_BROKER_URL Только internal/broker/connect.go — лог, если URL задан Нет
NATS-контейнер Не читается бинарником Можно удалить

Источник правды: docs/architecture.md, docs/adr/001-durable-job-queue.md — «NATS JetStream remains optional (EVOBGP_BROKER_URL logged only)».

Ваш закомментированный # EVOBGP_BROKER_URL — корректно. Даже если URL оставить, поведение jobs не изменится.

Что в вашем YAML лишнее / рискованное (ops, не код)

Можно убрать без правок Go:

  1. Сервис nats целиком.
  2. depends_on: nats у evobgp-all.
  3. nats из списка SERVICES в stack-runtime-logs.
  4. Проброс 4222:4222 (если не нужен снаружи).

Prometheus — тоже опционален для функционала: скрейпит /metrics с evobgp-all. Удаление не ломает BGP/UI; ломает только локальный monitoring. Код менять не нужно.

Не трогать без замены: postgres, bird2, evobgp-agent, evobgp-all, evobgp-web, evobgp-edge, volumes bird_* / pgdata / ACME.

Prod-флаги в compose (важно, но это конфиг, не рефакторинг)

Сейчас example и ваш файл совпадают с lab-режимом:

  • EVOBGP_SEED_DEMO: "1" → доступен Bearer dev (см. docs/access.md, docs/production-checklist.md)
  • EVOBGP_DEV_INSECURE: "1" — dead/lab флаг; при EVOBGP_PRODUCTION=1 процесс не стартует (internal/config/production.go)
  • POSTGRES_PASSWORD: evobgp + sslmode=disable — ок только в private Docker network
  • EVOBGP_BUNDLE_SEED_HEX захардкожен в yaml — ок для lab; в бою лучше свой секрет в .env

Для «настоящего» prod достаточно env, не переписывания архитектуры.

Нужны ли изменения в коде проекта?

Вопрос Ответ
Убрать/упростить internal/broker? Не обязательно: пакет уже no-op без URL
Переписать jobs на PG-only? Уже есть durable reclaim через job_audit; брокер не требуется
Вырезать NATS из бинарника/зависимостей? В Go NATS-клиент как runtime consumer не подключён — нечего «оптимизировать»
Менять evobgp-all под monolith? Уже monolith; reference-воркеры (scheduler/ingest/…) вам не нужны

Итог: отказ от NATS — правильное решение для текущего этапа; код уже соответствует этой модели. Оптимизация = правка compose/docs, не приложения.

Рекомендуемые действия (если согласуете выполнение)

Только инфраструктура/документация в репо:

  1. Обновить deploy/compose/docker-compose.production.example.yaml (и при необходимости stack.microvps-full.yaml / docker-compose.microvps-full.yaml): удалить nats, depends_on, порт 4222, упоминание в runtime-logs.
  2. Подправить docs/quickstart.md / architecture: NATS — optional future, не часть minimal production stack.
  3. На сервере: тот же diff в /opt/evobgp/docker-compose.yaml → docker compose up -d (nats исчезнет).

Go/CI/образы — не трогать ради этого решения.

Опциональный hardening env на сервере (отдельно от «оптимизации кода»): EVOBGP_SEED_DEMO=0, убрать EVOBGP_DEV_INSECURE, при желании EVOBGP_PRODUCTION=1 + checklist.