Перейти к содержанию

Конфигурация системы

Структура файлов

/opt/llm-firewall/
├── docker-compose.yml          # Основной compose-файл
├── .env                        # Переменные окружения
├── init-databases.sql          # Инициализация БД
├── opa-config.yaml             # Конфигурация OPA
└── data/                       # Данные (volumes)

docker-compose.yml

Скопируйте предоставленный файл docker-compose.production.yml в /opt/llm-firewall/docker-compose.yml.

Файл содержит определения всех 14 сервисов с GPU-конфигурацией. Ключевые особенности:

  • GPU-сервисы используют deploy.resources.reservations.devices для доступа к GPU.
  • Миграции БД запускаются автоматически (alembic upgrade head).
  • Health checks настроены для всех сервисов.
  • Зависимости между сервисами определены через depends_on с условиями.

Файл переменных окружения (.env)

cat > /opt/llm-firewall/.env << 'EOF'
# ====================================
# AppSec.AIGate Production Environment
# ====================================

# Mode
MODE=production
ENVIRONMENT=production

# Auth (Keycloak)
OAUTH2_PROXY_ENABLED=false
KEYCLOAK_URL=http://keycloak:8080
KEYCLOAK_REALM=llm-firewall
KEYCLOAK_ADMIN_USERNAME=admin
KEYCLOAK_ADMIN_PASSWORD=admin

# Database
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres

# MinIO
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin

# Translation
GATEWAY_TRANSLATION_ENABLED=true

# Logging
LOG_LEVEL=INFO
EOF

Важно

Для production-среды обязательно смените пароли POSTGRES_PASSWORD, MINIO_ROOT_PASSWORD и KEYCLOAK_ADMIN_PASSWORD на безопасные значения.

init-databases.sql

cat > /opt/llm-firewall/init-databases.sql << 'EOF'
-- AppSec.AIGate database initialization
-- Creates databases for Profiles Registry and Admin API

CREATE DATABASE profiles_registry;
CREATE DATABASE admin_api_db;
GRANT ALL PRIVILEGES ON DATABASE profiles_registry TO postgres;
GRANT ALL PRIVILEGES ON DATABASE admin_api_db TO postgres;
EOF

Конфигурация OPA

cat > /opt/llm-firewall/opa-config.yaml << 'EOF'
services:
  minio:
    url: http://minio:9000
    credentials:
      s3_signing:
        environment_credentials: {}

bundles:
  default:
    service: minio
    resource: policies/default/bundle.tar.gz
    polling:
      min_delay_seconds: 2
      max_delay_seconds: 5
    persist: false

decision_logs:
  console: true
EOF

Конфигурация GPU (deploy.resources)

Для GPU-ускоренных сервисов используется блок deploy.resources в docker-compose.yml:

deploy:
  resources:
    reservations:
      devices:
        - driver: nvidia
          count: 1
          capabilities: [gpu]

Этот блок требует установленного NVIDIA Container Toolkit. Каждый GPU-сервис (threat-detector, content-safety, translation-service) содержит этот блок. Дополнительно GPU-сервисы имеют переменную NVIDIA_VISIBLE_DEVICES: all.

Переменные окружения по сервисам

API Gateway (порт 8085)

Переменная Значение Описание
GATEWAY_SERVER_PORT 8080 Внутренний порт (маппится 8085→8080)
GATEWAY_SERVER_HOST 0.0.0.0 Адрес привязки
GATEWAY_REDIS_ADDRESS redis:6379 Адрес Redis
GATEWAY_SERVICES_PROFILES_REGISTRY_URL http://profiles-registry:8000 URL Profiles Registry
GATEWAY_SERVICES_NORMALIZER_URL http://request-normalizer:8081 URL Normalizer
GATEWAY_SERVICES_PII_DETECTOR_URL http://pii-detector:8082 URL PII Detector
GATEWAY_SERVICES_THREAT_DETECTOR_URL http://threat-detector:8090 URL Threat Detector
GATEWAY_SERVICES_THREAT_DETECTOR_TIMEOUT 30000 Таймаут Threat Detector (мс)
GATEWAY_SERVICES_PDP_URL http://pdp:8080 URL PDP
GATEWAY_SERVICES_CONTENT_POLICY_URL http://content-policy-service:8089 URL Content Policy Service
GATEWAY_SERVICES_CONTENT_POLICY_TIMEOUT 5000 Таймаут Content Policy (мс)
GATEWAY_SERVICES_TRANSLATION_URL http://translation-service:8087 URL Translation Service
GATEWAY_SERVICES_TRANSLATION_TIMEOUT 5000 Таймаут Translation (мс)
GATEWAY_SERVICES_CONTENT_SAFETY_URL http://content-safety:8088 URL Content Safety
GATEWAY_SERVICES_CONTENT_SAFETY_TIMEOUT 10000 Таймаут Content Safety (мс)
GATEWAY_TRANSLATION_ENABLED true Включить перевод RU→EN
GATEWAY_AUTH_ENABLED false Аутентификация (true для Keycloak)
EVENTS_ENABLED true Отправка событий в Redis Stream
GATEWAY_METRICS_ENABLED true Prometheus-метрики
GATEWAY_LLM_INSECURE_SKIP_VERIFY true Пропуск проверки TLS-сертификатов LLM backend
GATEWAY_REDIS_PASSWORD `` Пароль Redis (пустой по умолчанию)
LOG_LEVEL info Уровень логирования
LOG_FORMAT json Формат логов

Threat Detector (порт 8090)

Переменная Значение Описание
THREAT_DETECTOR_HOST 0.0.0.0 Адрес привязки
THREAT_DETECTOR_PORT 8090 Порт сервиса
THREAT_DETECTOR_MODEL_PATH /models/threat-model Путь к модели (директория)
THREAT_DETECTOR_ML_DEVICE cuda Устройство: cuda / cpu / auto
THREAT_DETECTOR_N_THREADS 4 Количество потоков
NVIDIA_VISIBLE_DEVICES all Видимые GPU

Content Safety (порт 8088)

Переменная Значение Описание
CONTENT_SAFETY_PORT 8088 Порт сервиса
CONTENT_SAFETY_ML_USE_LOCAL true Использовать локальную модель
CONTENT_SAFETY_ML_DEVICE cuda Устройство: cuda / cpu / auto
NVIDIA_VISIBLE_DEVICES all Видимые GPU

Translation Service (порт 8087)

Переменная Значение Описание
TRANSLATION_SERVICE_HOST 0.0.0.0 Адрес привязки
TRANSLATION_SERVICE_PORT 8087 Порт сервиса
TRANSLATION_SERVICE_MODEL_PATH /app/models/translation-model Путь к модели перевода
TRANSLATION_SERVICE_MODEL_PATH_CT2 /app/models/translation-model-ct2 Путь к CT2-оптимизированной модели
TRANSLATION_SERVICE_USE_CT2 true Использовать CTranslate2
TRANSLATION_SERVICE_MODEL_DEVICE cuda Устройство: cuda / cpu
TRANSLATION_SERVICE_GPU_COMPUTE_TYPE float16 Точность вычислений
NVIDIA_VISIBLE_DEVICES all Видимые GPU

PII Detector (порт 8084)

Переменная Значение Описание
PII_DETECTOR_HOST 0.0.0.0 Адрес привязки
PII_DETECTOR_PORT 8082 Внутренний порт (маппится 8084→8082)
PII_DETECTOR_DEFAULT_THRESHOLD 0.8 Порог детекции
PII_DETECTOR_DEFAULT_LANGUAGE en Язык по умолчанию
PII_DETECTOR_ENABLE_NATASHA_NER true Включить Natasha NER для русского
PII_DETECTOR_ENABLE_METRICS true Prometheus-метрики

Content Policy Service (порт 8089)

Переменная Значение Описание
CONTENT_POLICY_PORT 8089 Порт сервиса
CONTENT_POLICY_LOG_LEVEL info Уровень логирования
CONTENT_POLICY_CACHE_MAX_SIZE 1000 Размер LRU-кеша

Event Exporter (порт 8091)

Переменная Значение Описание
EVENT_EXPORTER_PORT 8090 Внутренний порт (маппится 8091→8090)
EVENT_EXPORTER_REDIS_URL redis://redis:6379 Адрес Redis
EVENT_EXPORTER_REDIS_STREAM_KEY security_events Ключ Redis Stream
EVENT_EXPORTER_CONSUMER_GROUP event-exporter-group Consumer group
EVENT_EXPORTER_ADMIN_API_URL http://admin-api:8001 URL Admin API
EVENT_EXPORTER_PROFILES_REGISTRY_URL http://profiles-registry:8000 URL Profiles Registry
EVENT_EXPORTER_BATCH_SIZE 100 Размер батча
EVENT_EXPORTER_CONFIG_POLL_INTERVAL 30s Интервал опроса конфигурации

PDP (порт 8086)

Переменная Значение Описание
PDP_SERVER_HTTP_PORT 8080 Внутренний порт (маппится 8086→8080)
PDP_OPA_SERVER_URL http://opa:8181 URL OPA сервера
PDP_OPA_BUNDLE_URL http://minio:9000 URL MinIO для бандлов
PDP_OPA_BUNDLE_PATH policies/policies/default/bundle.tar.gz Путь к OPA bundle
PDP_OPA_TENANT_ID default Tenant по умолчанию
PDP_OPA_ENVIRONMENT production Окружение (production/development)
PDP_METRICS_ENABLED true Prometheus-метрики

Request Normalizer (порт 8081)

Переменная Значение Описание
NORMALIZER_SERVER_HTTP_PORT 8081 Порт сервиса
NORMALIZER_SERVER_HOST 0.0.0.0 Адрес привязки
NORMALIZER_NORMALIZER_DEFAULT_LANGUAGE en Язык по умолчанию
NORMALIZER_NORMALIZER_MAX_PAYLOAD_SIZE_MB 50 Максимальный размер payload (МБ)
NORMALIZER_NORMALIZER_MAX_ATTACHMENT_SIZE_MB 10 Максимальный размер вложения (МБ)
NORMALIZER_NORMALIZER_PROCESSING_TIMEOUT 5s Таймаут обработки
NORMALIZER_METRICS_ENABLED true Prometheus-метрики

Profiles Registry (порт 8000)

Переменная Значение Описание
DATABASE_URL postgresql+asyncpg://postgres:postgres@postgres:5432/profiles_registry URL базы данных
REDIS_URL redis://redis:6379/0 URL Redis
MINIO_ENDPOINT minio:9000 Адрес MinIO
MINIO_ACCESS_KEY minioadmin Ключ доступа MinIO
MINIO_SECRET_KEY minioadmin Секретный ключ MinIO
MINIO_SECURE false Использовать HTTPS для MinIO
MINIO_BUCKET policies Bucket для OPA bundles
POLICY_SYNC_ENABLED true Синхронизация политик
HEALTH_CHECK_ENABLED true Фоновые health checks провайдеров
HEALTH_CHECK_INTERVAL_SECONDS 60 Интервал проверок
HEALTH_CHECK_TIMEOUT_SECONDS 5 Таймаут health check
HEALTH_CHECK_RETRIES 2 Количество повторных попыток

Admin API (порт 8001)

Переменная Значение Описание
ADMIN_DATABASE_URL postgresql+asyncpg://postgres:postgres@postgres:5432/admin_api_db URL базы данных
PROFILES_REGISTRY_URL http://profiles-registry:8000 URL Profiles Registry
REDIS_URL redis://redis:6379 URL Redis
REPORTS_DIR /data/reports Директория для отчётов
S3_ENDPOINT_URL http://minio:9000 URL MinIO
S3_ACCESS_KEY minioadmin Ключ доступа MinIO
S3_SECRET_KEY minioadmin Секретный ключ MinIO
S3_POLICIES_BUCKET policies Bucket для политик
KEYCLOAK_URL http://keycloak:8080 URL Keycloak
KEYCLOAK_REALM llm-firewall Realm в Keycloak
OAUTH2_PROXY_ENABLED false Включить OAuth2 аутентификацию

Retention Worker

Переменная Значение Описание
ADMIN_DATABASE_URL postgresql+asyncpg://postgres:postgres@postgres:5432/admin_api_db URL базы данных
RETENTION_CLEANUP_INTERVAL_HOURS 24 Интервал очистки (часы)
RETENTION_INITIAL_DELAY_SECONDS 60 Задержка первого запуска

Admin API Consumer (фоновый воркер)

Переменная Значение Описание
ADMIN_DATABASE_URL postgresql+asyncpg://postgres:postgres@postgres:5432/admin_api_db URL базы данных
REDIS_URL redis://redis:6379 URL Redis
REDIS_STREAM_NAME security_events Имя Redis Stream
REDIS_CONSUMER_GROUP events-consumer-group Consumer group
BATCH_SIZE 100 Размер батча
BLOCK_MS 1000 Таймаут блокирующего чтения (мс)

OPA (порт 8181)

Переменная Значение Описание
AWS_ACCESS_KEY_ID minioadmin Ключ доступа (для S3-совместимого MinIO)
AWS_SECRET_ACCESS_KEY minioadmin Секретный ключ (для S3-совместимого MinIO)
AWS_REGION us-east-1 Регион (формальный, для S3 API)

Настройка Keycloak (production)

Для production-среды с аутентификацией:

  1. Установите OAUTH2_PROXY_ENABLED=true в .env.
  2. Добавьте сервис Keycloak в docker-compose.yml.
  3. Выполните скрипт инициализации init-keycloak.sh для создания:

    • Realm llm-firewall.
    • Роли: admin, operator, viewer.
    • Начальных пользователей.

Подробная инструкция: см. файл AUTH_MODES_GUIDE.md в директории compose.