Ir al contenido

Referencia de configuración

Todas las claves se muestran con sus valores predeterminados. Salvo que se indique que son solo de entorno, cada opción se puede establecer en config.yaml o mediante la variable de entorno indicada, que tiene prioridad. Los valores no válidos (tiempos de espera no positivos, concurrencia en cero, TTL fuera de rango) abortan el inicio con un error config: validate: que nombra la clave problemática.

ClaveVariable de entornoValor predeterminadoDescripción
envVISION_ENVdevelopmentEntorno de despliegue: development | staging | production. Determina el rigor de la validación
ClaveVariable de entornoValor predeterminadoDescripción
http.addrVISION_HTTP_ADDR:3303Dirección y puerto de escucha
http.read_timeoutVISION_HTTP_READ_TIMEOUT15sTiempo máximo para leer una solicitud completa
http.write_timeoutVISION_HTTP_WRITE_TIMEOUT30sTiempo máximo para escribir una respuesta
http.idle_timeoutVISION_HTTP_IDLE_TIMEOUT60sTiempo de inactividad de keep-alive
http.shutdown_graceVISION_HTTP_SHUTDOWN_GRACE10sPeriodo de gracia para las solicitudes en curso al apagar
http.pre_drain_delayVISION_HTTP_PREDRAIN_DELAY5sRetraso desde que /readyz empieza a fallar hasta el apagado (para balanceadores de carga)
http.secure_cookiesVISION_HTTP_SECURE_COOKIEStrueMarca las cookies de sesión/autenticación como Secure (solo HTTPS). vision install escribe false (http:// sin cifrar); establécelo en true cuando haya HTTPS delante
http.allowed_originsVISION_ALLOWED_ORIGINS["http://localhost:3303"]Lista de orígenes permitidos de CORS. Staging y production rechazan * y una lista vacía al iniciar
http.internal_addrVISION_HTTP_INTERNAL_ADDR(vacío)Listener independiente para /healthz, /readyz, /metrics

Los orígenes se comparan como scheme://host[:port], sin distinguir mayúsculas de minúsculas, con el encabezado Origin de la solicitud. Las solicitudes de origen cruzado solo pueden usar los encabezados Authorization, Content-Type, X-Request-ID, Idempotency-Key y Last-Event-ID — la lista de encabezados permitidos es fija, y cualquier otro falla en la comprobación previa (preflight). La lista efectiva de orígenes se registra al iniciar como CORS allow-list. En production, HSTS se habilita automáticamente. Cada respuesta también incluye X-Frame-Options: DENY; la interfaz no se puede incrustar en un iframe, y no hay ningún interruptor para cambiarlo.

ClaveVariable de entornoValor predeterminadoDescripción
db.pathVISION_DB_PATH./data/vision.dbRuta del archivo SQLite (el directorio padre debe existir)
db.connect_timeoutVISION_DB_CONNECT_TIMEOUT5sTiempo de espera para abrir la conexión
db.query_timeoutVISION_DB_QUERY_TIMEOUT30sTiempo de espera de una sola consulta
ClaveVariable de entornoValor predeterminadoDescripción
log.levelVISION_LOG_LEVELinfodebug | info | warn | error
log.formatVISION_LOG_FORMATjsonjson (production) | text (development)
ClaveVariable de entornoValor predeterminadoDescripción
auth.jwt_secretVISION_AUTH_JWT_SECRET(vacío)Secreto de firma JWT. Obligatorio en staging/production
auth.access_ttlVISION_AUTH_ACCESS_TTL15mDuración del token de acceso de corta vida (> 0, ≤ 1h)
auth.refresh_ttlVISION_AUTH_REFRESH_TTL168hDuración de la sesión de renovación rotativa (> 0, ≤ 720h). Una sesión de navegador inactiva caduca pasado este tiempo
auth.oauth2_secretVISION_OAUTH2_SECRET(vacío)Secreto base64 de 32 bytes para los tokens entrantes de credenciales de cliente OAuth2. Si no se establece, POST /api/v1/events no se monta
crypto.encryption_keysVISION_ENCRYPTION_KEY, _V2, _V3, …[]Solo de entorno. Claves AES-256-GCM en base64 para los campos cifrados de la base de datos. La primera clave es la activa; las claves anteriores descifran durante la rotación. Obligatorio en staging/production

Genera una clave con openssl rand -base64 32. Un valor YAML para crypto.encryption_keys se ignora; mantén todas las claves en /etc/vision/vision.env. Numera las claves rotadas sin saltos (_V2, _V3, …), porque la carga se detiene en el primer número que falta. El secreto JWT acepta base64 estándar o seguro para URL, con o sin relleno, y debe decodificarse a exactamente 32 bytes.

Estos valores crean el primer usuario administrador solo mientras la tabla de usuarios está vacía y se ignoran después — editarlos una vez que existe un administrador no tiene efecto. En development, los valores ausentes recurren a admin@localhost / admin (con una advertencia al iniciar). En staging y production, la creación inicial aborta el inicio cuando la base de datos no tiene usuarios y falta cualquiera de los dos valores. El instalador genera ambos en /etc/vision/vision.env.

ClaveVariable de entornoValor predeterminadoDescripción
bootstrap.admin_emailADMIN_EMAIL(vacío)Correo electrónico inicial del administrador. Valor alternativo en desarrollo: admin@localhost
bootstrap.admin_passwordADMIN_PASSWORD(vacío)Contraseña inicial del administrador. Valor alternativo en desarrollo: admin

Los datos de conexión del servidor Alta (URL base, credenciales y la callback base URL de cada servidor) residen en la base de datos y se administran en la interfaz. Estas claves solo ajustan el cliente compartido.

ClaveVariable de entornoValor predeterminadoDescripción
alta.default_timeoutVISION_ALTA_DEFAULT_TIMEOUT10sTiempo de espera por intento para las llamadas CRUD
alta.long_timeoutVISION_ALTA_LONG_TIMEOUT30sTiempo de espera por intento para las llamadas Preview/VOD
alta.breaker_thresholdVISION_ALTA_BREAKER_THRESHOLD5Fallos consecutivos antes de que se abra el circuit breaker
alta.breaker_open_forVISION_ALTA_BREAKER_OPEN_FOR30sCuánto tiempo permanece abierto el breaker
alta.bulkhead_capacityVISION_ALTA_BULKHEAD_CAPACITY64Máximo de llamadas a Alta en curso simultáneas
alta.stream.hls_token_ttlVISION_ALTA_STREAM_HLS_TOKEN_TTL5mTTL de los tokens de lista de reproducción HLS (≤ 1h)
alta.stream.webrtc_token_ttlVISION_ALTA_STREAM_WEBRTC_TOKEN_TTL2mTTL de los tokens bearer de WHEP (≤ 1h)
alta.stream.archive_token_ttlVISION_ALTA_STREAM_ARCHIVE_TOKEN_TTL5mTTL de los tokens de reproducción del archivo (VOD) (≤ 1h)
alta.stream.preview_list_max_windowVISION_ALTA_STREAM_PREVIEW_LIST_MAX_WINDOW2hIntervalo de tiempo máximo que puede cubrir una sola solicitud de lista de vistas previas (≤ 24h)
alta.stream.auth_modeVISION_ALTA_STREAM_AUTH_MODEjwtjwt (production) | none (solo para desarrollo, registra una advertencia)
ClaveVariable de entornoValor predeterminadoDescripción
workers.enabledVISION_WORKERS_ENABLEDworkers estándarLista de permitidos separada por comas de {clips, cleanup, health_server, health_camera, health, alta_prober, alerts, notifications, io, reconcile}. true habilita el conjunto estándar (excluido el io retirado); false no habilita ninguno. motion y screenshots no son válidos y abortan el inicio
workers.health_probe_concurrencyVISION_WORKERS_HEALTH_PROBE_CONCURRENCY8Máximo de sondeos de salud de Alta simultáneos por ciclo (≥ 1)
workers.clips_output_pathCLIPS_OUTPUT_PATH/var/lib/vision/clipsRuta heredada que se conserva para los registros existentes; las nuevas exportaciones requieren un almacenamiento de salida
workers.clips_ffmpeg_binaryCLIPS_FFMPEG_BINARYffmpegRuta del ejecutable de ffmpeg
workers.clips_ffprobe_binaryCLIPS_FFPROBE_BINARYffprobeRuta de ffprobe, usado al agregar cámaras RTSP y al medir los clips exportados
workers.clips_worker_timeoutCLIPS_WORKER_TIMEOUT5mPlazo de ffmpeg por clip
workers.clips_worker_concurrencyCLIPS_WORKER_CONCURRENCY2Máximo de subprocesos de ffmpeg simultáneos
workers.screenshots_output_pathSCREENSHOTS_OUTPUT_PATH/var/lib/vision/screenshotsRuta heredada que se conserva para los registros existentes; las nuevas capturas requieren un almacenamiento de salida
workers.notifications_dispatch_concurrencyVISION_NOTIFICATIONS_DISPATCH_CONCURRENCY8Máximo de goroutines simultáneas que envían correos electrónicos, notificaciones push y webhooks
workers.drain_timeoutVISION_WORKERS_DRAIN_TIMEOUT10sPresupuesto total para vaciar los workers al apagar

El worker io sigue disponible solo por compatibilidad y registra una advertencia cuando se habilita explícitamente; su interfaz ha sido retirada. El worker alta_prober hace ping a cada servidor Alta aproximadamente una vez por segundo para detectar caídas y reinicios rápidamente; su cadencia es el parámetro del sistema Server ping interval que aparece más abajo.

El worker reconcile se ejecuta cada hora y elimina los recursos huérfanos del lado de Alta — pero solo los que esta instalación puede demostrar que creó (un registro de propiedad duradero, no una suposición basada en un patrón de nombres), de modo que una instalación nunca puede eliminar los recursos de otra en un servidor Alta compartido. Consulta Conectar un servidor Alta para ver qué significa esto en el día a día, y las filas Reconcile de más abajo para los parámetros que limitan cuánto elimina en cada pasada.

El worker cleanup aplica la retención. La política del registro de auditoría que aparece abajo se inicializa en la primera instalación; una vez escrita, la fuente de verdad en tiempo de ejecución es el parámetro de la aplicación en Settings → Storages.

ClaveVariable de entornoValor predeterminadoDescripción
retention.audit_daysVISION_RETENTION_AUDIT_DAYS365Valor inicial en la primera instalación para la retención del registro de auditoría, en días

El sondeo de salud y el ajuste de reconcile residen en la base de datos, no en config.yaml. Cada clave de abajo se puede escribir mediante PUT /api/v1/settings/{key}; la columna UI muestra cuáles tienen además un control en Settings → Connections hoy — el resto, por ahora, solo están disponibles mediante la API de parámetros o la CLI.

ClaveUIValor predeterminadoRangoDescripción
connection.camera_health_intervalCamera health interval31–30Intervalo de sondeo de salud de las cámaras, en segundos
connection.server_ping_intervalServer ping interval11–10Intervalo de la sonda de disponibilidad de Alta, en segundos. Determina la rapidez con que se detectan las caídas y los reinicios
connection.server_health_intervalServer status1510–300Sondeo de telemetría del host/almacenamiento, más la corroboración de accesibilidad y el filtro de sondeos limpios que da por recuperado a un servidor inestable. No determina la velocidad de detección de caídas — eso lo hace el intervalo de ping de arriba
connection.server_config_intervalServer config30060–3600Cadencia de la inspección de desviación de configuración — con qué frecuencia se obtiene la configuración completa de Alta para detectar ediciones manuales. Es la llamada más pesada a Alta; mantenerla poco frecuente es seguro y no afecta la detección de caídas
connection.reconcile_grace_seconds(ninguno)60060–86400Cuánto tiempo debe permanecer un recurso de Alta sin un registro de Vision correspondiente, sin referencias y sin reclamar, antes de que el worker reconcile lo elimine. No es un interruptor para desactivar el barrido — la misma clave regula la ruta de recuperación tras una caída del worker de salud; para desactivar el barrido, quita reconcile de workers.enabled
connection.reconcile_max_deletes_per_tick(ninguno)201–1000Límite por servidor y por ciclo de cuántos recursos elimina el barrido de reconcile; el resto espera al siguiente ciclo
connection.reconcile_candidate_ratio_guard(ninguno)10–100Rechaza toda la pasada de reconcile de un servidor cuando los candidatos a eliminar superan references × this ratio — un freno contra una lectura de referencias errónea que vacíe un servidor. 0 desactiva la protección, para una limpieza masiva intencional

connection.server_health_interval y connection.server_config_interval se separaron a partir de un único parámetro (ADR-0045): el sondeo de accesibilidad/estado/telemetría y el análisis más pesado de desviación de configuración ahora se ejecutan con cadencias independientes, de modo que la inspección de desviaciones puede mantenerse lenta sin ralentizar también la detección de caídas. Las dos protecciones de reconcile se añadieron junto con el registro de reclamaciones de propiedad — consulta Conectar un servidor Alta para ver qué hace el barrido con ellas.

ClaveVariable de entornoValor predeterminadoDescripción
maps_background_pathMAPS_BACKGROUND_PATH(vacío)Raíz del sistema de archivos para las imágenes de los planos. Si está vacío, usa un directorio maps junto a db.path; el instalador escribe /var/lib/vision/maps
ClaveVariable de entornoValor predeterminadoDescripción
metrics.enabledVISION_METRICS_ENABLEDtrueExpone las métricas de Prometheus en /metrics
readiness.timeoutVISION_READINESS_TIMEOUT5sPlazo global de /readyz
readiness.check_workersVISION_READINESS_CHECK_WORKERStrueIncluye la actividad de los workers en la comprobación de disponibilidad
readiness.check_schemaVISION_READINESS_CHECK_SCHEMAtrueIncluye la comprobación de la versión del esquema
readiness.worker_stale_multiplierVISION_READINESS_WORKER_STALE_MULTIPLIER2.0Un worker se considera obsoleto cuando su último latido es más antiguo que multiplier × tick
ClaveVariable de entornoValor predeterminadoDescripción
security.csp_strict_modeVISION_SECURITY_CSP_STRICTfalseActiva la CSP estricta en desarrollo (siempre estricta en producción)
startup.check_schemaVISION_STARTUP_CHECK_SCHEMAtrueVerifica el esquema de la base de datos al arrancar
startup.check_environmentVISION_STARTUP_CHECK_ENVIRONMENTtrueVerifica el entorno al arrancar
startup.check_keyringVISION_STARTUP_CHECK_KEYRINGtrueVerifica el llavero de cifrado al arrancar
startup.check_altaVISION_STARTUP_CHECK_ALTAtrueVerifica la accesibilidad de Alta al arrancar. Pasa cuando aún no se ha agregado ningún servidor
startup.timeoutVISION_STARTUP_TIMEOUT10sPresupuesto total para las comprobaciones de inicio

Token bucket por usuario, con el ID de usuario como clave. Los endpoints públicos (/healthz, /readyz, /metrics, /auth/verify) están exentos.

El video en vivo (iniciar y detener streams) y el PTZ usan un presupuesto de tiempo real independiente de 300 solicitudes por minuto, de modo que paginar un videowall nunca consume el presupuesto de edición. Un 429 indica cuánto hay que esperar.

ClaveVariable de entornoValor predeterminadoDescripción
rate_limit.enabledVISION_RATE_LIMIT_ENABLEDtrueHabilita el limitador
rate_limit.read_per_minVISION_RATE_LIMIT_READ_PER_MIN60Solicitudes de lectura por minuto
rate_limit.write_per_minVISION_RATE_LIMIT_WRITE_PER_MIN60Solicitudes de escritura por minuto
rate_limit.burstVISION_RATE_LIMIT_BURST0Margen de ráfaga (0 = usar el presupuesto por minuto)

Independiente del limitador por usuario de arriba, esto protege las solicitudes no autenticadas de inicio de sesión, renovación y restablecimiento de contraseña. El inicio de sesión debe cumplir tanto el presupuesto configurado por correo electrónico como un presupuesto fijo de 60 por minuto por IP de origen. El bloqueo por correo electrónico es de 60 segundos fijos. La renovación de sesión se identifica por IP de origen y solo tiene limitación de tasa, nunca bloqueo — una ráfaga de recargas de página espera unos segundos en lugar de cerrar la sesión. El restablecimiento de contraseña se identifica por IP de origen y usa los parámetros de bloqueo progresivo de abajo. Los contadores residen en el proceso y se reinician con él.

ClaveVariable de entornoValor predeterminadoDescripción
auth_rate_limit.enabledVISION_AUTH_RATE_LIMIT_ENABLEDtrueHabilita la limitación y el bloqueo de autenticación
auth_rate_limit.per_minVISION_AUTH_RATE_LIMIT_PER_MIN5Intentos sostenidos por minuto por clave
auth_rate_limit.burstVISION_AUTH_RATE_LIMIT_BURST5Capacidad del bucket (0 = usar per_min)
auth_rate_limit.max_failuresVISION_AUTH_RATE_LIMIT_MAX_FAILURES5Fallos consecutivos antes del bloqueo
auth_rate_limit.lockout_baseVISION_AUTH_RATE_LIMIT_LOCKOUT_BASE1mPrimer bloqueo; se duplica con cada fallo adicional
auth_rate_limit.lockout_maxVISION_AUTH_RATE_LIMIT_LOCKOUT_MAX15mLímite del retroceso progresivo
auth_rate_limit.ttlVISION_AUTH_RATE_LIMIT_TTL15mVentana de inactividad antes de que se elimine una clave
auth_rate_limit.max_keysVISION_AUTH_RATE_LIMIT_MAX_KEYS4096Límite estricto de claves rastreadas (acota la memoria)