# Один узел: памяти процесса достаточно, общий слой не нужен. # docker compose up pd-guard # # Несколько узлов: маскирование детерминировано и работает на любом узле, а вот # обратный шаг требует общего состояния — иначе запрос попадёт не на тот узел. # docker compose --profile cluster up services: pd-guard: build: context: . dockerfile: src/main/docker/Dockerfile.native ports: - "8080:8080" environment: PDGUARD_MAX_CONCURRENT: "2000" PDGUARD_STORE_TTL_MINUTES: "30" # Переменная не задана — вторая ступень выключена. Чтобы включить: # PDGUARD_NER_MODEL: /work/models/ru-ner-person.bin volumes: - ./config:/work/config:ro # Модель второй ступени монтируется томом: в образ она не входит. # Собрать: ./tools/train-ner.sh full - ./models:/work/models:ro healthcheck: test: ["CMD", "curl", "-fsS", "http://localhost:8080/health"] interval: 10s timeout: 2s retries: 3 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.native ports: - "8081:8080" environment: PDGUARD_STORE_BACKEND: redis QUARKUS_REDIS_HOSTS: redis://redis:6379 PDGUARD_MAX_CONCURRENT: "2000" volumes: - ./config:/work/config:ro depends_on: redis: condition: service_healthy node-b: <<: *node ports: - "8082:8080"