Compare commits

..
2 Commits
Author SHA1 Message Date
Denozordec dc5e20e9b2 test: add validation for 'strict bind on' in BGP rendering tests. Enhance BGP test cases to ensure 'strict bind on' is included in the rendered output, improving test coverage for BGP template configurations.
CI / changes (push) Successful in 6s
CI / openapi (push) Has been skipped
CI / go (push) Successful in 24s
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, , evobgp-web) (push) Has been skipped
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, evobgp-all, evobgp-web-all) (push) Has been skipped
CI / docker-bird (push) Has been skipped
CI / bird2 (push) Successful in 15s
CI / docker-go (deploy/docker/evobgp-agent/Dockerfile, , evobgp-agent) (push) Successful in 55s
CI / docker-go (evobgp-api, 1, deploy/docker/gobinary/Dockerfile, , evobgp-api) (push) Has been cancelled
CI / docker-go (evobgp-deploy, 0, deploy/docker/gobinary/Dockerfile, , evobgp-deploy) (push) Has been cancelled
CI / docker-go (evobgp-ingest, 0, deploy/docker/gobinary/Dockerfile, , evobgp-ingest) (push) Has been cancelled
CI / docker-go (evobgp-node, 0, deploy/docker/gobinary/Dockerfile, , evobgp-node) (push) Has been cancelled
CI / docker-go (evobgp-render, 0, deploy/docker/gobinary/Dockerfile, , evobgp-render) (push) Has been cancelled
CI / docker-go (evobgp-all, 1, deploy/docker/gobinary/Dockerfile, , evobgp-all) (push) Has been cancelled
CI / docker-go (evobgp-scheduler, 0, deploy/docker/gobinary/Dockerfile, , evobgp-scheduler) (push) Has been cancelled
2026-04-06 14:00:41 +07:00
Denozordec 20e674c1f2 fix: adjust Postgres resource limits and healthcheck parameters. Increase memory limit to 256M and modify healthcheck retries and start period to improve stability. Add notes on shared memory requirements and healthcheck behavior in Docker configuration. 2026-04-06 13:50:48 +07:00
6 changed files with 183 additions and 3 deletions

No files matched your search

@@ -7,6 +7,7 @@
# 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).
# Postgres ниже ~240–256 МиБ часто не успевает пройти healthcheck / падает по памяти — не уменьшайте postgres без tuned postgresql.conf.
services:
evobgp-all:
@@ -23,7 +24,7 @@ services:
resources:
limits:
cpus: "0.45"
memory: 180M
memory: 256M
bird2:
deploy:
+4 -1
View File
@@ -45,6 +45,8 @@ services:
profiles: ["reference", "microvps", "microvps-full"]
image: postgres:16-alpine
restart: unless-stopped
# Дефолтный /dev/shm в Docker (64 МиБ) мало для Postgres; иначе ошибки shared memory при старте.
shm_size: "256mb"
environment:
POSTGRES_USER: evobgp
POSTGRES_PASSWORD: evobgp
@@ -55,7 +57,8 @@ services:
test: ["CMD-SHELL", "pg_isready -U evobgp -d evobgp"]
interval: 10s
timeout: 5s
retries: 5
retries: 12
start_period: 45s
logging: *default-logging
deploy:
resources:
+170
View File
@@ -0,0 +1,170 @@
# Standalone stack (без profiles): Portainer / `docker compose -f stack.microvps-full.yaml up -d`
# Эквивалент microvps-full из docker-compose.yaml + docker-compose.microvps-full.yaml,
# с встроенными configs для Prometheus (как у вас).
#
# Postgres: shm_size + start_period — иначе часто «dependency postgres failed» на слабом хосте.
name: evobgp-microvps-full
configs:
prometheus_yml:
content: |
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"]
prometheus_alerts_yml:
content: |
groups: []
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
shm_size: "256mb"
environment:
POSTGRES_USER: evobgp
POSTGRES_PASSWORD: evobgp
POSTGRES_DB: evobgp
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U evobgp -d evobgp"]
interval: 10s
timeout: 5s
retries: 12
start_period: 45s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
nats:
image: nats:2.10-alpine
restart: unless-stopped
command: ["-js", "-m", "8222"]
ports:
- "4222:4222"
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
bird2:
image: git.shts.su/denozord/evobgp-bird2:latest
restart: unless-stopped
cap_add:
- NET_ADMIN
sysctls:
net.ipv4.ip_forward: "1"
net.ipv6.conf.all.forwarding: "1"
volumes:
- bird_etc:/etc/bird
- bird_run:/run/bird
ports:
- "179:179/tcp"
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
evobgp-agent:
image: git.shts.su/denozord/evobgp-agent:latest
restart: unless-stopped
depends_on:
bird2:
condition: service_started
cap_add:
- NET_ADMIN
volumes:
- bird_etc:/etc/bird
- bird_run:/run/bird
entrypoint: ["/usr/local/bin/evobgp-agent"]
command: ["watch", "-socket=/run/bird/bird.ctl", "-watch-interval=30s"]
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
evobgp-all:
image: git.shts.su/denozord/evobgp-all:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
nats:
condition: service_started
bird2:
condition: service_started
ports:
- "8080:8080"
environment:
EVOBGP_DATABASE_URL: postgres://evobgp:evobgp@postgres:5432/evobgp?sslmode=disable
EVOBGP_BROKER_URL: nats://nats:4222
EVOBGP_HTTP_ADDR: ":8080"
EVOBGP_SEED_DEMO: "1"
EVOBGP_BIRDC_SOCKET: /run/bird/bird.ctl
EVOBGP_BIRDC_INTERVAL: 30s
EVOBGP_BIRD_ACTIVE_DIR: /etc/bird
EVOBGP_BIRD_STAGING_DIR: /tmp/evobgp-bird-staging
EVOBGP_DEV_INSECURE: "1"
volumes:
- bird_etc:/etc/bird
- bird_run:/run/bird:ro
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
evobgp-web:
image: git.shts.su/denozord/evobgp-web-all:latest
restart: unless-stopped
depends_on:
evobgp-all:
condition: service_started
ports:
- "3000:80"
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
prometheus:
image: prom/prometheus:v2.54.1
restart: unless-stopped
depends_on:
evobgp-all:
condition: service_started
ports:
- "9090:9090"
configs:
- source: prometheus_yml
target: /etc/prometheus/prometheus.yml
- source: prometheus_alerts_yml
target: /etc/prometheus/alerts.yml
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
- --storage.tsdb.retention.time=7d
- --web.enable-lifecycle
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
volumes:
pgdata:
bird_etc:
bird_run:
+3 -1
View File
@@ -73,7 +73,8 @@ type BGPPeerFromTemplateOptions struct {
OverrideLocalASN uint32
}
// RenderProtocolBGPFromTemplate renders protocol bgp … from TEMPLATE { neighbor; multihop; source address; passive; }.
// RenderProtocolBGPFromTemplate renders protocol bgp … from TEMPLATE { neighbor; multihop; source address; strict bind; passive; }.
// strict bind дублируется и в шаблоне, и в каждом пире — явная фиксация на сессию.
func RenderProtocolBGPFromTemplate(opts BGPPeerFromTemplateOptions) (string, error) {
if strings.TrimSpace(opts.ProtocolName) == "" {
return "", fmt.Errorf("birdfmt: protocol name is required")
@@ -109,6 +110,7 @@ func RenderProtocolBGPFromTemplate(opts BGPPeerFromTemplateOptions) (string, err
b.WriteString(" source address ")
b.WriteString(strings.TrimSpace(opts.SourceAddress))
b.WriteString(";\n")
b.WriteString(" strict bind on;\n")
b.WriteString(" passive;\n")
b.WriteString("}\n")
return b.String(), nil
+3
View File
@@ -55,6 +55,9 @@ func TestRenderProtocolBGPFromTemplate_MultihopPassive(t *testing.T) {
if !strings.Contains(got, "source address 77.232.38.173;") {
t.Fatal(got)
}
if !strings.Contains(got, "strict bind on;") {
t.Fatal(got)
}
}
func TestRenderProtocolBGPFromTemplate_OverrideLocal(t *testing.T) {
@@ -2,5 +2,6 @@ protocol bgp evobgp_peer_ci from bgp_template {
neighbor 192.0.2.2 as 65002;
multihop;
source address 192.0.2.1;
strict bind on;
passive;
}