From 7fac79c2e00d3b7f583410e4a72f21b051f1b8e1 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Sun, 5 Apr 2026 18:44:47 +0700 Subject: [PATCH] docs: update README and Docker Compose configurations to clarify usage of pre-built images from the Container Registry, introduce the new microvps-full profile with Web UI, NATS, and Prometheus, and enhance quickstart instructions for improved deployment guidance. --- .gitea/README.md | 2 +- .gitea/workflows/ci.yaml | 17 +++ README.md | 10 +- deploy/compose/.env.example | 5 + deploy/compose/bgp-stack.compose.yaml | 14 +-- .../compose/docker-compose.microvps-full.yaml | 59 +++++++++ deploy/compose/docker-compose.yaml | 115 ++++++++++-------- deploy/docker/evobgp-web/Dockerfile | 4 +- deploy/prometheus/prometheus-microvps.yml | 13 ++ docs/architecture.md | 2 + docs/quickstart.md | 54 +++++++- 11 files changed, 224 insertions(+), 71 deletions(-) create mode 100644 deploy/compose/.env.example create mode 100644 deploy/compose/docker-compose.microvps-full.yaml create mode 100644 deploy/prometheus/prometheus-microvps.yml diff --git a/.gitea/README.md b/.gitea/README.md index 527d6be..068fd1c 100644 --- a/.gitea/README.md +++ b/.gitea/README.md @@ -55,7 +55,7 @@ Job **changes** вычисляет два флага: git.shts.su//<имя>:<тег> ``` -где `<имя>` — одно из: `evobgp-api`, `evobgp-all`, `evobgp-scheduler`, `evobgp-ingest`, `evobgp-render`, `evobgp-deploy`, `evobgp-node`, `evobgp-web`, `evobgp-agent`, `evobgp-bird2`. +где `<имя>` — одно из: `evobgp-api`, `evobgp-all`, `evobgp-scheduler`, `evobgp-ingest`, `evobgp-render`, `evobgp-deploy`, `evobgp-node`, `evobgp-web`, `evobgp-web-all` (UI с прокси на `evobgp-all` для профиля Compose `microvps-full`), `evobgp-agent`, `evobgp-bird2`. Теги: `latest`, короткий SHA (7 символов), `sha-<полный_commit_sha>`. diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index d131ef7..b86c415 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -161,36 +161,49 @@ jobs: dockerfile: deploy/docker/gobinary/Dockerfile bin: evobgp-api birdc: "1" + evobgp_upstream: "" - image: evobgp-all dockerfile: deploy/docker/gobinary/Dockerfile bin: evobgp-all birdc: "1" + evobgp_upstream: "" - image: evobgp-scheduler dockerfile: deploy/docker/gobinary/Dockerfile bin: evobgp-scheduler birdc: "0" + evobgp_upstream: "" - image: evobgp-ingest dockerfile: deploy/docker/gobinary/Dockerfile bin: evobgp-ingest birdc: "0" + evobgp_upstream: "" - image: evobgp-render dockerfile: deploy/docker/gobinary/Dockerfile bin: evobgp-render birdc: "0" + evobgp_upstream: "" - image: evobgp-deploy dockerfile: deploy/docker/gobinary/Dockerfile bin: evobgp-deploy birdc: "0" + evobgp_upstream: "" - image: evobgp-node dockerfile: deploy/docker/gobinary/Dockerfile bin: evobgp-node birdc: "0" + evobgp_upstream: "" - image: evobgp-web dockerfile: deploy/docker/evobgp-web/Dockerfile + evobgp_upstream: "" + - image: evobgp-web-all + dockerfile: deploy/docker/evobgp-web/Dockerfile + evobgp_upstream: evobgp-all - image: evobgp-agent dockerfile: deploy/docker/evobgp-agent/Dockerfile + evobgp_upstream: "" - image: evobgp-bird2 dockerfile: deploy/docker/bird2/Dockerfile + evobgp_upstream: "" steps: - uses: actions/checkout@v4 @@ -225,6 +238,7 @@ jobs: IMAGE: ${{ matrix.image }} BIN: ${{ matrix.bin }} BIRDC: ${{ matrix.birdc }} + EVOBGP_UPSTREAM: ${{ matrix.evobgp_upstream }} run: | set -euxo pipefail WS="${{ github.workspace }}" @@ -236,6 +250,9 @@ jobs: BUILD_ARGS+=(--build-arg "BIN=${BIN}") BUILD_ARGS+=(--build-arg "INSTALL_BIRDC=${BIRDC:-0}") fi + if [ -n "${EVOBGP_UPSTREAM:-}" ]; then + BUILD_ARGS+=(--build-arg "EVOBGP_UPSTREAM=${EVOBGP_UPSTREAM}") + fi if [ "$DO_PUSH" = "true" ]; then IMG="git.shts.su/${OWNER_LC}/${IMAGE}" diff --git a/README.md b/README.md index 3eebb08..0909095 100644 --- a/README.md +++ b/README.md @@ -21,15 +21,19 @@ Control plane для управления префиксами, модулями ```powershell cd deploy\compose -docker compose --profile microvps up -d --build +Copy-Item .env.example .env -Force # EVOBGP_REGISTRY=git.shts.su/ +docker login git.shts.su +docker compose --profile microvps pull +docker compose --profile microvps up -d ``` -Профиль **microvps** поднимает `evobgp-all`, PostgreSQL, BIRD2 и агент. API по умолчанию: `http://localhost:8080`. +Профиль **microvps** поднимает `evobgp-all`, PostgreSQL, BIRD2 и агент (образы из Container Registry, без `--build`). API по умолчанию: `http://localhost:8080`. Эталонный стек (несколько сервисов, NATS, веб UI, Prometheus): ```powershell -docker compose --profile reference up -d --build +docker compose --profile reference pull +docker compose --profile reference up -d ``` Подробности портов и переменных окружения — в [docs/quickstart.md](docs/quickstart.md) и в комментариях в [deploy/compose/docker-compose.yaml](deploy/compose/docker-compose.yaml). diff --git a/deploy/compose/.env.example b/deploy/compose/.env.example new file mode 100644 index 0000000..b3cc85a --- /dev/null +++ b/deploy/compose/.env.example @@ -0,0 +1,5 @@ +# Скопируйте в .env рядом с docker-compose.yaml и подставьте своего владельца реестра (нижний регистр). +# Перед первым запуском: docker login git.shts.su + +EVOBGP_REGISTRY=git.shts.su/denozord +EVOBGP_IMAGE_TAG=latest diff --git a/deploy/compose/bgp-stack.compose.yaml b/deploy/compose/bgp-stack.compose.yaml index 7c79f5c..f19696f 100644 --- a/deploy/compose/bgp-stack.compose.yaml +++ b/deploy/compose/bgp-stack.compose.yaml @@ -1,15 +1,13 @@ -# Устаревший минимальный стек только bird2 + agent. Полные профили reference / microvps: -# docker compose --profile reference up -d --build -f deploy/compose/docker-compose.yaml -# docker compose --profile microvps up -d --build -f deploy/compose/docker-compose.yaml +# Устаревший минимальный стек только bird2 + agent (образы из реестра, см. .env.example). Полный стек: +# cd deploy/compose && docker compose pull && docker compose --profile reference up -d +# cd deploy/compose && docker compose pull && docker compose --profile microvps up -d # # Для входящего BGP (TCP/179) на Linux часто нужен network_mode: host или macvlan — см. план §4.1. name: evobgp-bgp-stack services: bird2: - build: - context: ../.. - dockerfile: deploy/docker/bird2/Dockerfile + image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-bird2:${EVOBGP_IMAGE_TAG:-latest} restart: unless-stopped cap_add: - NET_ADMIN @@ -19,9 +17,7 @@ services: # network_mode: "host" # раскомментируйте при анонсе BGP с хоста evobgp-agent: - build: - context: ../.. - dockerfile: deploy/docker/evobgp-agent/Dockerfile + image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-agent:${EVOBGP_IMAGE_TAG:-latest} restart: unless-stopped depends_on: - bird2 diff --git a/deploy/compose/docker-compose.microvps-full.yaml b/deploy/compose/docker-compose.microvps-full.yaml new file mode 100644 index 0000000..125cf85 --- /dev/null +++ b/deploy/compose/docker-compose.microvps-full.yaml @@ -0,0 +1,59 @@ +# Дополнительный файл Compose: профиль microvps-full + ужатые лимиты под хост ~1 ГиБ RAM. +# +# Запуск (PowerShell, из каталога deploy\compose): сначала .env из .env.example, docker login git.shts.su, docker compose pull +# docker compose -f docker-compose.yaml -f docker-compose.microvps-full.yaml --profile microvps-full up -d +# +# Остановка: +# docker compose -f docker-compose.yaml -f docker-compose.microvps-full.yaml --profile microvps-full down +# +# Лимиты под хост ~1 ГиБ: сумма лимитов контейнеров ~800 МиБ + запас ОС/Docker. При OOM увеличьте RAM VPS или уберите prometheus/nats из профиля (отдельная правка compose). + +services: + evobgp-all: + environment: + EVOBGP_BROKER_URL: nats://nats:4222 + deploy: + resources: + limits: + cpus: "0.85" + memory: 280M + + postgres: + deploy: + resources: + limits: + cpus: "0.45" + memory: 180M + + bird2: + deploy: + resources: + limits: + memory: 96M + + evobgp-agent: + deploy: + resources: + limits: + memory: 48M + + nats: + deploy: + resources: + limits: + cpus: "0.2" + memory: 48M + + evobgp-web-microvps: + deploy: + resources: + limits: + cpus: "0.3" + memory: 48M + + prometheus-microvps: + deploy: + resources: + limits: + cpus: "0.25" + memory: 128M diff --git a/deploy/compose/docker-compose.yaml b/deploy/compose/docker-compose.yaml index 7a295fe..6dcb791 100644 --- a/deploy/compose/docker-compose.yaml +++ b/deploy/compose/docker-compose.yaml @@ -1,12 +1,18 @@ # EvoBGP Compose: профили `reference` (эталон) и `microvps` (одна VPS). # +# Образы EvoBGP тянутся из Container Registry (не собираются здесь). Префикс и тег — .env (см. .env.example): +# EVOBGP_REGISTRY=git.shts.su/ EVOBGP_IMAGE_TAG=latest +# Перед up: docker login git.shts.su && docker compose pull +# # Запуск: -# docker compose --profile reference up -d --build -# docker compose --profile microvps up -d --build +# docker compose --profile reference up -d +# docker compose --profile microvps up -d +# microVPS ~1 ГиБ + Web UI — docs/quickstart.md и docker-compose.microvps-full.yaml # # reference: 5× Go (api + scheduler + ingest + render + deploy) + postgres + NATS JetStream + bird2 + agent + web. # Async jobs выполняются in-process в evobgp-api (jobs.Registry); NATS — задел под брокер (см. docs/architecture.md). -# microvps: evobgp-all + postgres + bird2 + agent (без брокера). +# microvps: evobgp-all + postgres + bird2 + agent (без брокера и без UI). +# microvps-full: как microvps + evobgp-web-microvps (порт 3000) + nats + prometheus-microvps (порт 9090). # # Опция microVPS_sqlite из плана (без контейнера Postgres): требует реализации store на SQLite в приложении; # пока используйте microvps с контейнерным Postgres (единые миграции). @@ -36,7 +42,7 @@ x-env-micro: &env-micro services: postgres: - profiles: ["reference", "microvps"] + profiles: ["reference", "microvps", "microvps-full"] image: postgres:16-alpine restart: unless-stopped environment: @@ -58,7 +64,7 @@ services: memory: 384M nats: - profiles: ["reference"] + profiles: ["reference", "microvps-full"] image: nats:2.10-alpine restart: unless-stopped command: ["-js", "-m", "8222"] @@ -72,12 +78,7 @@ services: evobgp-api: profiles: ["reference"] - build: - context: ../.. - dockerfile: deploy/docker/gobinary/Dockerfile - args: - BIN: evobgp-api - INSTALL_BIRDC: "1" + image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-api:${EVOBGP_IMAGE_TAG:-latest} restart: unless-stopped depends_on: postgres: @@ -111,12 +112,7 @@ services: evobgp-scheduler: profiles: ["reference"] - build: - context: ../.. - dockerfile: deploy/docker/gobinary/Dockerfile - args: - BIN: evobgp-scheduler - INSTALL_BIRDC: "0" + image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-scheduler:${EVOBGP_IMAGE_TAG:-latest} restart: unless-stopped depends_on: postgres: @@ -138,12 +134,7 @@ services: evobgp-ingest: profiles: ["reference"] - build: - context: ../.. - dockerfile: deploy/docker/gobinary/Dockerfile - args: - BIN: evobgp-ingest - INSTALL_BIRDC: "0" + image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-ingest:${EVOBGP_IMAGE_TAG:-latest} restart: unless-stopped depends_on: postgres: @@ -161,12 +152,7 @@ services: evobgp-render: profiles: ["reference"] - build: - context: ../.. - dockerfile: deploy/docker/gobinary/Dockerfile - args: - BIN: evobgp-render - INSTALL_BIRDC: "0" + image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-render:${EVOBGP_IMAGE_TAG:-latest} restart: unless-stopped depends_on: postgres: @@ -184,12 +170,7 @@ services: evobgp-deploy: profiles: ["reference"] - build: - context: ../.. - dockerfile: deploy/docker/gobinary/Dockerfile - args: - BIN: evobgp-deploy - INSTALL_BIRDC: "0" + image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-deploy:${EVOBGP_IMAGE_TAG:-latest} restart: unless-stopped depends_on: postgres: @@ -210,9 +191,7 @@ services: evobgp-web: profiles: ["reference"] - build: - context: ../.. - dockerfile: deploy/docker/evobgp-web/Dockerfile + image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-web:${EVOBGP_IMAGE_TAG:-latest} restart: unless-stopped depends_on: - evobgp-api @@ -226,13 +205,8 @@ services: memory: 128M evobgp-all: - profiles: ["microvps"] - build: - context: ../.. - dockerfile: deploy/docker/gobinary/Dockerfile - args: - BIN: evobgp-all - INSTALL_BIRDC: "1" + profiles: ["microvps", "microvps-full"] + image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-all:${EVOBGP_IMAGE_TAG:-latest} restart: unless-stopped depends_on: postgres: @@ -259,11 +233,48 @@ services: cpus: "1.0" memory: 512M + # Web UI → evobgp-all (образ evobgp-web-all из реестра). Reference: сервис evobgp-web → evobgp-api. + evobgp-web-microvps: + profiles: ["microvps-full"] + image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-web-all:${EVOBGP_IMAGE_TAG:-latest} + restart: unless-stopped + depends_on: + - evobgp-all + ports: + - "3000:80" + logging: *default-logging + deploy: + resources: + limits: + cpus: "0.5" + memory: 128M + + prometheus-microvps: + profiles: ["microvps-full"] + image: prom/prometheus:v2.54.1 + restart: unless-stopped + depends_on: + - evobgp-all + ports: + - "9090:9090" + volumes: + - ../prometheus/prometheus-microvps.yml:/etc/prometheus/prometheus.yml:ro + - ../prometheus/alerts.yml:/etc/prometheus/alerts.yml:ro + command: + - --config.file=/etc/prometheus/prometheus.yml + - --storage.tsdb.path=/prometheus + - --storage.tsdb.retention.time=7d + - --web.enable-lifecycle + logging: *default-logging + deploy: + resources: + limits: + cpus: "0.35" + memory: 256M + bird2: - profiles: ["reference", "microvps"] - build: - context: ../.. - dockerfile: deploy/docker/bird2/Dockerfile + profiles: ["reference", "microvps", "microvps-full"] + image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-bird2:${EVOBGP_IMAGE_TAG:-latest} restart: unless-stopped cap_add: - NET_ADMIN @@ -282,10 +293,8 @@ services: memory: 256M evobgp-agent: - profiles: ["reference", "microvps"] - build: - context: ../.. - dockerfile: deploy/docker/evobgp-agent/Dockerfile + profiles: ["reference", "microvps", "microvps-full"] + image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-agent:${EVOBGP_IMAGE_TAG:-latest} restart: unless-stopped depends_on: - bird2 diff --git a/deploy/docker/evobgp-web/Dockerfile b/deploy/docker/evobgp-web/Dockerfile index e525cdf..ad66e29 100644 --- a/deploy/docker/evobgp-web/Dockerfile +++ b/deploy/docker/evobgp-web/Dockerfile @@ -8,5 +8,7 @@ COPY web/ ./ RUN npm run build FROM public.ecr.aws/docker/library/nginx:1.27-alpine -COPY deploy/docker/evobgp-web/nginx.conf /etc/nginx/conf.d/default.conf +ARG EVOBGP_UPSTREAM=evobgp-api +COPY deploy/docker/evobgp-web/nginx.conf /tmp/nginx-default.conf +RUN sed -e "s/evobgp-api/${EVOBGP_UPSTREAM}/g" /tmp/nginx-default.conf > /etc/nginx/conf.d/default.conf && rm -f /tmp/nginx-default.conf COPY --from=build /web/build /usr/share/nginx/html diff --git a/deploy/prometheus/prometheus-microvps.yml b/deploy/prometheus/prometheus-microvps.yml new file mode 100644 index 0000000..6095d93 --- /dev/null +++ b/deploy/prometheus/prometheus-microvps.yml @@ -0,0 +1,13 @@ +# Scrape для профиля compose microvps-full (метрики с evobgp-all). +global: + scrape_interval: 15s + evaluation_interval: 15s + +rule_files: + - /etc/prometheus/alerts.yml + +scrape_configs: + - job_name: evobgp-all + metrics_path: /metrics + static_configs: + - targets: ["evobgp-all:8080"] diff --git a/docs/architecture.md b/docs/architecture.md index fb899ec..5cb7b3d 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -91,6 +91,8 @@ flowchart LR Внутри `evobgp-all` все воркеры используют **тот же** `store` и `jobs.Registry`, что и HTTP handlers, поэтому `module_refresh` выполняется в том же процессе без HTTP. +Профиль Compose **`microvps-full`** добавляет к этому стеку **Web UI** (nginx → `evobgp-all`), **NATS** и **Prometheus** без отдельных контейнеров воркеров (функционально то же, что отдельные `scheduler`/`ingest`/… в reference). Запуск и лимиты под ~1 ГиБ RAM — в [quickstart.md](quickstart.md). + ## Поток: ревизия и бандл для ноды 1. Оператор (роль `operator` или выше по политике) изменяет модули и запускает цепочку, приводящую к новой **ревизии** (часть шагов может быть асинхронной через jobs — см. OpenAPI). diff --git a/docs/quickstart.md b/docs/quickstart.md index d391a53..aa19379 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -46,7 +46,8 @@ docker login git.shts.su | `evobgp-render` | Render | [packages/…/evobgp-render](https://git.shts.su/denozord/-/packages/container/evobgp-render/latest) | `docker pull git.shts.su/denozord/evobgp-render:latest` | | `evobgp-deploy` | Deploy | [packages/…/evobgp-deploy](https://git.shts.su/denozord/-/packages/container/evobgp-deploy/latest) | `docker pull git.shts.su/denozord/evobgp-deploy:latest` | | `evobgp-node` | Нода на площадке | [packages/…/evobgp-node](https://git.shts.su/denozord/-/packages/container/evobgp-node/latest) | `docker pull git.shts.su/denozord/evobgp-node:latest` | -| `evobgp-web` | Статика UI + nginx | [packages/…/evobgp-web](https://git.shts.su/denozord/-/packages/container/evobgp-web/latest) | `docker pull git.shts.su/denozord/evobgp-web:latest` | +| `evobgp-web` | Статика UI + nginx (прокси на **evobgp-api**) | [packages/…/evobgp-web](https://git.shts.su/denozord/-/packages/container/evobgp-web/latest) | `docker pull git.shts.su/denozord/evobgp-web:latest` | +| `evobgp-web-all` | Тот же UI, прокси на **evobgp-all** (профиль `microvps-full`) | [packages/…/evobgp-web-all](https://git.shts.su/denozord/-/packages/container/evobgp-web-all/latest) | `docker pull git.shts.su/denozord/evobgp-web-all:latest` | | `evobgp-agent` | Агент (bird2 в образе) | [packages/…/evobgp-agent](https://git.shts.su/denozord/-/packages/container/evobgp-agent/latest) | `docker pull git.shts.su/denozord/evobgp-agent:latest` | | `evobgp-bird2` | Только BIRD2 | [packages/…/evobgp-bird2](https://git.shts.su/denozord/-/packages/container/evobgp-bird2/latest) | `docker pull git.shts.su/denozord/evobgp-bird2:latest` | @@ -63,7 +64,7 @@ docker run --rm -p 8080:8080 ` git.shts.su/denozord/evobgp-api:latest ``` -Для полного стека удобнее **Compose** из репозитория: по умолчанию он собирает из исходников (`--build`). Чтобы использовать **уже скачанные** образы из реестра, задайте в override-файле или правке `deploy/compose/docker-compose.yaml` у сервисов поле **`image:`** вместо **`build:`** с тем же префиксом `git.shts.su//...` и тегом (`:latest` или зафиксированный `:sha-...` для воспроизводимости). Подробности CI и имён — [.gitea/README.md](../.gitea/README.md). +**Compose** в `deploy/compose` поднимает стек **только из образов реестра** (`image:`, без локальной сборки). Префикс и тег задаются через **`.env`** рядом с compose-файлами (шаблон — [deploy/compose/.env.example](../deploy/compose/.env.example)): `EVOBGP_REGISTRY=git.shts.su/` (владелец в **нижнем регистре**), `EVOBGP_IMAGE_TAG=latest` или SHA. Перед первым запуском: `docker login git.shts.su`, затем `docker compose pull` и `docker compose ... up -d`. Имена пакетов и CI — [.gitea/README.md](../.gitea/README.md). ## Вариант 1: Docker, профиль microvps @@ -71,7 +72,10 @@ docker run --rm -p 8080:8080 ` ```powershell cd deploy\compose -docker compose --profile microvps up -d --build +Copy-Item .env.example .env -Force # или создайте .env вручную; укажите EVOBGP_REGISTRY / EVOBGP_IMAGE_TAG +docker login git.shts.su +docker compose --profile microvps pull +docker compose --profile microvps up -d ``` Ожидаемые сервисы: @@ -97,13 +101,55 @@ docker compose --profile microvps down docker compose --profile microvps down -v ``` +## Вариант 1b: microVPS ~1 ГиБ RAM — полный набор + Web UI + +Один монолит **`evobgp-all`** (те же in-process воркеры, что и в варианте 1), плюс **статическая панель** за nginx (`evobgp-web-microvps`), **NATS JetStream** (как в reference, для `EVOBGP_BROKER_URL` и будущей интеграции) и **Prometheus** со скрейпом метрик с `evobgp-all`. Отдельные контейнеры `evobgp-scheduler` / `evobgp-ingest` / … не нужны — это не дублирование логики, а тот же код в одном процессе. + +**Рекомендация:** на хосте с ровно **1 ГиБ** включите **swap** (1–2 ГиБ), иначе при пиках возможен OOM. На **2+ ГиБ** можно поднять тот же профиль **без** второго файла — останутся более мягкие лимиты из основного `docker-compose.yaml`. + +Из каталога `deploy\compose` (как в варианте 1: `.env` из `.env.example`, при необходимости `docker login git.shts.su`): + +```powershell +# С ужатыми лимитами и EVOBGP_BROKER_URL=nats://… (ориентир под ~1 ГиБ RAM на хосте) +docker compose -f docker-compose.yaml -f docker-compose.microvps-full.yaml --profile microvps-full pull +docker compose -f docker-compose.yaml -f docker-compose.microvps-full.yaml --profile microvps-full up -d +``` + +Только профиль `microvps-full` и **без** файла `docker-compose.microvps-full.yaml` (лимиты как в базовом compose, без принудительной подстановки брокера в `evobgp-all`): + +```powershell +docker compose --profile microvps-full pull +docker compose --profile microvps-full up -d +``` + +При необходимости задайте брокер вручную для `evobgp-all` (override или `.env` рядом с compose): `EVOBGP_BROKER_URL=nats://nats:4222`. + +| Порт | Назначение | +|------|------------| +| **3000** | Web UI (nginx → API под капотом) | +| **8080** | Прямой HTTP API (`evobgp-all`) | +| **9090** | Prometheus (`prometheus-microvps`) | +| **4222** | NATS | +| **179** | BGP (BIRD2), как в варианте 1 | + +Проверка UI: откройте `http://:3000`. Health API: `http://:8080/v1/health`. + +Остановка (если поднимали с двумя `-f`): + +```powershell +docker compose -f docker-compose.yaml -f docker-compose.microvps-full.yaml --profile microvps-full down +``` + ## Вариант 2: Docker, профиль reference Эталонное разбиение: отдельные контейнеры `evobgp-api`, `evobgp-scheduler`, `evobgp-ingest`, `evobgp-render`, `evobgp-deploy`, сервис **NATS JetStream** (в compose; привязка очереди задач к брокеру — следующая итерация), веб UI за nginx, опционально Prometheus. ```powershell cd deploy\compose -docker compose --profile reference up -d --build +Copy-Item .env.example .env -Force +docker login git.shts.su +docker compose --profile reference pull +docker compose --profile reference up -d ``` Полезные порты: