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.
CI / changes (push) Successful in 5s
CI / openapi (push) Has been skipped
CI / go (push) Successful in 19s
CI / bird2 (push) Successful in 15s
CI / docker-images (deploy/docker/bird2/Dockerfile, , evobgp-bird2) (push) Successful in 39s
CI / docker-images (deploy/docker/evobgp-agent/Dockerfile, , evobgp-agent) (push) Successful in 1m7s
CI / docker-images (deploy/docker/evobgp-web/Dockerfile, , evobgp-web) (push) Successful in 56s
CI / docker-images (deploy/docker/evobgp-web/Dockerfile, evobgp-all, evobgp-web-all) (push) Successful in 53s
CI / docker-images (evobgp-all, 1, deploy/docker/gobinary/Dockerfile, , evobgp-all) (push) Successful in 1m26s
CI / docker-images (evobgp-api, 1, deploy/docker/gobinary/Dockerfile, , evobgp-api) (push) Successful in 1m27s
CI / docker-images (evobgp-deploy, 0, deploy/docker/gobinary/Dockerfile, , evobgp-deploy) (push) Successful in 1m31s
CI / docker-images (evobgp-ingest, 0, deploy/docker/gobinary/Dockerfile, , evobgp-ingest) (push) Successful in 1m36s
CI / docker-images (evobgp-node, 0, deploy/docker/gobinary/Dockerfile, , evobgp-node) (push) Successful in 1m20s
CI / docker-images (evobgp-render, 0, deploy/docker/gobinary/Dockerfile, , evobgp-render) (push) Successful in 1m30s
CI / docker-images (evobgp-scheduler, 0, deploy/docker/gobinary/Dockerfile, , evobgp-scheduler) (push) Successful in 1m23s

This commit is contained in:
Denozordec
2026-04-05 18:44:47 +07:00
parent acc0608432
commit 7fac79c2e0
11 changed files with 224 additions and 71 deletions
+1 -1
View File
@@ -55,7 +55,7 @@ Job **changes** вычисляет два флага:
git.shts.su/<owner_lowercase>/<имя>:<тег> git.shts.su/<owner_lowercase>/<имя>:<тег>
``` ```
где `<имя>` — одно из: `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>`. Теги: `latest`, короткий SHA (7 символов), `sha-<полный_commit_sha>`.
+17
View File
@@ -161,36 +161,49 @@ jobs:
dockerfile: deploy/docker/gobinary/Dockerfile dockerfile: deploy/docker/gobinary/Dockerfile
bin: evobgp-api bin: evobgp-api
birdc: "1" birdc: "1"
evobgp_upstream: ""
- image: evobgp-all - image: evobgp-all
dockerfile: deploy/docker/gobinary/Dockerfile dockerfile: deploy/docker/gobinary/Dockerfile
bin: evobgp-all bin: evobgp-all
birdc: "1" birdc: "1"
evobgp_upstream: ""
- image: evobgp-scheduler - image: evobgp-scheduler
dockerfile: deploy/docker/gobinary/Dockerfile dockerfile: deploy/docker/gobinary/Dockerfile
bin: evobgp-scheduler bin: evobgp-scheduler
birdc: "0" birdc: "0"
evobgp_upstream: ""
- image: evobgp-ingest - image: evobgp-ingest
dockerfile: deploy/docker/gobinary/Dockerfile dockerfile: deploy/docker/gobinary/Dockerfile
bin: evobgp-ingest bin: evobgp-ingest
birdc: "0" birdc: "0"
evobgp_upstream: ""
- image: evobgp-render - image: evobgp-render
dockerfile: deploy/docker/gobinary/Dockerfile dockerfile: deploy/docker/gobinary/Dockerfile
bin: evobgp-render bin: evobgp-render
birdc: "0" birdc: "0"
evobgp_upstream: ""
- image: evobgp-deploy - image: evobgp-deploy
dockerfile: deploy/docker/gobinary/Dockerfile dockerfile: deploy/docker/gobinary/Dockerfile
bin: evobgp-deploy bin: evobgp-deploy
birdc: "0" birdc: "0"
evobgp_upstream: ""
- image: evobgp-node - image: evobgp-node
dockerfile: deploy/docker/gobinary/Dockerfile dockerfile: deploy/docker/gobinary/Dockerfile
bin: evobgp-node bin: evobgp-node
birdc: "0" birdc: "0"
evobgp_upstream: ""
- image: evobgp-web - image: evobgp-web
dockerfile: deploy/docker/evobgp-web/Dockerfile 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 - image: evobgp-agent
dockerfile: deploy/docker/evobgp-agent/Dockerfile dockerfile: deploy/docker/evobgp-agent/Dockerfile
evobgp_upstream: ""
- image: evobgp-bird2 - image: evobgp-bird2
dockerfile: deploy/docker/bird2/Dockerfile dockerfile: deploy/docker/bird2/Dockerfile
evobgp_upstream: ""
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@@ -225,6 +238,7 @@ jobs:
IMAGE: ${{ matrix.image }} IMAGE: ${{ matrix.image }}
BIN: ${{ matrix.bin }} BIN: ${{ matrix.bin }}
BIRDC: ${{ matrix.birdc }} BIRDC: ${{ matrix.birdc }}
EVOBGP_UPSTREAM: ${{ matrix.evobgp_upstream }}
run: | run: |
set -euxo pipefail set -euxo pipefail
WS="${{ github.workspace }}" WS="${{ github.workspace }}"
@@ -236,6 +250,9 @@ jobs:
BUILD_ARGS+=(--build-arg "BIN=${BIN}") BUILD_ARGS+=(--build-arg "BIN=${BIN}")
BUILD_ARGS+=(--build-arg "INSTALL_BIRDC=${BIRDC:-0}") BUILD_ARGS+=(--build-arg "INSTALL_BIRDC=${BIRDC:-0}")
fi fi
if [ -n "${EVOBGP_UPSTREAM:-}" ]; then
BUILD_ARGS+=(--build-arg "EVOBGP_UPSTREAM=${EVOBGP_UPSTREAM}")
fi
if [ "$DO_PUSH" = "true" ]; then if [ "$DO_PUSH" = "true" ]; then
IMG="git.shts.su/${OWNER_LC}/${IMAGE}" IMG="git.shts.su/${OWNER_LC}/${IMAGE}"
+7 -3
View File
@@ -21,15 +21,19 @@ Control plane для управления префиксами, модулями
```powershell ```powershell
cd deploy\compose cd deploy\compose
docker compose --profile microvps up -d --build Copy-Item .env.example .env -Force # EVOBGP_REGISTRY=git.shts.su/<owner>
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): Эталонный стек (несколько сервисов, NATS, веб UI, Prometheus):
```powershell ```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). Подробности портов и переменных окружения — в [docs/quickstart.md](docs/quickstart.md) и в комментариях в [deploy/compose/docker-compose.yaml](deploy/compose/docker-compose.yaml).
+5
View File
@@ -0,0 +1,5 @@
# Скопируйте в .env рядом с docker-compose.yaml и подставьте своего владельца реестра (нижний регистр).
# Перед первым запуском: docker login git.shts.su
EVOBGP_REGISTRY=git.shts.su/denozord
EVOBGP_IMAGE_TAG=latest
+5 -9
View File
@@ -1,15 +1,13 @@
# Устаревший минимальный стек только bird2 + agent. Полные профили reference / microvps: # Устаревший минимальный стек только bird2 + agent (образы из реестра, см. .env.example). Полный стек:
# docker compose --profile reference up -d --build -f deploy/compose/docker-compose.yaml # cd deploy/compose && docker compose pull && docker compose --profile reference up -d
# docker compose --profile microvps up -d --build -f deploy/compose/docker-compose.yaml # cd deploy/compose && docker compose pull && docker compose --profile microvps up -d
# #
# Для входящего BGP (TCP/179) на Linux часто нужен network_mode: host или macvlan — см. план §4.1. # Для входящего BGP (TCP/179) на Linux часто нужен network_mode: host или macvlan — см. план §4.1.
name: evobgp-bgp-stack name: evobgp-bgp-stack
services: services:
bird2: bird2:
build: image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-bird2:${EVOBGP_IMAGE_TAG:-latest}
context: ../..
dockerfile: deploy/docker/bird2/Dockerfile
restart: unless-stopped restart: unless-stopped
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
@@ -19,9 +17,7 @@ services:
# network_mode: "host" # раскомментируйте при анонсе BGP с хоста # network_mode: "host" # раскомментируйте при анонсе BGP с хоста
evobgp-agent: evobgp-agent:
build: image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-agent:${EVOBGP_IMAGE_TAG:-latest}
context: ../..
dockerfile: deploy/docker/evobgp-agent/Dockerfile
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- bird2 - bird2
@@ -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
+62 -53
View File
@@ -1,12 +1,18 @@
# EvoBGP Compose: профили `reference` (эталон) и `microvps` (одна VPS). # EvoBGP Compose: профили `reference` (эталон) и `microvps` (одна VPS).
# #
# Образы EvoBGP тянутся из Container Registry (не собираются здесь). Префикс и тег — .env (см. .env.example):
# EVOBGP_REGISTRY=git.shts.su/<owner> EVOBGP_IMAGE_TAG=latest
# Перед up: docker login git.shts.su && docker compose pull
#
# Запуск: # Запуск:
# docker compose --profile reference up -d --build # docker compose --profile reference up -d
# docker compose --profile microvps up -d --build # 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. # 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). # 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_sqlite из плана (без контейнера Postgres): требует реализации store на SQLite в приложении;
# пока используйте microvps с контейнерным Postgres (единые миграции). # пока используйте microvps с контейнерным Postgres (единые миграции).
@@ -36,7 +42,7 @@ x-env-micro: &env-micro
services: services:
postgres: postgres:
profiles: ["reference", "microvps"] profiles: ["reference", "microvps", "microvps-full"]
image: postgres:16-alpine image: postgres:16-alpine
restart: unless-stopped restart: unless-stopped
environment: environment:
@@ -58,7 +64,7 @@ services:
memory: 384M memory: 384M
nats: nats:
profiles: ["reference"] profiles: ["reference", "microvps-full"]
image: nats:2.10-alpine image: nats:2.10-alpine
restart: unless-stopped restart: unless-stopped
command: ["-js", "-m", "8222"] command: ["-js", "-m", "8222"]
@@ -72,12 +78,7 @@ services:
evobgp-api: evobgp-api:
profiles: ["reference"] profiles: ["reference"]
build: image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-api:${EVOBGP_IMAGE_TAG:-latest}
context: ../..
dockerfile: deploy/docker/gobinary/Dockerfile
args:
BIN: evobgp-api
INSTALL_BIRDC: "1"
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
postgres: postgres:
@@ -111,12 +112,7 @@ services:
evobgp-scheduler: evobgp-scheduler:
profiles: ["reference"] profiles: ["reference"]
build: image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-scheduler:${EVOBGP_IMAGE_TAG:-latest}
context: ../..
dockerfile: deploy/docker/gobinary/Dockerfile
args:
BIN: evobgp-scheduler
INSTALL_BIRDC: "0"
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
postgres: postgres:
@@ -138,12 +134,7 @@ services:
evobgp-ingest: evobgp-ingest:
profiles: ["reference"] profiles: ["reference"]
build: image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-ingest:${EVOBGP_IMAGE_TAG:-latest}
context: ../..
dockerfile: deploy/docker/gobinary/Dockerfile
args:
BIN: evobgp-ingest
INSTALL_BIRDC: "0"
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
postgres: postgres:
@@ -161,12 +152,7 @@ services:
evobgp-render: evobgp-render:
profiles: ["reference"] profiles: ["reference"]
build: image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-render:${EVOBGP_IMAGE_TAG:-latest}
context: ../..
dockerfile: deploy/docker/gobinary/Dockerfile
args:
BIN: evobgp-render
INSTALL_BIRDC: "0"
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
postgres: postgres:
@@ -184,12 +170,7 @@ services:
evobgp-deploy: evobgp-deploy:
profiles: ["reference"] profiles: ["reference"]
build: image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-deploy:${EVOBGP_IMAGE_TAG:-latest}
context: ../..
dockerfile: deploy/docker/gobinary/Dockerfile
args:
BIN: evobgp-deploy
INSTALL_BIRDC: "0"
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
postgres: postgres:
@@ -210,9 +191,7 @@ services:
evobgp-web: evobgp-web:
profiles: ["reference"] profiles: ["reference"]
build: image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-web:${EVOBGP_IMAGE_TAG:-latest}
context: ../..
dockerfile: deploy/docker/evobgp-web/Dockerfile
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- evobgp-api - evobgp-api
@@ -226,13 +205,8 @@ services:
memory: 128M memory: 128M
evobgp-all: evobgp-all:
profiles: ["microvps"] profiles: ["microvps", "microvps-full"]
build: image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-all:${EVOBGP_IMAGE_TAG:-latest}
context: ../..
dockerfile: deploy/docker/gobinary/Dockerfile
args:
BIN: evobgp-all
INSTALL_BIRDC: "1"
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
postgres: postgres:
@@ -259,11 +233,48 @@ services:
cpus: "1.0" cpus: "1.0"
memory: 512M 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: bird2:
profiles: ["reference", "microvps"] profiles: ["reference", "microvps", "microvps-full"]
build: image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-bird2:${EVOBGP_IMAGE_TAG:-latest}
context: ../..
dockerfile: deploy/docker/bird2/Dockerfile
restart: unless-stopped restart: unless-stopped
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
@@ -282,10 +293,8 @@ services:
memory: 256M memory: 256M
evobgp-agent: evobgp-agent:
profiles: ["reference", "microvps"] profiles: ["reference", "microvps", "microvps-full"]
build: image: ${EVOBGP_REGISTRY:-git.shts.su/denozord}/evobgp-agent:${EVOBGP_IMAGE_TAG:-latest}
context: ../..
dockerfile: deploy/docker/evobgp-agent/Dockerfile
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- bird2 - bird2
+3 -1
View File
@@ -8,5 +8,7 @@ COPY web/ ./
RUN npm run build RUN npm run build
FROM public.ecr.aws/docker/library/nginx:1.27-alpine 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 COPY --from=build /web/build /usr/share/nginx/html
+13
View File
@@ -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"]
+2
View File
@@ -91,6 +91,8 @@ flowchart LR
Внутри `evobgp-all` все воркеры используют **тот же** `store` и `jobs.Registry`, что и HTTP handlers, поэтому `module_refresh` выполняется в том же процессе без HTTP. Внутри `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). 1. Оператор (роль `operator` или выше по политике) изменяет модули и запускает цепочку, приводящую к новой **ревизии** (часть шагов может быть асинхронной через jobs — см. OpenAPI).
+50 -4
View File
@@ -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-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-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-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-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` | | `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 git.shts.su/denozord/evobgp-api:latest
``` ```
Для полного стека удобнее **Compose** из репозитория: по умолчанию он собирает из исходников (`--build`). Чтобы использовать **уже скачанные** образы из реестра, задайте в override-файле или правке `deploy/compose/docker-compose.yaml` у сервисов поле **`image:`** вместо **`build:`** с тем же префиксом `git.shts.su/<owner>/...` и тегом (`: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/<owner>` (владелец в **нижнем регистре**), `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 ## Вариант 1: Docker, профиль microvps
@@ -71,7 +72,10 @@ docker run --rm -p 8080:8080 `
```powershell ```powershell
cd deploy\compose 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 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://<IP-вашей-VPS>:3000`. Health API: `http://<IP>:8080/v1/health`.
Остановка (если поднимали с двумя `-f`):
```powershell
docker compose -f docker-compose.yaml -f docker-compose.microvps-full.yaml --profile microvps-full down
```
## Вариант 2: Docker, профиль reference ## Вариант 2: Docker, профиль reference
Эталонное разбиение: отдельные контейнеры `evobgp-api`, `evobgp-scheduler`, `evobgp-ingest`, `evobgp-render`, `evobgp-deploy`, сервис **NATS JetStream** (в compose; привязка очереди задач к брокеру — следующая итерация), веб UI за nginx, опционально Prometheus. Эталонное разбиение: отдельные контейнеры `evobgp-api`, `evobgp-scheduler`, `evobgp-ingest`, `evobgp-render`, `evobgp-deploy`, сервис **NATS JetStream** (в compose; привязка очереди задач к брокеру — следующая итерация), веб UI за nginx, опционально Prometheus.
```powershell ```powershell
cd deploy\compose 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
``` ```
Полезные порты: Полезные порты: