# Один узел, состояние маскирования/демаскирования — в памяти самого процесса # (pdguard.store.backend=memory, дефолт). Redis был нужен только чтобы разделить # состояние между несколькими репликами; кластерная схема на 4-vCPU хосте под # нагрузкой давала конкуренцию за CPU (см. историю в git) — один узел проще и # получает весь хост целиком. services: pd-guard: image: pd-guard-spring:jvm ports: - "8080:8080" environment: PDGUARD_MAX_CONCURRENT: "2000" PDGUARD_WARMUP_ITERATIONS: "2000" # Вторая ступень распознавания — две модели под разные задачи (см. # NameCascade.java): WikiNEuRal размечает имена, ruBERT — составляющие # адреса. Модели в репозиторий не входят: ./tools/fetch-ner-model.sh. PDGUARD_NER_NAME_ENGINE: wikineural PDGUARD_NER_NAME_MODEL: /deployments/models/wikineural-ner PDGUARD_NER_ADDRESS_ENGINE: rubert PDGUARD_NER_ADDRESS_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.55.1 volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro ports: - "9090:9090" grafana: image: grafana/grafana:11.3.0 depends_on: - prometheus ports: - "3000:3000" environment: GF_AUTH_ANONYMOUS_ENABLED: "true" GF_AUTH_ANONYMOUS_ORG_ROLE: Viewer volumes: - ./monitoring/grafana/provisioning:/etc/grafana/provisioning:ro - ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards:ro