PD Guard: модуль безопасности персональных данных

This commit is contained in:
Onbehalfofme
2026-09-22 17:43:33 +03:00
commit 41052fac6a
80 changed files with 91230 additions and 0 deletions
+102
View File
@@ -0,0 +1,102 @@
# Основной вариант — 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"