Перейти к содержимому

Справочник по конфигурации

Все ключи показаны со значениями по умолчанию. Если параметр не помечен как задаваемый только через окружение, его можно указать в config.yaml или через указанную переменную окружения, которая имеет приоритет. Недопустимые значения (неположительные таймауты, нулевая конкурентность, TTL вне допустимого диапазона) прерывают запуск с ошибкой config: validate:, в которой указан проблемный ключ.

КлючПеременная окруженияПо умолчаниюОписание
envVISION_ENVdevelopmentОкружение развёртывания: development | staging | production. Определяет строгость проверок
КлючПеременная окруженияПо умолчаниюОписание
http.addrVISION_HTTP_ADDR:3303Адрес и порт прослушивания
http.read_timeoutVISION_HTTP_READ_TIMEOUT15sМаксимальное время чтения полного запроса
http.write_timeoutVISION_HTTP_WRITE_TIMEOUT30sМаксимальное время записи ответа
http.idle_timeoutVISION_HTTP_IDLE_TIMEOUT60sТаймаут простоя keep-alive
http.shutdown_graceVISION_HTTP_SHUTDOWN_GRACE10sВремя на завершение выполняющихся запросов при остановке
http.pre_drain_delayVISION_HTTP_PREDRAIN_DELAY5sЗадержка между началом сбоев /readyz и остановкой (для балансировщиков нагрузки)
http.secure_cookiesVISION_HTTP_SECURE_COOKIEStrueПомечать cookie сессии/авторизации как Secure (только HTTPS). vision install записывает false (обычный http://); установите true, когда перед сервером будет HTTPS
http.allowed_originsVISION_ALLOWED_ORIGINS["http://localhost:3303"]Список разрешённых источников CORS. Staging и production отклоняют * и пустой список при запуске
http.internal_addrVISION_HTTP_INTERNAL_ADDR(пусто)Отдельный адрес прослушивания для /healthz, /readyz, /metrics

Источники сопоставляются в виде scheme://host[:port], без учёта регистра, с заголовком Origin запроса. Кросс-доменные запросы могут использовать только заголовки Authorization, Content-Type, X-Request-ID, Idempotency-Key и Last-Event-ID — список разрешённых заголовков фиксирован, и любой другой не проходит preflight-проверку. Итоговый список источников записывается в журнал при запуске как CORS allow-list. Production автоматически включает HSTS. Каждый ответ также содержит X-Frame-Options: DENY; интерфейс нельзя встроить в iframe, и переключателя для этого нет.

КлючПеременная окруженияПо умолчаниюОписание
db.pathVISION_DB_PATH./data/vision.dbПуть к файлу SQLite (родительский каталог должен существовать)
db.connect_timeoutVISION_DB_CONNECT_TIMEOUT5sТаймаут открытия соединения
db.query_timeoutVISION_DB_QUERY_TIMEOUT30sТаймаут одного запроса
КлючПеременная окруженияПо умолчаниюОписание
log.levelVISION_LOG_LEVELinfodebug | info | warn | error
log.formatVISION_LOG_FORMATjsonjson (production) | text (development)
КлючПеременная окруженияПо умолчаниюОписание
auth.jwt_secretVISION_AUTH_JWT_SECRET(пусто)Секрет подписи JWT. Обязателен в staging/production
auth.access_ttlVISION_AUTH_ACCESS_TTL15mВремя жизни короткоживущего токена доступа (> 0, ≤ 1h)
auth.refresh_ttlVISION_AUTH_REFRESH_TTL168hВремя жизни ротируемой сессии обновления (> 0, ≤ 720h). Неактивная сессия браузера истекает по истечении этого срока
auth.oauth2_secretVISION_OAUTH2_SECRET(пусто)Секрет Base64 длиной 32 байта для входящих токенов OAuth2 client-credentials. Если не задан, POST /api/v1/events не подключается
crypto.encryption_keysVISION_ENCRYPTION_KEY, _V2, _V3, …[]Только через окружение. Ключи AES-256-GCM в Base64 для зашифрованных полей БД. Первый ключ активный; более старые ключи расшифровывают данные во время ротации. Обязательны в staging/production

Сгенерируйте ключ командой openssl rand -base64 32. Значение YAML для crypto.encryption_keys игнорируется; храните все ключи в /etc/vision/vision.env. Нумеруйте ротируемые ключи без пропусков (_V2, _V3, …), потому что загрузка останавливается на первом отсутствующем номере. Секрет JWT принимает стандартный или URL-safe Base64, с дополнением (padding) или без, и должен декодироваться ровно в 32 байта.

Эти значения создают первого пользователя-администратора, только пока таблица пользователей пуста, а затем игнорируются — их изменение после появления администратора не имеет эффекта. В режиме разработки отсутствующие значения заменяются на admin@localhost / admin (с предупреждением при запуске). В staging и production запуск прерывается, если в базе данных нет пользователей и отсутствует любое из значений. Установщик генерирует оба значения в /etc/vision/vision.env.

КлючПеременная окруженияПо умолчаниюОписание
bootstrap.admin_emailADMIN_EMAIL(пусто)Email начального администратора. Значение для разработки: admin@localhost
bootstrap.admin_passwordADMIN_PASSWORD(пусто)Пароль начального администратора. Значение для разработки: admin

Сведения о подключении к серверу Alta (базовый URL, учётные данные и callback base URL каждого сервера) хранятся в базе данных и управляются в интерфейсе. Эти ключи настраивают только общий клиент.

КлючПеременная окруженияПо умолчаниюОписание
alta.default_timeoutVISION_ALTA_DEFAULT_TIMEOUT10sТаймаут одной попытки для CRUD-вызовов
alta.long_timeoutVISION_ALTA_LONG_TIMEOUT30sТаймаут одной попытки для вызовов Preview/VOD
alta.breaker_thresholdVISION_ALTA_BREAKER_THRESHOLD5Число последовательных сбоев до размыкания circuit breaker
alta.breaker_open_forVISION_ALTA_BREAKER_OPEN_FOR30sКак долго breaker остаётся разомкнутым
alta.bulkhead_capacityVISION_ALTA_BULKHEAD_CAPACITY64Максимальное число одновременных вызовов Alta в обработке
alta.stream.hls_token_ttlVISION_ALTA_STREAM_HLS_TOKEN_TTL5mTTL токенов плейлиста HLS (≤ 1h)
alta.stream.webrtc_token_ttlVISION_ALTA_STREAM_WEBRTC_TOKEN_TTL2mTTL bearer-токенов WHEP (≤ 1h)
alta.stream.archive_token_ttlVISION_ALTA_STREAM_ARCHIVE_TOKEN_TTL5mTTL токенов воспроизведения архива (VOD) (≤ 1h)
alta.stream.preview_list_max_windowVISION_ALTA_STREAM_PREVIEW_LIST_MAX_WINDOW2hМаксимальный интервал времени, который может охватывать один запрос списка превью (≤ 24h)
alta.stream.auth_modeVISION_ALTA_STREAM_AUTH_MODEjwtjwt (production) | none (только для разработки, пишет предупреждение в журнал)
КлючПеременная окруженияПо умолчаниюОписание
workers.enabledVISION_WORKERS_ENABLEDстандартные workerСписок разрешённых значений через запятую из {clips, cleanup, health_server, health_camera, health, alta_prober, alerts, notifications, io, reconcile}. true включает стандартный набор (кроме выведенного из эксплуатации io); false не включает ни одного. motion и screenshots недопустимы и прерывают запуск
workers.health_probe_concurrencyVISION_WORKERS_HEALTH_PROBE_CONCURRENCY8Максимальное число одновременных проверок работоспособности Alta за один тик (≥ 1)
workers.clips_output_pathCLIPS_OUTPUT_PATH/var/lib/vision/clipsУстаревший путь, сохранённый для существующих записей; новым экспортам требуется хранилище для вывода
workers.clips_ffmpeg_binaryCLIPS_FFMPEG_BINARYffmpegПуть к исполняемому файлу ffmpeg
workers.clips_ffprobe_binaryCLIPS_FFPROBE_BINARYffprobeПуть к ffprobe, используется при добавлении камер RTSP и измерении экспортированных клипов
workers.clips_worker_timeoutCLIPS_WORKER_TIMEOUT5mПредельное время ffmpeg на один клип
workers.clips_worker_concurrencyCLIPS_WORKER_CONCURRENCY2Максимальное число одновременных подпроцессов ffmpeg
workers.screenshots_output_pathSCREENSHOTS_OUTPUT_PATH/var/lib/vision/screenshotsУстаревший путь, сохранённый для существующих записей; новым снимкам требуется хранилище для вывода
workers.notifications_dispatch_concurrencyVISION_NOTIFICATIONS_DISPATCH_CONCURRENCY8Максимальное число одновременных goroutine, рассылающих email, push и webhook
workers.drain_timeoutVISION_WORKERS_DRAIN_TIMEOUT10sОбщее время на остановку worker при завершении работы

Worker io остаётся доступным только для совместимости и пишет предупреждение в журнал при явном включении; его интерфейс выведен из эксплуатации. Worker alta_prober примерно раз в секунду опрашивает каждый сервер Alta, чтобы быстро обнаруживать сбои и перезапуски; его периодичность задаётся системным параметром Server ping interval ниже.

Worker reconcile запускается каждый час и удаляет осиротевшие ресурсы на стороне Alta — но только те, создание которых эта установка может доказать (долговременная запись о владении, а не догадка по шаблону имени), поэтому одна установка никогда не удалит ресурсы другой на общем сервере Alta. О том, что это означает в повседневной работе, см. Подключение сервера Alta, а параметры, ограничивающие объём удаления за один проход, — в строках Reconcile ниже.

Worker cleanup применяет политики хранения. Политика хранения журнала аудита ниже записывается при первой установке; после записи источником истины во время работы становится параметр в приложении в разделе Settings → Storages.

КлючПеременная окруженияПо умолчаниюОписание
retention.audit_daysVISION_RETENTION_AUDIT_DAYS365Начальное значение срока хранения журнала аудита при первой установке, в днях

Опрос работоспособности и настройка reconcile хранятся в базе данных, а не в config.yaml. Каждый ключ ниже можно записать через PUT /api/v1/settings/{key}; в столбце UI указано, у каких из них уже есть элемент управления в Settings → Connections — остальные пока доступны только через API параметров/CLI.

КлючUIПо умолчаниюДиапазонОписание
connection.camera_health_intervalCamera health interval31–30Интервал опроса работоспособности камер, в секундах
connection.server_ping_intervalServer ping interval11–10Интервал проверки доступности Alta, в секундах. Определяет, как быстро обнаруживаются сбои и перезапуски
connection.server_health_intervalServer status1510–300Опрос телеметрии хоста/хранилища, а также подтверждение доступности и debounce чистых опросов, снимающие статус «флаппинга» сервера. Не определяет скорость обнаружения сбоев — это интервал ping выше
connection.server_config_intervalServer config30060–3600Периодичность проверки дрейфа конфигурации — как часто загружается полная конфигурация Alta для обнаружения ручных правок. Самый тяжёлый вызов Alta; редкие запуски безопасны и не влияют на обнаружение сбоев
connection.reconcile_grace_seconds(нет)60060–86400Как долго ресурс Alta без соответствующей записи Vision должен оставаться без ссылок и невостребованным, прежде чем worker reconcile удалит его. Это не выключатель очистки — тот же ключ ограничивает путь аварийного восстановления worker health; чтобы отключить очистку, уберите reconcile из workers.enabled
connection.reconcile_max_deletes_per_tick(нет)201–1000Ограничение на сервер за тик на число ресурсов, удаляемых очисткой reconcile; остальные ждут следующего тика
connection.reconcile_candidate_ratio_guard(нет)10–100Отклоняет весь проход reconcile для сервера, когда кандидатов на удаление больше, чем references × this ratio — защита от очистки сервера из-за ошибочного чтения ссылок. 0 отключает защиту для намеренной массовой очистки

connection.server_health_interval и connection.server_config_interval были выделены из одного параметра (ADR-0045): опрос доступности/статуса/телеметрии и более тяжёлое сканирование дрейфа конфигурации теперь выполняются с независимой периодичностью, поэтому проверку дрейфа можно делать редкой, не замедляя обнаружение сбоев. Два ограничителя reconcile добавлены вместе с журналом заявок на владение — что очистка делает с ними, см. в разделе Подключение сервера Alta.

КлючПеременная окруженияПо умолчаниюОписание
maps_background_pathMAPS_BACKGROUND_PATH(пусто)Корень файловой системы для изображений планов этажей. Если пусто, используется каталог maps рядом с db.path; установщик записывает /var/lib/vision/maps
КлючПеременная окруженияПо умолчаниюОписание
metrics.enabledVISION_METRICS_ENABLEDtrueПубликовать метрики Prometheus на /metrics
readiness.timeoutVISION_READINESS_TIMEOUT5sОбщий предельный срок для /readyz
readiness.check_workersVISION_READINESS_CHECK_WORKERStrueУчитывать работоспособность worker в проверке готовности
readiness.check_schemaVISION_READINESS_CHECK_SCHEMAtrueВключать проверку версии схемы
readiness.worker_stale_multiplierVISION_READINESS_WORKER_STALE_MULTIPLIER2.0Worker считается устаревшим, когда его последний heartbeat старше multiplier × tick
КлючПеременная окруженияПо умолчаниюОписание
security.csp_strict_modeVISION_SECURITY_CSP_STRICTfalseВключить строгий CSP в режиме разработки (в production всегда строгий)
startup.check_schemaVISION_STARTUP_CHECK_SCHEMAtrueПроверять схему БД при загрузке
startup.check_environmentVISION_STARTUP_CHECK_ENVIRONMENTtrueПроверять окружение при загрузке
startup.check_keyringVISION_STARTUP_CHECK_KEYRINGtrueПроверять связку ключей шифрования при загрузке
startup.check_altaVISION_STARTUP_CHECK_ALTAtrueПроверять доступность Alta при загрузке. Проходит, если сервер ещё не добавлен
startup.timeoutVISION_STARTUP_TIMEOUT10sОбщее время на проверки при запуске

Алгоритм token bucket для каждого пользователя, ключ — ID пользователя. Публичные эндпоинты (/healthz, /readyz, /metrics, /auth/verify) исключены.

Видео в реальном времени (запуск и остановка потоков) и PTZ используют отдельный бюджет реального времени — 300 запросов в минуту, поэтому листание видеостены никогда не расходует бюджет на изменения. Ответ 429 сообщает, сколько нужно подождать.

КлючПеременная окруженияПо умолчаниюОписание
rate_limit.enabledVISION_RATE_LIMIT_ENABLEDtrueВключить ограничитель
rate_limit.read_per_minVISION_RATE_LIMIT_READ_PER_MIN60Запросов на чтение в минуту
rate_limit.write_per_minVISION_RATE_LIMIT_WRITE_PER_MIN60Запросов на запись в минуту
rate_limit.burstVISION_RATE_LIMIT_BURST0Допустимый всплеск (0 = использовать бюджет в минуту)

Независимо от ограничителя на пользователя выше, этот механизм защищает неаутентифицированные запросы входа, обновления сессии и сброса пароля. Вход должен пройти оба лимита: настроенный бюджет на email и фиксированный бюджет 60 в минуту на IP-адрес источника. Блокировка по email фиксирована и длится 60 секунд. Обновление сессии привязано к IP-адресу источника и только ограничивается по частоте, но никогда не блокируется — серия перезагрузок страницы ждёт несколько секунд, а не выходит из системы. Сброс пароля привязан к IP-адресу источника и использует параметры прогрессивной блокировки ниже. Счётчики хранятся в памяти процесса и сбрасываются при перезапуске.

КлючПеременная окруженияПо умолчаниюОписание
auth_rate_limit.enabledVISION_AUTH_RATE_LIMIT_ENABLEDtrueВключить ограничение/блокировку аутентификации
auth_rate_limit.per_minVISION_AUTH_RATE_LIMIT_PER_MIN5Устойчивое число попыток в минуту на ключ
auth_rate_limit.burstVISION_AUTH_RATE_LIMIT_BURST5Ёмкость корзины токенов (0 = использовать per_min)
auth_rate_limit.max_failuresVISION_AUTH_RATE_LIMIT_MAX_FAILURES5Число последовательных неудач до блокировки
auth_rate_limit.lockout_baseVISION_AUTH_RATE_LIMIT_LOCKOUT_BASE1mПервая блокировка; удваивается при каждой следующей неудаче
auth_rate_limit.lockout_maxVISION_AUTH_RATE_LIMIT_LOCKOUT_MAX15mПредел прогрессивного увеличения задержки
auth_rate_limit.ttlVISION_AUTH_RATE_LIMIT_TTL15mОкно простоя, после которого ключ вытесняется
auth_rate_limit.max_keysVISION_AUTH_RATE_LIMIT_MAX_KEYS4096Жёсткий предел числа отслеживаемых ключей (ограничивает память)