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

Переменные окружения: backend и worker

Справочник всех переменных окружения Go-компонентов Security Hub: backend (HTTP API) и worker (фоновые задачи). Worker запускается тем же config.Load(), что и backend, поэтому читает тот же набор переменных; в колонке «Компонент» отмечено, где переменная реально влияет.

Колонка «По умолчанию»: [code] — литерал в Go, [chart] — значение из Helm-чарта (charts/security-scan-hub/values.yaml). Если значения расходятся, указаны оба.

Секреты (DB_PASSWORD, JWT_SECRET, KEYCLOAK_CLIENT_SECRET, LOCAL_ADMIN_PASSWORD, LLM_API_KEY и т.п.) в Helm передаются через secretKeyRef (k8s Secret), а не plain values. В production задавайте их через секрет-менеджер (Vault / External Secrets / SealedSecrets).

Аутентификация, авторизация, SSO

Переменная Назначение Значения По умолчанию Компонент
AUTH_MODE Режим аутентификации LOCAL | SSO (иное → аварийный останов) SSO [code] / LOCAL [chart] оба
SSO_PROVIDERS Список активных провайдеров через запятую. Каждый даёт кнопку на странице входа. keycloak настраивается через KEYCLOAK_*, остальные — через OIDC_<ИМЯ>_* список через запятую, имена строчными keycloak оба
APP_ENV Окружение. В не-development включаются проверки https и обязательность секретов development | production | test production [code] оба
ALLOW_DEV_MODE Разрешает обход аутентификации по служебному токену разработки. Требует одновременно APP_ENV=development. Принимается только точное значение true true | false false backend
KEYCLOAK_URL Внутренний URL Keycloak (backend → KC) URL http://localhost:9090 [code] / "" [chart] оба
KEYCLOAK_PUBLIC_URL Публичный URL Keycloak (редиректы браузера). Пусто → берётся KEYCLOAK_URL URL "" оба
KEYCLOAK_REALM Realm Keycloak строка securityhub [code] / "" [chart] оба
KEYCLOAK_CLIENT_ID Client ID в Keycloak строка security-hub [code] / "" [chart] оба
KEYCLOAK_CLIENT_SECRET Client secret. При AUTH_MODE=SSO и не-dev — обязательная (fatal без неё) строка (секрет) change-me [code] оба
KEYCLOAK_JWKS_URL Переопределение jwks_uri из OIDC discovery (Docker/K8s split network) URL; в prod обязан https:// "" оба
KEYCLOAK_TOKEN_URL Переопределение token_endpoint URL; в prod обязан https:// "" оба
KC_JWKS_URL JWKS для валидации внешних Keycloak JWT (transparent SSO / atom-idp) URL; в prod обязан https:// "" оба
KC_ISSUER Ожидаемый iss во внешнем JWT URL; в prod обязан https:// "" оба
KC_AUDIENCES Разрешённые aud (client_id) внешних JWT CSV-список "" оба
KC_AUTO_PROVISION Автосоздание пользователей в БД при первом входе по внешнему JWT true | false false оба
FEATURE_SECURITY_HUB_INTEGRATION Мастер-флаг прозрачного SSO + эндпоинта /findings/by-correlation-keys true | false false оба
ATOM_IDP_BASE_URL Доп. CORS-origin для atom-idp URL "" backend
GOOGLE_OAUTH_CLIENT_ID Google OAuth client id строка "" оба
GOOGLE_OAUTH_CLIENT_SECRET Google OAuth client secret строка (секрет) "" оба
GOOGLE_OAUTH_REDIRECT_URL Google OAuth redirect URL URL http://localhost:8080/api/v1/auth/google/callback оба

Generic OIDC-провайдеры (OIDC_<NAME>_*)

Для каждого провайдера, указанного в SSO_PROVIDERS (кроме keycloak), задаётся набор переменных с префиксом OIDC_<UPPER(NAME)>_. Пример: провайдер azure → переменные OIDC_AZURE_*.

Переменная Назначение Значения По умолчанию Компонент
OIDC_<NAME>_DISPLAY_NAME Метка кнопки входа в UI строка имя провайдера оба
OIDC_<NAME>_DISCOVERY_URL URL OIDC well-known (/.well-known/openid-configuration). Обязательна, если не заданы все endpoint-overrides явно URL "" оба
OIDC_<NAME>_CLIENT_ID Client ID в IdP строка "" оба
OIDC_<NAME>_CLIENT_SECRET Client Secret строка (секрет) "" оба
OIDC_<NAME>_SCOPES Запрашиваемые scopes — через пробел строка openid profile email оба
OIDC_<NAME>_AUTO_PROVISION Автосоздание пользователей в БД при первом входе (роль viewer). false — принимать только уже существующих true | false true оба
OIDC_<NAME>_TRUST_EMAIL Доверять email из IdP как верифицированному, даже если email_verified отсутствует в токене. Обязательна для Microsoft Entra ID (Azure AD v2) — без неё любой вход через Azure завершается 403 true | false false оба
OIDC_<NAME>_AUTH_URL Переопределение authorization endpoint URL из discovery оба
OIDC_<NAME>_TOKEN_URL Переопределение token endpoint URL из discovery оба
OIDC_<NAME>_JWKS_URL Переопределение jwks_uri URL из discovery оба
OIDC_<NAME>_ISSUER Переопределение issuer URL из discovery оба
OIDC_<NAME>_END_SESSION_URL Переопределение end_session_endpoint URL из discovery оба

Разрешение адресов: явное переопределение важнее сведений из документа обнаружения; если не хватает и того и другого — старт прерывается. Адрес возврата, который нужно зарегистрировать у провайдера: {FRONTEND_URL}/auth/callback.

Токены и доступ

Переменная Назначение Значения По умолчанию Компонент
JWT_SECRET Секрет подписи внутренних токенов. Вне developmentобязательная, иначе аварийный останов строка (секрет) change-this-secret-key [code] оба
LICENSE_SECRET Отдельный секрет для лицензионных данных. Если не задан — берётся JWT_SECRET. Задавайте явно на новых установках, чтобы JWT_SECRET можно было менять независимо строка (секрет) значение JWT_SECRET оба
ACCESS_TOKEN_TTL_MINUTES Срок жизни токена доступа целое ≥ 1 15 backend
REFRESH_TOKEN_TTL_DAYS Срок жизни токена обновления целое ≥ 1 7 backend
LOCAL_ADMIN_PASSWORD Пароль первого администратора в режиме LOCAL. Без него на чистой базе войти невозможно строка (секрет) "" backend
ALLOWED_ORIGINS Список разрешённых источников для межсайтовых запросов. Значение * отклоняется адреса через запятую http://localhost:3000,http://localhost:8084 backend
TRUSTED_PROXIES Адреса и подсети обратных прокси, которым разрешено подменять адрес клиента заголовками X-Forwarded-For / X-Real-IP. Пусто — не доверять никому: адресом клиента считается адрес TCP-соединения список IP или CIDR через запятую "" backend

TRUSTED_PROXIES и ограничение частоты

По умолчанию заголовки пересылки игнорируются полностью — это безопасно, потому что иначе клиент мог бы подделать свой адрес и обойти ограничение частоты обращений к эндпоинтам входа, а в журнале действий остался бы чужой адрес.

Обратная сторона: если Hub стоит за обратным прокси и переменная не задана, все запросы будут выглядеть пришедшими с адреса прокси — ограничение частоты станет общим на всех. Задавайте её, когда прокси действительно есть, и не задавайте, когда его нет.

База данных

Переменная Назначение Значения По умолчанию Компонент
DB_HOST Хост PostgreSQL hostname localhost [code] оба
DB_PORT Порт PostgreSQL число 5432 оба
DB_NAME Имя БД строка securityhub оба
DB_USER Пользователь БД строка securityhub оба
DB_PASSWORD Пароль базы. Вне developmentобязательная, иначе аварийный останов строка (секрет) securityhub123 [code] оба
DB_SSLMODE Режим TLS (disable, require, verify-full и другие значения libpq) перечисление disable оба
DB_MAX_OPEN_CONNS Верхний предел соединений с базой на процесс целое ≥ 1 25 оба
DB_MAX_IDLE_CONNS Сколько соединений держать открытыми в простое целое ≥ 0 5 оба
DB_CONN_MAX_LIFETIME_MINUTES Максимальное время жизни соединения целое ≥ 1 30 оба

Предел соединений действует на процесс. Каждая реплика backend и worker открывает свой пул: при пяти репликах с настройками по умолчанию это уже 125 соединений — сверяйтесь с max_connections базы.

LLM / Sandbox (активная верификация находок)

Переменная Назначение Значения По умолчанию Компонент
LLM_BASE_URL Базовый URL LLM API URL "" оба
LLM_API_KEY Ключ LLM API строка (секрет) "" оба
LLM_MODEL Имя модели строка glm-4-plus оба
LLM_DRY_RUN Не обращаться к LLM (заглушка) true | false false [code] / true [chart] оба
LLM_FALSE_POSITIVE_THRESHOLD Порог уверенности для отсева false-positive float 0..1 0.9 оба
LLM_WORKERS Кол-во LLM-worker целое 5 [code] оба
LLM_PROMPTS_DIR Каталог с промптами путь "" оба
LLM_REQUEST_TIMEOUT_SECONDS Таймаут запроса к LLM целое (сек) 180 оба
SANDBOX_TYPE Тип песочницы "" (выкл) | docker | kubernetes "" [code] / worker kubernetes [chart] worker
SANDBOX_IMAGE Docker-образ песочницы image ref dexionius/sshub-sandbox-tools:latest оба
SANDBOX_TIMEOUT_SECONDS Таймаут выполнения в песочнице целое (сек) 120 оба
SANDBOX_OUTPUT_LIMIT_KB Лимит вывода песочницы целое (КБ) 10 оба
SANDBOX_NAMESPACE k8s namespace для pod песочницы строка "" (= namespace релиза) оба
SANDBOX_KUBECONFIG Путь к kubeconfig; пусто → in-cluster путь "" оба
SANDBOX_WG_SECRET_NAME Имя k8s Secret с WireGuard-ключами строка "" оба
SANDBOX_WG_POD_IP WireGuard IP pod (CIDR) CIDR 10.200.0.3/32 оба
SANDBOX_WG_PRIVATE_KEY WireGuard приватный ключ (docker/local) строка (секрет) "" оба
SANDBOX_WG_SERVER_PUBLIC_KEY WireGuard публичный ключ сервера строка "" оба
SANDBOX_WG_SERVER_ENDPOINT WireGuard endpoint сервера host:port "" оба

Уведомления (Telegram / Mattermost)

Переменная Назначение Значения По умолчанию Компонент
NOTIFICATIONS_DRY_RUN Не отправлять уведомления по-настоящему true | false false worker
FRONTEND_BASE_URL Базовый адрес интерфейса для ссылок внутри уведомлений адрес http://localhost:3000 worker

Токены ботов Telegram и MAX, а также входящий адрес Mattermost хранятся в настройках уведомлений в базе и задаются через интерфейс, а не переменными окружения.

Электронная почта

Единые параметры на всю установку — отдельно для каждого проекта они не задаются. Используются для оповещений о нарушении сроков и сводок об исправленных находках.

Переменная Назначение Значения По умолчанию Компонент
SMTP_HOST Сервер отправки. Пусто — отправка по почте не работает имя узла "" worker
SMTP_PORT Порт число 587 worker
SMTP_USERNAME Учётная запись строка "" worker
SMTP_PASSWORD Пароль строка (секрет) "" worker
SMTP_FROM Адрес отправителя адрес почты "" worker
SMTP_TLS_MODE Режим TLS: starttls (обычно порт 587) или прямой TLS строка starttls worker

Параллелизм очередей

Переменная Очередь По умолчанию
DISPATCHER_WORKERS Очередь по умолчанию: диспетчер событий, разбор отчётов 10
JIRA_SYNC_WORKERS Создание и обновление задач в Jira 4
JIRA_REVERSE_SYNC_WORKERS Перенос статуса из Jira в Hub 1
TELEGRAM_NOTIFICATION_WORKERS Уведомления в Telegram 5
MATTERMOST_NOTIFICATION_WORKERS Уведомления в Mattermost 10
MAXRU_NOTIFICATION_WORKERS Уведомления в MAX 5
EMAIL_NOTIFICATION_WORKERS Уведомления по электронной почте 5
FINDING_COPY_WORKERS Копирование находок между продуктами 4
DUAL_VERIFY_WORKERS Перепроверка вторым источником 2
PLUGIN_FINDING_SOURCE_SYNC_WORKERS Опрос источников-плагинов 4

Все значения — для процесса worker. Ноль не допускается: очередь с нулевым параллелизмом не обрабатывается. Число обработчиков очереди обогащения находок отдельной переменной не имеет — оно на единицу меньше PLUGIN_RUNNER_PER_PLUGIN_LIMIT.

Jira (интеграция, маршрутизация, webhook, SSRF-гард)

Переменная Назначение Значения По умолчанию Компонент
FALLBACK_JIRA_URL URL Jira, если у проекта не задан jira_config.base_url URL "" оба
FEATURE_FINDING_COPY Включить fan-out копирование находок true | false false оба
FEATURE_JIRA_REVERSE_SYNC Включить периодический Jira→Hub sync статусов true | false false оба
JIRA_REVERSE_SYNC_INTERVAL_MINUTES Период тика reverse-sync целое (мин) 60 оба
JIRA_REVERSE_SYNC_BATCH_SIZE Размер батча reverse-sync целое 500 оба
FEATURE_JIRA_ENGINE_ROUTING Per-engine issuetype override (issuetype_by_engine) true | false true worker
FEATURE_JIRA_WEBHOOK Jira→Hub webhook receiver (при false → 404) true | false true backend
HUB_BASE_URL Публичный URL Hub для callback-URL webhook и ссылок URL "" оба
JIRA_ALLOW_HTTP Разрешить http:// для Jira base URL (SSRF-гард) true | false false оба
JIRA_ALLOW_LOCAL_DIAL Разрешить обращение к локальным/приватным адресам Jira true | false false оба
JIRA_BASE_URL_ALLOWLIST Allowlist допустимых Jira base URL CSV/список "" (без ограничения) оба

Dual-verify (Hub ↔ DomainScope)

Переменная Назначение Значения По умолчанию Компонент
FEATURE_DUAL_VERIFY Мастер-флаг dual_confirm flow true | false false оба
DOMAINSCOPE_VERIFY_URL Endpoint сканера для POST verify-находка. В prod обязан https:// URL "" оба
DOMAINSCOPE_VERIFY_API_KEY Outbound API-key Hub→DomainScope строка (секрет) "" оба
DOMAINSCOPE_VERIFY_HMAC_SECRET HMAC-подпись исходящих запросов строка (секрет) "" оба
SCANNER_CALLBACK_API_KEY Inbound API-key для callback от сканера строка (секрет) "" оба
SCANNER_CALLBACK_HMAC_SECRET Primary HMAC inbound callback (32+ байт) строка (секрет) "" оба
SCANNER_CALLBACK_HMAC_SECRET_PREVIOUS Доп. HMAC-ключ на окно ротации строка (секрет) "" оба
DUAL_VERIFY_CALLBACK_BASE_URL Публичный URL Hub для генерации callback_url. При FEATURE_DUAL_VERIFY=true пустой → fail-fast URL "" оба
DUAL_VERIFY_SCANNER_TIMEOUT Таймаут ожидания callback duration 60s оба
DUAL_VERIFY_SCHEDULER_INTERVAL Период тика scheduler duration 15m оба
DUAL_VERIFY_BATCH_SIZE Кандидатов за тик целое 100 оба
DUAL_VERIFY_MAX_CONCURRENT Глобальный cap конкурентности целое 5 оба
DUAL_VERIFY_PER_PROJECT_HOURLY_CLOSURE_CAP Лимит закрытий/час на проект целое 10 оба
DUAL_VERIFY_RETRY_BACKOFF Задержки между retry CSV duration 30m,2h,6h оба
DUAL_VERIFY_INCONCLUSIVE_COOLDOWN Окно перед re-enqueue inconclusive duration 720h оба
DUAL_VERIFY_REAPER_INTERVAL Период тика reaper duration 1h оба

Manual Rescan (Hub → сканеры)

Переменная Назначение Значения По умолчанию Компонент
FEATURE_MANUAL_RESCAN Включить ручной rescan true | false false backend
DOMAINSCOPE_RESCAN_URL URL DomainScope для rescan/probe URL "" оба
DOMAINSCOPE_RESCAN_API_KEY API-key DomainScope rescan строка (секрет) "" оба
IAC_SCANNER_RESCAN_URL URL iac-scanner для rescan URL "" оба
IAC_SCANNER_RESCAN_API_KEY API-key iac-scanner rescan строка (секрет) "" оба
RESCAN_TIMEOUT_SECONDS Таймаут rescan/probe-запроса целое (сек) 10 оба
RESCAN_HOST_ALLOWLIST Allowlist хостов rescan (SSRF-гард) список "" оба

Автоматическое закрытие исправленных находок

Переменная Назначение Значения По умолчанию Компонент
FEATURE_AUTO_VERIFY_FIXES Глобальное разрешение автоматически закрывать исправленные находки. Одно из трёх условий: нужны ещё признак в настройках проекта и verify_fixes=true при загрузке отчёта true | false false оба
AUTO_VERIFY_PROBE_RETRIES Сколько раз подряд проверять отсутствие находки внутри одной проверки. Любой ответ «на месте» или «неопределённо» немедленно оставляет находку открытой целое ≥ 1 3 worker
AUTO_VERIFY_ABSENT_THRESHOLD Сколько последовательных проверок должны дать «отсутствует» до закрытия. Любое обнаружение сбрасывает счётчик. Значение 1 возвращает прежнее поведение «закрывать по одному наблюдению» целое ≥ 1 3 worker

Не ставьте AUTO_VERIFY_ABSENT_THRESHOLD=1

Именно такое поведение было раньше и привело к массовому ложному закрытию настоящих находок: значительная часть вернулась при следующем сканировании. Два уровня защиты — повторы внутри проверки и кворум между проверками — добавлены как реакция на этот случай и по отдельности недостаточны.

Сервер, хранилище, логи, лимиты, лицензия

Переменная Назначение Значения По умолчанию Компонент
SERVER_PORT Порт HTTP-сервера число 8080 [code] / 8082 [chart] backend
FRONTEND_URL URL фронта (редиректы, ссылки, fallback callback) URL http://localhost:3000 [code] / https://hub.example.com [chart] оба
STORAGE_PATH Каталог хранения отчётов путь ./storage [code] / /app/storage/reports [chart] оба
LOGS_PATH Каталог логов путь ./logs оба
LOG_MAX_SIZE_MB Размер лог-файла до ротации целое ≥1 50 оба
LOG_MAX_BACKUPS Кол-во хранимых ротированных логов целое ≥0 5 оба
LOG_MAX_AGE_DAYS Макс. возраст ротированного лога целое ≥0 30 оба
LOG_COMPRESS Сжимать ротированные журналы true | false true оба
LOG_LEVEL Уровень подробности: debug, info, warn, error. Переопределяет уровень, выведенный из APP_ENV, не меняя формат вывода — можно включить подробный вывод в промышленной среде для диагностики строка по APP_ENV: developmentdebug, иначе info оба
LICENSE_SERVER_URL Адрес сервера лицензий. Пусто — проверка не выполняется адрес "" оба
MAX_UPLOAD_SIZE_MB Предел размера загружаемого файла. Обратите внимание: предел разбора — 50 МиБ, он ниже целое ≥ 1 500 backend
RATE_LIMIT_API Частота обращений к обычным эндпоинтам, запросов в минуту целое ≥ 1 100 backend
RATE_LIMIT_AUTH Частота обращений к эндпоинтам входа, запросов в минуту целое ≥ 1 10 backend
CLEANUP_RETENTION_COMPLETED_DAYS Хранение обработанных отчётов, суток целое ≥ 0 7 worker
CLEANUP_RETENTION_FAILED_DAYS Хранение отчётов с ошибкой разбора, суток целое ≥ 0 30 worker
CLEANUP_RETENTION_PENDING_DAYS Хранение необработанных отчётов, суток целое ≥ 0 0 worker
CLEANUP_RETENTION_ORPHAN_HOURS Через сколько часов удалять файлы без записи в базе. 0 отключает целое ≥ 0 24 worker
CLEANUP_BATCH_SIZE Размер порции при очистке — и при выборке из базы, и при обходе каталога. Определяет память на одну порцию. 0 — значение по умолчанию из кода; значения выше 10 000 обрезаются целое 0…10 000 0 worker
CLEANUP_DRY_RUN Очистка без удаления: только сообщения о том, что было бы удалено true | false false worker
REFRESH_CLEANUP_RETENTION_DAYS Хранение токенов обновления, суток целое ≥ 1 30 worker

Платформа плагинов

Переменная Назначение По умолчанию
PLUGIN_RUNNER_GLOBAL_LIMIT Предел одновременно работающих процессов плагинов значение из кода
PLUGIN_RUNNER_PER_PLUGIN_LIMIT Предел одновременных запусков одного плагина 4
PLUGIN_RUNNER_KEEP_WARM_SECONDS Сколько держать процесс готовым после работы значение из кода
WASM_RUNNER_BINARY_PATH Путь к исполняемому файлу среды исполнения плагинов значение из кода
ENRICH_TAGS_RATE_LIMIT_PER_MINUTE Предел ручных запусков обогащения находки значение из кода
PLUGIN_EGRESS_ALLOWLIST Узлы, к которым плагинам разрешено обращаться ""
PLUGIN_EGRESS_ALLOW_HTTP Разрешить плагинам схему http false
PLUGIN_EGRESS_ALLOW_LOCAL_DIAL Разрешить плагинам обращения к локальным и внутренним адресам false
PLUGIN_CATALOG_ALLOWLIST Разрешённые адреса каталогов плагинов ""
PLUGIN_CATALOG_ALLOW_HTTP Разрешить http для каталога false
PLUGIN_CATALOG_ALLOW_LOCAL_DIAL Разрешить локальные адреса для каталога false
PLUGIN_OCI_ALLOWLIST Разрешённые реестры образов, откуда ставятся плагины ""
PLUGIN_OCI_ALLOW_HTTP Разрешить http для реестра false
PLUGIN_OCI_ALLOW_LOCAL_DIAL Разрешить локальные адреса для реестра false

Для плагинов, исполняемых как обычные процессы, действует отдельная группа переменных с префиксом PLUGIN_NATIVE_: предел памяти, тайм-ауты вызовов, политика перезапуска после аварийного завершения, ограничение частоты обращений и параметры удержания блокировки. Значения по умолчанию рассчитаны на то, что аварийно завершающийся плагин не должен ни перезапускаться бесконечно, ни оставаться выключенным навсегда. Подробнее: Плагины.

Автономное тестирование на проникновение

Отдельная возможность, выключенная по умолчанию: находки в состояниях «принятый риск» и «не будет исправлено», доступные извне, передаются во внешнюю систему автономного тестирования, а её результат возвращается в Hub новыми находками.

Переменная Назначение По умолчанию
FEATURE_PENTAGI_INTEGRATION Общий переключатель false
PENTAGI_BASE_URL Адрес внешней системы. В промышленной среде обязан быть https ""
PENTAGI_API_TOKEN Токен доступа ""
PENTAGI_PROVIDER Языковая модель, используемая внешней системой ""
PENTAGI_STATUSES Состояния находок, которые берутся в работу risk_accepted,wont_fix
PENTAGI_SUBMIT_INTERVAL Период постановки новых заданий 1h
PENTAGI_POLL_INTERVAL Период опроса выполняющихся заданий 5m
PENTAGI_MAX_CONCURRENT_FLOWS Предел одновременных заданий 3
PENTAGI_PER_TICK_SUBMIT_CAP Предел новых заданий за один такт 5
PENTAGI_COOLDOWN Окно, в течение которого одна и та же цель не берётся повторно 168h
PENTAGI_DRY_RUN Готовить задания, но не отправлять false
PENTAGI_EXTRA_ROE Дополнительные правила проведения работ, через \| ""
PENTAGI_HTTP_TIMEOUT Тайм-аут обращений 30s
PENTAGI_TLS_INSECURE Отключить проверку сертификата. В промышленной среде запрещено — старт прервётся false
PENTAGI_LLM_EXTRACT Преобразовывать отчёт в структурированные находки языковой моделью true
PENTAGI_INGEST_WORKERS Параллелизм приёма результатов значение из кода

Это активное воздействие

Возможность запускает автоматизированное тестирование на проникновение против ваших же систем. Включайте только с согласованными правилами проведения работ и заведомо верным перечнем целей.

Устаревшие переменные

Читаются только для того, чтобы предупредить оператора записью в журнале. Расписание очистки задаётся в коде и этими переменными не управляется.

Переменная Прежнее назначение Компонент
CLEANUP_SCHEDULE Расписание очистки отчётов — игнорируется worker
REFRESH_CLEANUP_SCHEDULE Расписание очистки токенов — игнорируется worker

Переменные, без которых сервис не стартует

Переменная При каком условии обязательна
JWT_SECRET Всегда, кроме APP_ENV=development
DB_PASSWORD Всегда, кроме APP_ENV=development
KEYCLOAK_CLIENT_SECRET При AUTH_MODE=SSO и провайдере keycloak вне development. Вне development значение по умолчанию change-me также отвергается — нужен собственный секрет
OIDC_<ИМЯ>_CLIENT_ID и OIDC_<ИМЯ>_CLIENT_SECRET Для каждого провайдера из SSO_PROVIDERS, кроме keycloak
DUAL_VERIFY_CALLBACK_BASE_URL При FEATURE_DUAL_VERIFY=true
LOCAL_ADMIN_PASSWORD Формально нет, фактически обязательна при AUTH_MODE=LOCAL — без неё на чистой базе некому войти

Неизвестное значение APP_ENV или AUTH_MODE также прерывает запуск — это сделано намеренно, чтобы опечатка не ослабляла защиту молча.

Обязательный https в промышленной среде

При APP_ENV=production запуск прерывается, если любой из этих адресов задан и использует http:

KEYCLOAK_URL, KEYCLOAK_PUBLIC_URL, KEYCLOAK_JWKS_URL, KEYCLOAK_TOKEN_URL, KC_JWKS_URL, KC_ISSUER, DOMAINSCOPE_VERIFY_URL, LLM_BASE_URL, PENTAGI_BASE_URL, а также любой адрес провайдера из SSO_PROVIDERS.

По этим каналам передаются секреты, поэтому исключений нет. Проверка адресов Keycloak не выполняется при AUTH_MODE=LOCAL — там он не используется вовсе.

В чарте по умолчанию задаётся лишь часть переменных: группы перепроверки, ручного пересканирования, маршрутизации Jira, KC_*, ограничения частоты и другие работают на значениях из кода, пока оператор не пробросит их явно через extraEnv.