Skip to content

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

Эта страница описывает порты и переменные окружения, которые используются текущими 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-clientWeb UINRUNNER_CLIENT_HTTP_PORT808080 -> 80
nrunner-serverHTTP APINRUNNER_SERVER_HTTP_PORTSERVER_PORT3002 -> 3002
nrunner-serverПорт работы с агентамиNRUNNER_SERVER_GRPC_PORTAGENT_GRPC_PORT50051 -> 50051
vuln-apiHTTP APIVULN_API_HTTP_PORTVULN_SERVICE_PORT8081 -> 8081

Внутренние сервисные порты

Эти порты наружу не публикуются и используются только внутри Docker-сети:

СервисСтэкПортНазначение
dbserver-client5432Основная БД netrunner-server
cacheserver-client6379Кэш и служебное состояние backend
dbvulndb5432БД 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_PORT8080Внешний порт web UIСвободный TCP-порт на хосте, например 80, 8080, 8443 при внешнем reverse proxy
NRUNNER_API_URLhttp://localhost:3002/api/v1URL 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_PORT3002Внешний HTTP-порт backendСвободный TCP-порт на хосте
NRUNNER_SERVER_GRPC_PORT50051Внешний gRPC-порт для агентовСвободный TCP-порт на хосте
NRUNNER_NETWORK_NAMEnrunner-prodИмя общей Docker-сетиЛюбое имя Docker bridge-сети; если vulndb должен быть в той же сети, значение обязано совпадать с env.vulndb

Основные параметры backend

ПеременнаяЗначение по шаблонуЧто задаётЧто можно подставить
SERVICE_NAMEnetrunner-serverЛогическое имя backend-сервисаПроизвольная строка без спецсимволов
APP_ENVprodРежим окружения приложенияОбычно prod; для стендов можно использовать отдельное текстовое значение
JWT_SECRETchange-me-jwt-secretСекрет подписи JWTДлинная случайная строка
CREDENTIALS_MASTER_KEYchange-me-32-byte-secretКлюч шифрования сохранённых credentialsДлинная случайная строка; рекомендуется отдельный секрет, отличный от JWT_SECRET
SERVER_ADDRESS0.0.0.0Адрес bind HTTP-сервера внутри контейнераОбычно 0.0.0.0
SERVER_PORT3002HTTP-порт backend внутри контейнераЦелое число; обычно совпадает с дефолтом compose
SERVER_PUBLIC_HOSTlocalhostПубличный адрес backend для пользовательских и агентных сценариевСтатический IP или DNS-имя, например scanner.example.com

Агентный контур

ПеременнаяЗначение по шаблонуЧто задаётЧто можно подставить
AGENT_GRPC_PORT50051gRPC-порт backend внутри контейнераЦелое число
AGENT_DEPLOYMENT_ARTIFACTS_DIR/app/distКаталог артефактов агента внутри контейнераАбсолютный путь в контейнере
AGENT_DEPLOYMENT_CA_PATH/app/tmp/caCert.pemПуть к CA-файлу для агентного контураАбсолютный путь в контейнере
AGENT_DEPLOYMENT_SERVER_HOSTlocalhostХост, который получают агенты для обратного подключенияСтатический IP или DNS-имя
AGENT_DEPLOYMENT_CERT_PORT50051Порт канала доставки/получения сертификата для агентаЦелое число; обычно тот же внешний порт, что и gRPC
AGENT_DEPLOYMENT_SERVER_GRPClocalhost:50051Полный адрес gRPC endpoint для агентовСтрока вида <host>:<port>, без http://
AGENT_DEPLOYMENT_HEARTBEAT_TIMEOUT5mТаймаут heartbeat агентаGo duration, например 30s, 2m, 5m

Основная база данных

ПеременнаяЗначение по шаблонуЧто задаётЧто можно подставить
LOCAL_DB_TYPEpostgresТип основной БДДля текущего compose ожидается postgres
LOCAL_DB_HOSTlocal-postgresХост основной БДИмя сервиса в Docker-сети или внешний DB host
LOCAL_DB_PORT5432Порт основной БДЦелое число
LOCAL_DB_USERpostgresПользователь основной БДИмя пользователя PostgreSQL
LOCAL_DB_PASSWORDpostgresПароль основной БДПароль PostgreSQL
LOCAL_DB_NAMEnetrunner_localИмя основной БДИмя базы PostgreSQL

Доступ к vulnerability-сервису

ПеременнаяЗначение по шаблонуЧто задаётЧто можно подставить
VULN_SERVICE_URLhttp://vuln-api:8081URL vuln-api, который использует backendВнутренний адрес в общей Docker-сети или внешний URL, например http://vulndb.example.com:8081
VULN_SERVICE_TIMEOUT15sHTTP timeout обращений к vuln-apiGo duration, например 5s, 15s, 30s

Redis

ПеременнаяЗначение по шаблонуЧто задаётЧто можно подставить
REDIS_HOSTredisХост RedisИмя Docker-сервиса или внешний Redis host
REDIS_PORT6379Порт RedisЦелое число
REDIS_USERпустоПользователь Redis при ACLИмя ACL-пользователя или пустое значение
REDIS_PASSWORDchange-me-redis-passwordПароль RedisСтрока пароля
REDIS_DB0Номер логической DB RedisЦелое число
REDIS_MAX_RETRIES3Число повторных попыток клиентаЦелое число
REDIS_DIAL_TIMEOUT5sТаймаут TCP-подключенияGo duration
REDIS_READ_TIMEOUT3sТаймаут чтенияGo duration
REDIS_WRITE_TIMEOUT3sТаймаут записиGo duration
REDIS_APPENDONLYyesВключение AOF в контейнере Redisyes или 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_STATUSupLegacy статус приложенияОбычно оставить как есть
APP_VERSION0.2.5Legacy версия приложенияСтрока версии
DB_HOSTпустоLegacy хост БДОбычно пусто
DB_PORTпустоLegacy порт БДОбычно пусто
DB_USERпустоLegacy пользователь БДОбычно пусто
DB_PASSWORDпустоLegacy пароль БДОбычно пусто
TELEGRAM_TOKENпустоLegacy токен TelegramОбычно пусто
TELEGRAM_ENABLEDfalseLegacy переключатель Telegramtrue или false

env.vulndb

Compose-level переменные

ПеременнаяЗначение по шаблонуЧто задаётЧто можно подставить
VULN_API_HTTP_PORT8081Внешний HTTP-порт vuln-apiСвободный TCP-порт на хосте
NRUNNER_NETWORK_NAMEnrunner-prodИмя общей Docker-сетиЛюбое имя Docker bridge-сети; если netrunner-server должен видеть vuln-api по внутреннему имени, значение обязано совпадать с env.server

Параметры vuln-api

ПеременнаяЗначение по шаблонуЧто задаётЧто можно подставить
VULN_SERVICE_ADDRESS0.0.0.0Адрес bind vuln-api внутри контейнераОбычно 0.0.0.0
VULN_SERVICE_PORT8081Внутренний порт vuln-apiЦелое число
VULN_DUMP_DIR/data/dumpsКаталог дампов внутри контейнераАбсолютный путь
VULN_DUMP_BASE_URLпустоБазовый URL опубликованных дамповПолный URL без завершающего /, например https://downloads.example.com/vulndb
VULN_DATABASE_UPDATE_INTERVAL168hИнтервал, с которым export считает базу актуальнойGo duration, например 24h, 168h
VULN_REMOTE_URLhttps://vulndb.example.comВнешний URL удалённого vulnerability-сервисаПолный URL со схемой
VULN_SYNC_SOURCESallИсточники данных для ручного syncall или список поддерживаемых источников, если контур работает с подмножеством

База данных уязвимостей

ПеременнаяЗначение по шаблонуЧто задаётЧто можно подставить
VULN_DB_TYPEpostgresТип БД уязвимостейДля текущего compose ожидается postgres
VULN_DB_HOSTvuln-postgresХост БД уязвимостейИмя Docker-сервиса или внешний DB host
VULN_DB_PORT5432Порт БД уязвимостейЦелое число
VULN_DB_USERpostgresПользователь БД уязвимостейИмя пользователя PostgreSQL
VULN_DB_PASSWORDpostgresПароль БД уязвимостейПароль PostgreSQL
VULN_DB_NAMEnetrunner_vulnerabilitiesИмя БД уязвимостейИмя базы PostgreSQL

Scheduler master-sync

ПеременнаяЗначение по шаблонуЧто задаётЧто можно подставить
VULN_MASTER_SYNC_ENABLEDtrueВключает schedulertrue или false
VULN_MASTER_SYNC_CRON0 2 * * 0Cron-расписание фоновой синхронизацииВалидное cron-выражение
VULN_MASTER_SYNC_TIMEZONEEurope/MoscowТаймзона schedulerИмя таймзоны IANA, например Europe/Moscow, UTC
VULN_MASTER_SYNC_SOURCESallИсточники данных для schedulerall или список поддерживаемых источников
VULN_MASTER_SYNC_RUN_ON_STARTfalseЗапускать первую синхронизацию сразу после стартаtrue или false

Источники vulnerability-данных

ПеременнаяЗначение по шаблонуЧто задаётЧто можно подставить
BDU_SYNC_URLhttps://bdu.fstec.ru/files/documents/vulxml.zipURL архива BDUПолный URL до vulxml.zip
BDU_TLS_INSECURE_SKIP_VERIFYfalseОтключение TLS-проверки для BDUtrue или false
BDU_VULNERABILITY_URL_TEMPLATEhttps://bdu.fstec.ru/vul/{identifier}Шаблон публичной ссылки на карточку BDUURL-шаблон с {identifier}
NVD_SYNC_URLhttps://services.nvd.nist.gov/rest/json/cves/2.0URL NVD APIПолный URL
NVD_API_KEYпустоAPI-ключ NVDСтрока ключа или пусто
NVD_FEED_DIRпустоКаталог локальных NVD feedsПуть внутри контейнера или mounted volume
NVD_DOWNLOAD_FEEDSfalseСкачивать feeds перед импортомtrue или false
NVD_FEED_START_YEAR2002Начальный год локальных feedsГод в формате числа
NVD_FEED_END_YEAR0Конечный год feedsГод в формате числа; 0 обычно означает отсутствие верхней границы
NVD_PAGE_SIZE2000Размер страницы при работе с NVD APIЦелое число
NVD_SYNC_LIMIT0Лимит импортируемых записейЦелое число; 0 обычно означает без лимита
NVD_CPE_SYNC_URLhttps://nvd.nist.gov/feeds/json/cpe/2.0/nvdcpe-2.0.zipURL ZIP-словаря CPEПолный URL
NVD_CPE_ZIPпустоПуть к локальному ZIP CPEПуть внутри контейнера или mounted volume
PACKAGE_RULES_JSONпустоПуть к JSON с правилами package matchingПуть к JSON-файлу
EPSS_SYNC_URLhttps://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: внутреннему, если общая сеть одна, или внешнему, если контуры разнесены.

Документация NRunner