102 lines
3.8 KiB
YAML
102 lines
3.8 KiB
YAML
# Основной вариант — JVM: прогретая, она вдвое экономнее native по процессору и
|
|
# втрое быстрее по задержке. Холодное окно закрывает прогрев на старте.
|
|
# docker compose up pd-guard
|
|
#
|
|
# Наблюдение поднимается вместе со всем стеком: `docker compose up` даёт сервис,
|
|
# Prometheus на 9090 и Grafana на 3000 с уже заведённым дашбордом.
|
|
#
|
|
# Несколько узлов: маскирование детерминировано и работает на любом узле, а вот
|
|
# обратный шаг требует общего состояния — иначе запрос попадёт не на тот узел.
|
|
# docker compose --profile cluster up
|
|
services:
|
|
|
|
pd-guard:
|
|
image: pd-guard-spring:jvm
|
|
build:
|
|
context: .
|
|
dockerfile: src/main/docker/Dockerfile
|
|
ports:
|
|
- "8080:8080"
|
|
environment:
|
|
PDGUARD_MAX_CONCURRENT: "2000"
|
|
PDGUARD_STORE_TTL_MINUTES: "30"
|
|
# Прогоны на старте, чтобы первые запросы не шли по непрогретому коду.
|
|
PDGUARD_WARMUP_ITERATIONS: "2000"
|
|
# Вторая ступень распознавания. Модель в репозиторий не входит:
|
|
# ./tools/fetch-ner-model.sh. Пока её нет, ступень сама выключится и
|
|
# сервис работает на одних правилах.
|
|
PDGUARD_NER_ENGINE: rubert
|
|
PDGUARD_NER_MODEL: /deployments/models/rubert-ner
|
|
volumes:
|
|
- ./config:/deployments/config:ro
|
|
- ./models:/deployments/models:ro
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-fsS", "http://localhost:8080/health"]
|
|
interval: 10s
|
|
timeout: 2s
|
|
retries: 3
|
|
|
|
prometheus:
|
|
image: prom/prometheus:v2.54.1
|
|
command:
|
|
- --config.file=/etc/prometheus/prometheus.yml
|
|
- --storage.tsdb.retention.time=6h
|
|
- --web.enable-lifecycle
|
|
ports:
|
|
- "9090:9090"
|
|
volumes:
|
|
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro
|
|
depends_on:
|
|
- pd-guard
|
|
|
|
grafana:
|
|
image: grafana/grafana:11.2.0
|
|
ports:
|
|
- "3000:3000"
|
|
environment:
|
|
# Демонстрационный стенд: вход без пароля, чтобы жюри не искало учётные данные.
|
|
# Для контура с реальными данными это надо снять.
|
|
GF_AUTH_ANONYMOUS_ENABLED: "true"
|
|
GF_AUTH_ANONYMOUS_ORG_ROLE: Admin
|
|
GF_AUTH_DISABLE_LOGIN_FORM: "true"
|
|
GF_USERS_DEFAULT_THEME: light
|
|
# Сразу открывать дашборд модуля, а не пустую главную.
|
|
GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH: /var/lib/grafana/dashboards/pd-guard.json
|
|
volumes:
|
|
- ./monitoring/grafana/provisioning:/etc/grafana/provisioning:ro
|
|
- ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards:ro
|
|
depends_on:
|
|
- prometheus
|
|
|
|
redis:
|
|
profiles: ["cluster"]
|
|
image: redis:7-alpine
|
|
command: ["redis-server", "--save", "", "--appendonly", "no", "--maxmemory", "1gb", "--maxmemory-policy", "allkeys-lru"]
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 5s
|
|
timeout: 2s
|
|
retries: 5
|
|
|
|
node-a: &node
|
|
profiles: ["cluster"]
|
|
build:
|
|
context: .
|
|
dockerfile: src/main/docker/Dockerfile
|
|
ports:
|
|
- "8081:8080"
|
|
environment:
|
|
PDGUARD_STORE_BACKEND: redis
|
|
SPRING_DATA_REDIS_HOST: redis
|
|
PDGUARD_MAX_CONCURRENT: "2000"
|
|
PDGUARD_WARMUP_ITERATIONS: "2000"
|
|
volumes:
|
|
- ./config:/deployments/config:ro
|
|
depends_on:
|
|
redis:
|
|
condition: service_healthy
|
|
|
|
node-b:
|
|
<<: *node
|
|
ports:
|
|
- "8082:8080" |