Конфигурация системы
Эта страница описывает порты и переменные окружения, которые используются текущими production-compose файлами:
docker-compose.prod.server-client.yml;docker-compose.prod.vulndb.yml;env.server;env.client;env.vulndb;
Как compose использует env-файлы
В текущей схеме env-файлы нужны в двух местах одновременно:
- как
env_fileвнутри сервисов; - как
--env-fileпри запускеdocker compose, чтобы переменные были доступны уже на этапе развёртыванияports,healthcheck,commandи имени сети.
Пример для server + client:
bash
SERVER_ENV_FILE=./env.server \
CLIENT_ENV_FILE=./env.client \
docker compose \
--env-file ./env.server \
--env-file ./env.client \
-f docker-compose.prod.server-client.yml \
up -dПример для vulndb:
bash
VULNDB_ENV_FILE=./env.vulndb \
docker compose \
--env-file ./env.vulndb \
-f docker-compose.prod.vulndb.yml \
up -d --buildПубликуемые порты
Внешние порты на хосте
| Компонент | Назначение | Порт на хосте | Порт в контейнере | Значение по шаблону |
|---|---|---|---|---|
nrunner-client | Web UI | NRUNNER_CLIENT_HTTP_PORT | 80 | 8080 -> 80 |
nrunner-server | HTTP API | NRUNNER_SERVER_HTTP_PORT | SERVER_PORT | 3002 -> 3002 |
nrunner-server | Порт работы с агентами | NRUNNER_SERVER_GRPC_PORT | AGENT_GRPC_PORT | 50051 -> 50051 |
vuln-api | HTTP API | VULN_API_HTTP_PORT | VULN_SERVICE_PORT | 8081 -> 8081 |
Внутренние сервисные порты
Эти порты наружу не публикуются и используются только внутри Docker-сети:
| Сервис | Стэк | Порт | Назначение |
|---|---|---|---|
db | server-client | 5432 | Основная БД netrunner-server |
cache | server-client | 6379 | Кэш и служебное состояние backend |
db | vulndb | 5432 | БД vulnerability-сервиса |
Правила заполнения значений
При заполнении env-переменных удобно опираться на такие типы значений:
- порт: целое число, например
3002,50051,8081; - URL: полный адрес со схемой, например
http://scanner.example.com:3002/api/v1; host:port: адрес без схемы, напримерscanner.example.com:50051;- duration: строка в формате Go duration, например
15s,5m,168h; - boolean:
trueилиfalse, также допустимы значенияyes/no,on/off,1/0для scheduler; - cron: строка cron-выражения, например
0 2 * * 0; - путь: абсолютный путь внутри контейнера, например
/app/tmp/caCert.pemили/data/dumps.
env.client
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
NRUNNER_CLIENT_HTTP_PORT | 8080 | Внешний порт web UI | Свободный TCP-порт на хосте, например 80, 8080, 8443 при внешнем reverse proxy |
NRUNNER_API_URL | http://localhost:3002/api/v1 | URL backend API для frontend | Полный URL API со схемой и суффиксом /api/v1, например https://scanner.example.com/api/v1 или http://10.10.10.5:3002/api/v1 |
env.server
Compose-level переменные
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
NRUNNER_SERVER_HTTP_PORT | 3002 | Внешний HTTP-порт backend | Свободный TCP-порт на хосте |
NRUNNER_SERVER_GRPC_PORT | 50051 | Внешний gRPC-порт для агентов | Свободный TCP-порт на хосте |
NRUNNER_NETWORK_NAME | nrunner-prod | Имя общей Docker-сети | Любое имя Docker bridge-сети; если vulndb должен быть в той же сети, значение обязано совпадать с env.vulndb |
Основные параметры backend
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
SERVICE_NAME | netrunner-server | Логическое имя backend-сервиса | Произвольная строка без спецсимволов |
APP_ENV | prod | Режим окружения приложения | Обычно prod; для стендов можно использовать отдельное текстовое значение |
JWT_SECRET | change-me-jwt-secret | Секрет подписи JWT | Длинная случайная строка |
CREDENTIALS_MASTER_KEY | change-me-32-byte-secret | Ключ шифрования сохранённых credentials | Длинная случайная строка; рекомендуется отдельный секрет, отличный от JWT_SECRET |
SERVER_ADDRESS | 0.0.0.0 | Адрес bind HTTP-сервера внутри контейнера | Обычно 0.0.0.0 |
SERVER_PORT | 3002 | HTTP-порт backend внутри контейнера | Целое число; обычно совпадает с дефолтом compose |
SERVER_PUBLIC_HOST | localhost | Публичный адрес backend для пользовательских и агентных сценариев | Статический IP или DNS-имя, например scanner.example.com |
Агентный контур
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
AGENT_GRPC_PORT | 50051 | gRPC-порт backend внутри контейнера | Целое число |
AGENT_DEPLOYMENT_ARTIFACTS_DIR | /app/dist | Каталог артефактов агента внутри контейнера | Абсолютный путь в контейнере |
AGENT_DEPLOYMENT_CA_PATH | /app/tmp/caCert.pem | Путь к CA-файлу для агентного контура | Абсолютный путь в контейнере |
AGENT_DEPLOYMENT_SERVER_HOST | localhost | Хост, который получают агенты для обратного подключения | Статический IP или DNS-имя |
AGENT_DEPLOYMENT_CERT_PORT | 50051 | Порт канала доставки/получения сертификата для агента | Целое число; обычно тот же внешний порт, что и gRPC |
AGENT_DEPLOYMENT_SERVER_GRPC | localhost:50051 | Полный адрес gRPC endpoint для агентов | Строка вида <host>:<port>, без http:// |
AGENT_DEPLOYMENT_HEARTBEAT_TIMEOUT | 5m | Таймаут heartbeat агента | Go duration, например 30s, 2m, 5m |
Основная база данных
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
LOCAL_DB_TYPE | postgres | Тип основной БД | Для текущего compose ожидается postgres |
LOCAL_DB_HOST | local-postgres | Хост основной БД | Имя сервиса в Docker-сети или внешний DB host |
LOCAL_DB_PORT | 5432 | Порт основной БД | Целое число |
LOCAL_DB_USER | postgres | Пользователь основной БД | Имя пользователя PostgreSQL |
LOCAL_DB_PASSWORD | postgres | Пароль основной БД | Пароль PostgreSQL |
LOCAL_DB_NAME | netrunner_local | Имя основной БД | Имя базы PostgreSQL |
Доступ к vulnerability-сервису
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
VULN_SERVICE_URL | http://vuln-api:8081 | URL vuln-api, который использует backend | Внутренний адрес в общей Docker-сети или внешний URL, например http://vulndb.example.com:8081 |
VULN_SERVICE_TIMEOUT | 15s | HTTP timeout обращений к vuln-api | Go duration, например 5s, 15s, 30s |
Redis
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
REDIS_HOST | redis | Хост Redis | Имя Docker-сервиса или внешний Redis host |
REDIS_PORT | 6379 | Порт Redis | Целое число |
REDIS_USER | пусто | Пользователь Redis при ACL | Имя ACL-пользователя или пустое значение |
REDIS_PASSWORD | change-me-redis-password | Пароль Redis | Строка пароля |
REDIS_DB | 0 | Номер логической DB Redis | Целое число |
REDIS_MAX_RETRIES | 3 | Число повторных попыток клиента | Целое число |
REDIS_DIAL_TIMEOUT | 5s | Таймаут TCP-подключения | Go duration |
REDIS_READ_TIMEOUT | 3s | Таймаут чтения | Go duration |
REDIS_WRITE_TIMEOUT | 3s | Таймаут записи | Go duration |
REDIS_APPENDONLY | yes | Включение AOF в контейнере Redis | yes или no |
Объектное хранилище
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
S3_BUCKET | пусто | Имя bucket | Имя bucket в S3 или совместимом хранилище |
S3_REGION | пусто | Регион bucket | Например ru-central1, eu-west-1 |
S3_ACCESS_KEY | пусто | Access key | Ключ доступа |
S3_SECRET_KEY | пусто | Secret key | Секрет доступа |
S3_ENDPOINT | пусто | Endpoint S3-совместимого хранилища | Полный URL, например https://minio.example.com |
Legacy-переменные
Эти переменные помечены в шаблоне как legacy и в штатном compose обычно не требуют изменения:
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
APP_STATUS | up | Legacy статус приложения | Обычно оставить как есть |
APP_VERSION | 0.2.5 | Legacy версия приложения | Строка версии |
DB_HOST | пусто | Legacy хост БД | Обычно пусто |
DB_PORT | пусто | Legacy порт БД | Обычно пусто |
DB_USER | пусто | Legacy пользователь БД | Обычно пусто |
DB_PASSWORD | пусто | Legacy пароль БД | Обычно пусто |
TELEGRAM_TOKEN | пусто | Legacy токен Telegram | Обычно пусто |
TELEGRAM_ENABLED | false | Legacy переключатель Telegram | true или false |
env.vulndb
Compose-level переменные
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
VULN_API_HTTP_PORT | 8081 | Внешний HTTP-порт vuln-api | Свободный TCP-порт на хосте |
NRUNNER_NETWORK_NAME | nrunner-prod | Имя общей Docker-сети | Любое имя Docker bridge-сети; если netrunner-server должен видеть vuln-api по внутреннему имени, значение обязано совпадать с env.server |
Параметры vuln-api
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
VULN_SERVICE_ADDRESS | 0.0.0.0 | Адрес bind vuln-api внутри контейнера | Обычно 0.0.0.0 |
VULN_SERVICE_PORT | 8081 | Внутренний порт vuln-api | Целое число |
VULN_DUMP_DIR | /data/dumps | Каталог дампов внутри контейнера | Абсолютный путь |
VULN_DUMP_BASE_URL | пусто | Базовый URL опубликованных дампов | Полный URL без завершающего /, например https://downloads.example.com/vulndb |
VULN_DATABASE_UPDATE_INTERVAL | 168h | Интервал, с которым export считает базу актуальной | Go duration, например 24h, 168h |
VULN_REMOTE_URL | https://vulndb.example.com | Внешний URL удалённого vulnerability-сервиса | Полный URL со схемой |
VULN_SYNC_SOURCES | all | Источники данных для ручного sync | all или список поддерживаемых источников, если контур работает с подмножеством |
База данных уязвимостей
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
VULN_DB_TYPE | postgres | Тип БД уязвимостей | Для текущего compose ожидается postgres |
VULN_DB_HOST | vuln-postgres | Хост БД уязвимостей | Имя Docker-сервиса или внешний DB host |
VULN_DB_PORT | 5432 | Порт БД уязвимостей | Целое число |
VULN_DB_USER | postgres | Пользователь БД уязвимостей | Имя пользователя PostgreSQL |
VULN_DB_PASSWORD | postgres | Пароль БД уязвимостей | Пароль PostgreSQL |
VULN_DB_NAME | netrunner_vulnerabilities | Имя БД уязвимостей | Имя базы PostgreSQL |
Scheduler master-sync
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
VULN_MASTER_SYNC_ENABLED | true | Включает scheduler | true или false |
VULN_MASTER_SYNC_CRON | 0 2 * * 0 | Cron-расписание фоновой синхронизации | Валидное cron-выражение |
VULN_MASTER_SYNC_TIMEZONE | Europe/Moscow | Таймзона scheduler | Имя таймзоны IANA, например Europe/Moscow, UTC |
VULN_MASTER_SYNC_SOURCES | all | Источники данных для scheduler | all или список поддерживаемых источников |
VULN_MASTER_SYNC_RUN_ON_START | false | Запускать первую синхронизацию сразу после старта | true или false |
Источники vulnerability-данных
| Переменная | Значение по шаблону | Что задаёт | Что можно подставить |
|---|---|---|---|
BDU_SYNC_URL | https://bdu.fstec.ru/files/documents/vulxml.zip | URL архива BDU | Полный URL до vulxml.zip |
BDU_TLS_INSECURE_SKIP_VERIFY | false | Отключение TLS-проверки для BDU | true или false |
BDU_VULNERABILITY_URL_TEMPLATE | https://bdu.fstec.ru/vul/{identifier} | Шаблон публичной ссылки на карточку BDU | URL-шаблон с {identifier} |
NVD_SYNC_URL | https://services.nvd.nist.gov/rest/json/cves/2.0 | URL NVD API | Полный URL |
NVD_API_KEY | пусто | API-ключ NVD | Строка ключа или пусто |
NVD_FEED_DIR | пусто | Каталог локальных NVD feeds | Путь внутри контейнера или mounted volume |
NVD_DOWNLOAD_FEEDS | false | Скачивать feeds перед импортом | true или false |
NVD_FEED_START_YEAR | 2002 | Начальный год локальных feeds | Год в формате числа |
NVD_FEED_END_YEAR | 0 | Конечный год feeds | Год в формате числа; 0 обычно означает отсутствие верхней границы |
NVD_PAGE_SIZE | 2000 | Размер страницы при работе с NVD API | Целое число |
NVD_SYNC_LIMIT | 0 | Лимит импортируемых записей | Целое число; 0 обычно означает без лимита |
NVD_CPE_SYNC_URL | https://nvd.nist.gov/feeds/json/cpe/2.0/nvdcpe-2.0.zip | URL ZIP-словаря CPE | Полный URL |
NVD_CPE_ZIP | пусто | Путь к локальному ZIP CPE | Путь внутри контейнера или mounted volume |
PACKAGE_RULES_JSON | пусто | Путь к JSON с правилами package matching | Путь к JSON-файлу |
EPSS_SYNC_URL | https://epss.empiricalsecurity.com/epss_scores-current.csv.gz | Источник EPSS CSV/CSV.GZ | Полный URL |
Что важно синхронизировать между контурами
NRUNNER_NETWORK_NAMEвenv.serverиenv.vulndbдолжно совпадать, если сервисы должны видеть друг друга по внутренним Docker-именам.NRUNNER_API_URLдолжен соответствовать реальному опубликованному адресу backend API.AGENT_DEPLOYMENT_SERVER_HOSTиAGENT_DEPLOYMENT_SERVER_GRPCдолжны указывать на стабильный внешний адрес backend.VULN_SERVICE_URLвenv.serverдолжен соответствовать реальному адресуvuln-api: внутреннему, если общая сеть одна, или внешнему, если контуры разнесены.