Pular para o conteúdo

Referência de configuração

Todas as chaves são mostradas com seus valores padrão. A menos que sejam marcadas como somente de ambiente, cada opção pode ser definida no config.yaml ou pela variável de ambiente listada, que tem precedência. Valores inválidos (timeouts não positivos, concorrência igual a zero, TTLs fora do intervalo) abortam a inicialização com um erro config: validate: que nomeia a chave com problema.

ChaveVariável de ambientePadrãoDescrição
envVISION_ENVdevelopmentAmbiente de implantação: development | staging | production. Controla o rigor da validação
ChaveVariável de ambientePadrãoDescrição
http.addrVISION_HTTP_ADDR:3303Endereço e porta de escuta
http.read_timeoutVISION_HTTP_READ_TIMEOUT15sTempo máximo para ler uma requisição completa
http.write_timeoutVISION_HTTP_WRITE_TIMEOUT30sTempo máximo para escrever uma resposta
http.idle_timeoutVISION_HTTP_IDLE_TIMEOUT60sTimeout de inatividade do keep-alive
http.shutdown_graceVISION_HTTP_SHUTDOWN_GRACE10sPeríodo de tolerância para requisições em andamento no desligamento
http.pre_drain_delayVISION_HTTP_PREDRAIN_DELAY5sAtraso após o /readyz começar a falhar antes do desligamento (para balanceadores de carga)
http.secure_cookiesVISION_HTTP_SECURE_COOKIEStrueMarca os cookies de sessão/autenticação como Secure (somente HTTPS). O vision install grava false (http:// simples); defina true assim que houver HTTPS na frente
http.allowed_originsVISION_ALLOWED_ORIGINS["http://localhost:3303"]Lista de origens permitidas do CORS. Staging e production rejeitam * e uma lista vazia na inicialização
http.internal_addrVISION_HTTP_INTERNAL_ADDR(vazio)Listener separado para /healthz, /readyz, /metrics

As origens são comparadas como scheme://host[:port], sem diferenciar maiúsculas de minúsculas, com o cabeçalho Origin da requisição. Requisições cross-origin podem usar apenas os cabeçalhos Authorization, Content-Type, X-Request-ID, Idempotency-Key e Last-Event-ID — a lista de cabeçalhos permitidos é fixa, e qualquer outro falha no preflight. A lista efetiva de origens é registrada na inicialização como CORS allow-list. A produção habilita o HSTS automaticamente. Toda resposta também carrega X-Frame-Options: DENY; a interface não pode ser incorporada em um iframe, e não há opção para alterar isso.

ChaveVariável de ambientePadrãoDescrição
db.pathVISION_DB_PATH./data/vision.dbCaminho do arquivo SQLite (o diretório pai deve existir)
db.connect_timeoutVISION_DB_CONNECT_TIMEOUT5sTimeout de abertura de conexão
db.query_timeoutVISION_DB_QUERY_TIMEOUT30sTimeout de uma única consulta
ChaveVariável de ambientePadrãoDescrição
log.levelVISION_LOG_LEVELinfodebug | info | warn | error
log.formatVISION_LOG_FORMATjsonjson (produção) | text (desenvolvimento)
ChaveVariável de ambientePadrãoDescrição
auth.jwt_secretVISION_AUTH_JWT_SECRET(vazio)Segredo de assinatura do JWT. Obrigatório em staging/production
auth.access_ttlVISION_AUTH_ACCESS_TTL15mTempo de vida do token de acesso de curta duração (> 0, ≤ 1h)
auth.refresh_ttlVISION_AUTH_REFRESH_TTL168hTempo de vida da sessão de refresh rotativa (> 0, ≤ 720h). Uma sessão de navegador inativa expira após esse período
auth.oauth2_secretVISION_OAUTH2_SECRET(vazio)Segredo base64 de 32 bytes para tokens de entrada OAuth2 client-credentials. Quando não definido, POST /api/v1/events não é montado
crypto.encryption_keysVISION_ENCRYPTION_KEY, _V2, _V3, …[]Somente de ambiente. Chaves AES-256-GCM em base64 para campos criptografados do banco. A primeira chave é a ativa; as chaves mais antigas descriptografam durante a rotação. Obrigatórias em staging/production

Gere uma chave com openssl rand -base64 32. Um valor YAML para crypto.encryption_keys é ignorado; mantenha todas as chaves em /etc/vision/vision.env. Numere as chaves rotacionadas sem lacunas (_V2, _V3, …), pois o carregamento para no primeiro número ausente. O segredo JWT aceita base64 padrão ou URL-safe, com ou sem preenchimento, e deve ser decodificado para exatamente 32 bytes.

Estes valores criam o primeiro usuário administrador somente enquanto a tabela de usuários está vazia e são ignorados depois disso — editá-los quando já existe um administrador não tem efeito. Em desenvolvimento, valores ausentes recorrem a admin@localhost / admin (com um aviso na inicialização). Em staging e produção, a criação inicial aborta a inicialização quando o banco de dados não tem usuários e um dos valores está ausente. O instalador gera ambos em /etc/vision/vision.env.

ChaveVariável de ambientePadrãoDescrição
bootstrap.admin_emailADMIN_EMAIL(vazio)E-mail inicial do administrador. Padrão de desenvolvimento: admin@localhost
bootstrap.admin_passwordADMIN_PASSWORD(vazio)Senha inicial do administrador. Padrão de desenvolvimento: admin

Os detalhes de conexão do servidor Alta (URL base, credenciais e a callback base URL de cada servidor) ficam no banco de dados e são gerenciados na interface. Estas chaves ajustam apenas o cliente compartilhado.

ChaveVariável de ambientePadrãoDescrição
alta.default_timeoutVISION_ALTA_DEFAULT_TIMEOUT10sTimeout por tentativa para chamadas CRUD
alta.long_timeoutVISION_ALTA_LONG_TIMEOUT30sTimeout por tentativa para chamadas de Preview/VOD
alta.breaker_thresholdVISION_ALTA_BREAKER_THRESHOLD5Falhas consecutivas antes de o circuit breaker abrir
alta.breaker_open_forVISION_ALTA_BREAKER_OPEN_FOR30sPor quanto tempo o breaker permanece aberto
alta.bulkhead_capacityVISION_ALTA_BULKHEAD_CAPACITY64Máximo de chamadas simultâneas em andamento ao Alta
alta.stream.hls_token_ttlVISION_ALTA_STREAM_HLS_TOKEN_TTL5mTTL dos tokens de playlist HLS (≤ 1h)
alta.stream.webrtc_token_ttlVISION_ALTA_STREAM_WEBRTC_TOKEN_TTL2mTTL dos tokens bearer WHEP (≤ 1h)
alta.stream.archive_token_ttlVISION_ALTA_STREAM_ARCHIVE_TOKEN_TTL5mTTL dos tokens de reprodução de arquivo (VOD) (≤ 1h)
alta.stream.preview_list_max_windowVISION_ALTA_STREAM_PREVIEW_LIST_MAX_WINDOW2hIntervalo de tempo máximo que uma única requisição de lista de previews pode cobrir (≤ 24h)
alta.stream.auth_modeVISION_ALTA_STREAM_AUTH_MODEjwtjwt (produção) | none (somente desenvolvimento, registra um aviso)
ChaveVariável de ambientePadrãoDescrição
workers.enabledVISION_WORKERS_ENABLEDworkers padrãoLista de permissões separada por vírgulas, a partir de {clips, cleanup, health_server, health_camera, health, alta_prober, alerts, notifications, io, reconcile}. true habilita o conjunto padrão (excluindo o io, descontinuado); false não habilita nenhum. motion e screenshots são inválidos e abortam a inicialização
workers.health_probe_concurrencyVISION_WORKERS_HEALTH_PROBE_CONCURRENCY8Máximo de sondagens de saúde do Alta simultâneas por tick (≥ 1)
workers.clips_output_pathCLIPS_OUTPUT_PATH/var/lib/vision/clipsCaminho legado mantido para registros existentes; novas exportações exigem um armazenamento de saída
workers.clips_ffmpeg_binaryCLIPS_FFMPEG_BINARYffmpegCaminho do executável do ffmpeg
workers.clips_ffprobe_binaryCLIPS_FFPROBE_BINARYffprobeCaminho do ffprobe, usado ao adicionar câmeras RTSP e ao medir clipes exportados
workers.clips_worker_timeoutCLIPS_WORKER_TIMEOUT5mPrazo do ffmpeg por clipe
workers.clips_worker_concurrencyCLIPS_WORKER_CONCURRENCY2Máximo de subprocessos ffmpeg simultâneos
workers.screenshots_output_pathSCREENSHOTS_OUTPUT_PATH/var/lib/vision/screenshotsCaminho legado mantido para registros existentes; novas capturas exigem um armazenamento de saída
workers.notifications_dispatch_concurrencyVISION_NOTIFICATIONS_DISPATCH_CONCURRENCY8Máximo de goroutines simultâneas despachando e-mails, push e webhooks
workers.drain_timeoutVISION_WORKERS_DRAIN_TIMEOUT10sOrçamento total para drenar os workers no desligamento

O worker io permanece disponível apenas por compatibilidade e registra um aviso quando habilitado explicitamente; sua interface foi descontinuada. O worker alta_prober faz ping em cada servidor Alta cerca de uma vez por segundo para detectar quedas e reinicializações rapidamente; sua cadência é a configuração de sistema Server ping interval abaixo.

O worker reconcile é executado a cada hora e exclui recursos órfãos do lado do Alta — mas apenas aqueles que esta instalação consegue provar que criou (um registro de propriedade durável, não um palpite por padrão de nome), de modo que uma instalação nunca pode excluir os recursos de outra em um servidor Alta compartilhado. Consulte Conectar um servidor Alta para saber o que isso significa no dia a dia, e as linhas Reconcile abaixo para as configurações que limitam quanto ele exclui por passagem.

O worker cleanup aplica a retenção. A política do log de auditoria abaixo é criada na primeira instalação; depois de gravada, a fonte de verdade em tempo de execução é a configuração no aplicativo em Settings → Storages.

ChaveVariável de ambientePadrãoDescrição
retention.audit_daysVISION_RETENTION_AUDIT_DAYS365Valor inicial da primeira instalação para a retenção do log de auditoria, em dias

A sondagem de saúde e o ajuste do reconcile ficam no banco de dados, não no config.yaml. Toda chave abaixo pode ser gravada via PUT /api/v1/settings/{key}; a coluna UI mostra quais delas também têm um controle em Settings → Connections hoje — as demais são, por enquanto, apenas da API de configurações/CLI.

ChaveUIPadrãoIntervaloDescrição
connection.camera_health_intervalCamera health interval31–30Intervalo de sondagem de saúde da câmera, em segundos
connection.server_ping_intervalServer ping interval11–10Intervalo da sondagem de disponibilidade do Alta, em segundos. Define a rapidez com que quedas e reinicializações são detectadas
connection.server_health_intervalServer status1510–300Sondagem de telemetria do host/armazenamento, além da corroboração de alcance e do debounce de sondagens limpas que remove um servidor instável. Não define a velocidade de detecção de quedas — quem define isso é o intervalo de ping acima
connection.server_config_intervalServer config30060–3600Cadência da inspeção de desvio de configuração — com que frequência a configuração completa do Alta é obtida para detectar edições manuais. É a chamada mais pesada ao Alta; mantê-la pouco frequente é seguro e não afeta a detecção de quedas
connection.reconcile_grace_seconds(nenhuma)60060–86400Por quanto tempo um recurso do Alta sem registro correspondente no Vision deve permanecer sem referência e não reivindicado antes de o worker reconcile excluí-lo. Isto não é um interruptor de desligamento da varredura — a mesma chave limita o caminho de recuperação de falhas do worker health; remova reconcile de workers.enabled para desabilitar a varredura
connection.reconcile_max_deletes_per_tick(nenhuma)201–1000Limite por servidor e por tick de quantos recursos a varredura de reconcile exclui; o restante espera o próximo tick
connection.reconcile_candidate_ratio_guard(nenhuma)10–100Recusa a passagem de reconcile inteira de um servidor quando os candidatos à exclusão excedem references × this ratio — um freio contra uma leitura incorreta de referências apagar um servidor. 0 desabilita a proteção, para uma limpeza em massa intencional

connection.server_health_interval e connection.server_config_interval foram separados de uma única configuração (ADR-0045): a sondagem de alcance/status/telemetria e a varredura mais pesada de desvio de configuração agora são executadas em cadências independentes, de modo que a inspeção de desvio pode permanecer lenta sem também atrasar a detecção de quedas. As duas proteções de reconcile foram adicionadas junto com o registro de reivindicação de propriedade — consulte Conectar um servidor Alta para saber o que a varredura faz com elas.

ChaveVariável de ambientePadrãoDescrição
maps_background_pathMAPS_BACKGROUND_PATH(vazio)Raiz do sistema de arquivos para imagens de planta baixa. Vazio usa um diretório maps ao lado de db.path; o instalador grava /var/lib/vision/maps
ChaveVariável de ambientePadrãoDescrição
metrics.enabledVISION_METRICS_ENABLEDtrueExpõe as métricas do Prometheus em /metrics
readiness.timeoutVISION_READINESS_TIMEOUT5sPrazo total para o /readyz
readiness.check_workersVISION_READINESS_CHECK_WORKERStrueInclui a atividade dos workers na prontidão
readiness.check_schemaVISION_READINESS_CHECK_SCHEMAtrueInclui a verificação da versão do esquema
readiness.worker_stale_multiplierVISION_READINESS_WORKER_STALE_MULTIPLIER2.0Um worker está obsoleto quando seu último heartbeat é mais antigo que multiplier × tick
ChaveVariável de ambientePadrãoDescrição
security.csp_strict_modeVISION_SECURITY_CSP_STRICTfalseAtive para usar CSP estrito em desenvolvimento (sempre estrito em produção)
startup.check_schemaVISION_STARTUP_CHECK_SCHEMAtrueVerifica o esquema do banco de dados na inicialização
startup.check_environmentVISION_STARTUP_CHECK_ENVIRONMENTtrueVerifica o ambiente na inicialização
startup.check_keyringVISION_STARTUP_CHECK_KEYRINGtrueVerifica o chaveiro de criptografia na inicialização
startup.check_altaVISION_STARTUP_CHECK_ALTAtrueVerifica o alcance do Alta na inicialização. Passa quando nenhum servidor foi adicionado ainda
startup.timeoutVISION_STARTUP_TIMEOUT10sOrçamento total para as verificações de inicialização

Token bucket por usuário, indexado pelo ID do usuário. Os endpoints públicos (/healthz, /readyz, /metrics, /auth/verify) estão isentos.

O vídeo ao vivo (iniciar e parar streams) e o PTZ usam um orçamento separado de tempo real de 300 requisições por minuto, de modo que paginar um mosaico de vídeo nunca consome o orçamento de edição. Um 429 informa quanto tempo esperar.

ChaveVariável de ambientePadrãoDescrição
rate_limit.enabledVISION_RATE_LIMIT_ENABLEDtrueHabilita o limitador
rate_limit.read_per_minVISION_RATE_LIMIT_READ_PER_MIN60Requisições de leitura por minuto
rate_limit.write_per_minVISION_RATE_LIMIT_WRITE_PER_MIN60Requisições de escrita por minuto
rate_limit.burstVISION_RATE_LIMIT_BURST0Margem de rajada (0 = usar o orçamento por minuto)

Independente do limitador por usuário acima, isto protege as requisições não autenticadas de login, refresh e redefinição de senha. O login deve passar tanto pelo orçamento configurado por e-mail quanto por um orçamento fixo de 60/minuto por IP de origem. O bloqueio por e-mail é fixo de 60 segundos. O refresh de sessão é indexado pelo IP de origem e apenas sofre limitação de taxa, nunca bloqueio — uma rajada de recarregamentos de página espera alguns segundos em vez de desconectar o usuário. A redefinição de senha é indexada pelo IP de origem e usa as configurações de bloqueio progressivo abaixo. Os contadores ficam em memória no processo e são zerados na reinicialização.

ChaveVariável de ambientePadrãoDescrição
auth_rate_limit.enabledVISION_AUTH_RATE_LIMIT_ENABLEDtrueHabilita a limitação/bloqueio de autenticação
auth_rate_limit.per_minVISION_AUTH_RATE_LIMIT_PER_MIN5Tentativas sustentadas por minuto por chave
auth_rate_limit.burstVISION_AUTH_RATE_LIMIT_BURST5Capacidade do bucket (0 = usar per_min)
auth_rate_limit.max_failuresVISION_AUTH_RATE_LIMIT_MAX_FAILURES5Falhas consecutivas antes do bloqueio
auth_rate_limit.lockout_baseVISION_AUTH_RATE_LIMIT_LOCKOUT_BASE1mPrimeiro bloqueio; dobra a cada nova falha
auth_rate_limit.lockout_maxVISION_AUTH_RATE_LIMIT_LOCKOUT_MAX15mLimite máximo do backoff progressivo
auth_rate_limit.ttlVISION_AUTH_RATE_LIMIT_TTL15mJanela de inatividade antes de uma chave ser removida
auth_rate_limit.max_keysVISION_AUTH_RATE_LIMIT_MAX_KEYS4096Limite rígido de chaves rastreadas (limita a memória)