Конфигурация системы
Структура файлов
/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-среды с аутентификацией:
- Установите
OAUTH2_PROXY_ENABLED=true в .env.
- Добавьте сервис Keycloak в docker-compose.yml.
-
Выполните скрипт инициализации init-keycloak.sh для создания:
- Realm
llm-firewall.
- Роли:
admin, operator, viewer.
- Начальных пользователей.
Подробная инструкция: см. файл AUTH_MODES_GUIDE.md в директории compose.