Pular para o conteúdo principal

Variáveis de ambiente

Esta página lista as variáveis destinadas a operadores que são lidas pelo backend, frontend e scripts de manutenção atuais. Canários internos exclusivos de testes são omitidos.

Servidor backend

VariávelPadrãoFinalidade
NODE_ENVdevelopmentModo do runtime
PORT3001 em desenvolvimento, 8080 em produçãoPorta HTTP do backend
TRUST_PROXYnão definido (0 no Helm)Número exato de saltos de proxy confiáveis usado para obter o endereço do cliente
CORS_ORIGINorigens locais de desenvolvimentoOrigens permitidas, separadas por vírgula
SERVE_FRONTENDnão definidoServir o frontend compilado quando true
DOCKER_ENVnão definidoAtivar comportamento voltado ao Docker quando true
DATA_DIRbackend/data; ~/.libre-webui no CLI empacotadoDiretório de dados persistentes
PLATFORM_PREFLIGHT_TMP_DIRbackend/temp/preflight; cache do usuário no CLIÁrea de trabalho para inspeção privada de DB/WAL; dimensione para ambos
PLUGIN_UPLOAD_TEMP_DIRlibre-webui-plugin-uploads no temporário do SOÁrea para uploads em andamento
PLUGINS_DIR$DATA_DIR/pluginsDiretório gravável de plugins instalados/personalizados
BASE_URLhttp://localhost:3001URL base usada nos callbacks OAuth
LOG_LEVELinfo (warn em testes)Nível do log
LOG_FORMATtextjson ativa logs estruturados em uma linha com horários, IDs e redação
OTEL_EXPORTER_OTLP_ENDPOINTnão definidoExportação opcional OTLP/HTTP JSON; ausente significa que nada sai do processo
OTEL_EXPORTER_OTLP_HEADERSnão definidoCabeçalhos key=value separados por vírgula enviados ao coletor
OTEL_SERVICE_NAMElibre-webuiAtributo service.name da telemetria
WEBUI_HOSTloopback; 0.0.0.0 no DockerEndereço de escuta HTTP
OPEN_BROWSERtrue ao servir o frontendDefina false para não abrir o navegador
FULL_DOCUMENT_CONTEXT_MAX_TOKENS32000Proteção de tokens no modo de documento completo (1000-2000000)
GALLERY_RETENTION_DAYSnão definido (manter para sempre)Excluir mídia mais antiga pelo agendador
RECOVERY_DRILL_INTERVAL_HOURSnão definido (simulações desativadas)Executar simulação verificada a cada N horas (solo)
RECOVERY_DRILL_HISTORY60Entradas de histórico retidas

Execuções pelo código-fonte ancoram DATA_DIR, PLUGINS_DIR e PLATFORM_PREFLIGHT_TMP_DIR relativos no diretório do backend, independentemente do shell. Com DATA_DIR ausente ou DATA_DIR=./data, comandos usam backend/data. Por compatibilidade, DATA_DIR=./backend/data continua selecionando backend/backend/data; altere somente em uma migração parada e com backup. Sem valor, o perfil também usa o diretório histórico se for o único armazenamento. Se ambos contiverem estado e nenhum for escolhido, a inicialização falha em vez de adivinhar, copiar ou mesclar.

Os executores npx, npm global e Homebrew preservam em ~/.libre-webui. Um DATA_DIR relativo explícito é resolvido do diretório do chamador e convertido em absoluto antes do backend. PLUGINS_DIR relativo segue a mesma regra; ausente, permanece em $DATA_DIR/plugins. A área de inspeção usa cache gravável fora dos dados: ~/Library/Caches/libre-webui no macOS, %LOCALAPPDATA%\libre-webui no Windows ou ${XDG_CACHE_HOME:-~/.cache}/libre-webui nos demais. O serviço Homebrew usa Homebrew var/libre-webui/preflight. Defina PLATFORM_PREFLIGHT_TMP_DIR se não couber banco e WAL. Docker e Helm usam /app/backend/data e /app/backend/temp/preflight em montagens separadas.

Fundação da plataforma

O perfil solo usa SQLite, blobs e vetores locais criptografados, coordenação local e worker durável embutido. team usa PostgreSQL, blobs S3 privados, PGVector, Redis e worker externo. A configuração team falha de forma segura se as dependências compartilhadas não forem selecionadas juntas.

VariávelPadrãoFinalidade
LIBRE_PLATFORM_MODEsoloSelecionar perfil coerente solo ou team
DATABASE_BACKENDsqliteSelecionar sqlite ou postgres
DATABASE_URLnão definidoURL PostgreSQL, obrigatória com postgres
DATABASE_SSL_MODEverify-fullPolítica TLS: disable, require ou verify-full com verificação de host
POSTGRES_MIGRATION_MODEapplyExecutar migrações sob lock do líder ou validate para validar sem gravar
POSTGRES_POOL_MAX10Conexões máximas por processo (1-100)
POSTGRES_CONNECT_TIMEOUT_MS5000Timeout de conexão (1-60000 ms)
POSTGRES_IDLE_TIMEOUT_MS30000Timeout ocioso (1-600000 ms)
POSTGRES_STATEMENT_TIMEOUT_MS30000Timeout de instrução (1-600000 ms)
POSTGRES_MIGRATION_LOCK_TIMEOUT_MS60000Espera pelo lock de migração (1-600000 ms)
BLOB_STORE_BACKENDlocalArmazenamento local criptografado ou s3 privado
VECTOR_STORE_BACKENDembedded com SQLiteVetores embedded criptografados ou pgvector
COORDINATION_BACKENDlocal em solo; redis em teamCoordenação local ou Redis
REDIS_URLnão definidoURL redis: ou rediss:, obrigatória com Redis
REDIS_KEY_PREFIXlibreNamespace de 1-64 caracteres
REDIS_CONNECT_TIMEOUT_MS5000Timeout inicial, máximo 60 segundos
JOB_WORKER_MODEembedded em solo; external em teamExecutar manipuladores no app ou worker compartilhado
RESOURCE_LEASE_TTL_MS30000TTL de concessão de recursos (5000-300000; fora da faixa falha)
JOB_WORKER_CONCURRENCY4Trabalhos simultâneos por worker (1-32)
CHAT_STREAM_EVENT_RETENTION_HOURS24Horas de retenção dos segmentos de chat
PLATFORM_EVENT_RETENTION_DAYS30Dias de retenção de eventos
PLATFORM_JOB_RETENTION_DAYS30Dias de retenção de trabalhos concluídos
LIBRE_SKIP_STARTUP_INTEGRITY_SCANnão definido1 ignora uma inspeção profunda na próxima inicialização
STORAGE_ENCRYPTION_KEYSnão definidoMapa JSON secreto; deve incluir legacy igual a ENCRYPTION_KEY
STORAGE_ENCRYPTION_ACTIVE_KEY_IDnão definidoID para novas gravações de blobs e vetores
BLOB_QUOTA_BYTES_PER_USER10737418240Máximo de bytes em texto simples por proprietário
BLOB_QUOTA_RESERVATION_TTL_MS3600000Vida de reserva abandonada (mínimo 60000 ms)
S3_BUCKETnão definidoBucket privado, obrigatório com s3
S3_REGIONnão definidoRegião, obrigatória com s3
S3_ENDPOINTpadrão do provedorEndpoint HTTP(S) absoluto opcional para MinIO
S3_ACCESS_KEY_IDcadeia de credenciais do SDKChave explícita opcional
S3_SECRET_ACCESS_KEYcadeia de credenciais do SDKObrigatória quando a chave explícita está definida
S3_SESSION_TOKENnão definidoToken opcional
S3_FORCE_PATH_STYLEfalsetrue para serviços que exigem path-style
S3_BLOB_PREFIXlibre/blobsPrefixo opaco de chave do bucket

Sem mapa versionado, os adaptadores usam ENCRYPTION_KEY como ID legacy; sem ela, leem ${DATA_DIR}/.encryption_key sem gerar nem modificar. Configuração explícita e arquivo devem coincidir. Ao introduzir mapa com chave antiga, mantenha-a sob legacy até regravar ou reencapsular e verificar todos os objetos. Conflitos, permissões inseguras, symlinks e chaves ausentes falham de forma segura.

Redis é coordenação, não persistência canônica. Selecioná-lo sozinho não torna SQLite ou arquivos seguros entre réplicas. Em team, limites HTTP, conexões, trabalho STT/TTS/áudio, importações e terminais Work usam admissão compartilhada. Capacidades valem entre réplicas. Falhas retornam 503 ou abortam a operação; não há fallback local. Consulte Fundação da plataforma.

Os perfis team do Compose e Helm encaminham todos os seletores e ajustes para aplicação e worker. No Helm, seletores não secretos ficam em env; conexões e chaves em secrets.redisUrl, secrets.databaseUrl e secrets.storageEncryptionKeys. Os pools são por processo: reserve (replicaCount + worker.replicaCount) * POSTGRES_POOL_MAX, mais margem. Mantenha DATABASE_SSL_MODE=verify-full no PostgreSQL remoto; somente o Compose isolado usa disable. Team Helm exige um secrets.jwtSecret estável em todos os Pods. S3 recebe chaves opacas e texto cifrado; URLs não entram nos metadados.

Arquivos integrados solo/team preservam ajustes de pool e timeout, Redis, cotas de blobs, seletores e endereçamento S3 na configuração assinada e criptografada, permitindo restauração limpa sem metadados em texto simples.

Aplicação e worker recebem os mesmos OLLAMA_BASE_URL, OLLAMA_TIMEOUT, OLLAMA_LONG_OPERATION_TIMEOUT e OLLAMA_MAX_CONTEXT. Chamadas ocorrem no worker e os valores não podem divergir. Ambos analisam os três números como inteiros decimais positivos completos. Valores como 300000ms, notação exponencial/hexadecimal, fora de faixa ou timeout longo menor que o padrão fazem a inicialização falhar.

Helm restringe TRUST_PROXY a 016 e envia somente aos Pods HTTP. Use 0 no tráfego direto e o número exato em uma cadeia fixa; nunca true. Número errado agrupa clientes sob o proxy ou confia em endereço fornecido pelo cliente.

A compatibilidade PostgreSQL é de versão exata. App e worker usam Recreate; drene e termine todos os Pods antigos antes da atualização e deixe um novo processo migrar sob advisory lock. Não execute binários mistos nem alegue rollout sem interrupção. Rollback restaura o arquivo verificado anterior em PostgreSQL/S3 limpos antes do binário antigo.

Uma aplicação team ativa exige worker.replicaCount >= 1. Zere aplicação e worker para suspensão total. App zero e worker positivo é modo deliberado de drenagem/recuperação que consome a fila sem servir web.

Auxiliar de backup privado

Estas variáveis configuram deploy/private/libre-webui-backup e são lidas pelo script de manutenção, não pela aplicação:

VariávelPadrãoFinalidade
LIBRE_WEBUI_STACK_DIR/opt/libre-webuiDiretório do Compose privado
LIBRE_WEBUI_BACKUP_DIR/var/backups/libre-webuiDiretório protegido dos backups e lock
LIBRE_WEBUI_BACKUP_RETENTION_DAYS14Idade para remover conjuntos concluídos
LIBRE_WEBUI_CONTAINER_NAMElibre-webuiContêiner implantado a inspecionar
LIBRE_WEBUI_BACKUP_KEY_DIR/etc/libre-webui/backup-keysDiretório privado de chaves de criptografia e assinatura
LIBRE_WEBUI_RESTORE_IMAGEobrigatório para restaurarID ou digest imutável revisado
LIBRE_WEBUI_RESTORE_CONFIG_DIRcaminho por volume em /etc/libre-webui/restoredNovo diretório da configuração recuperada

A unidade systemd lê substituições do arquivo opcional /etc/libre-webui/backup.env, de propriedade de root. Use modo 0600. Diretório da pilha, retenção, contêiner e chaves podem ser definidos ali. O sandbox permite escrita somente no diretório padrão. Um LIBRE_WEBUI_BACKUP_DIR personalizado também exige o diretório exato previamente criado em um drop-in ReadWritePaths=; consulte Implantação remota privada.

Autenticação e segurança

VariávelPadrãoFinalidade
ENABLE_SIGNUPfalsePermitir cadastro após o primeiro administrador
JWT_SECRETgerado/fallback em desenvolvimentoSegredo de assinatura; defina em produção
JWT_EXPIRES_IN7dVida do token
ENCRYPTION_KEYgerada automaticamenteChave hexadecimal de 64 caracteres
DEBUG_ENCRYPTIONnão definidoRegistra depuração da criptografia
TURNSTILE_SITE_KEYnão definidoChave de site Turnstile
TURNSTILE_SECRET_KEYnão definidoChave secreta de verificação
TURNSTILE_EXPECTED_HOSTNAMEhost de BASE_URLHost exigido na resposta
MFA_REQUIRED_MODEnão definido (controle administrativo, optional)Fixar política em optional ou required
WEBAUTHN_RP_IDhost da solicitaçãoID relying-party fixo para passkeys em vários hosts
VAPID_PUBLIC_KEYgerada e armazenada criptografadaFixar chave pública VAPID (base64url P-256 point)
VAPID_PRIVATE_KEYgerada e armazenada criptografadaFixar chave privada VAPID (base64url scalar)
VAPID_SUBJECTmailto:admin@localhostContato em autorizações Web Push

Turnstile só é ativado com ambas as chaves.

ENABLE_SIGNUP=false ainda permite o primeiro administrador em banco vazio e bloqueia os demais. Proteja uma rota inicial remota com uma fronteira externa de identidade.

Todo JWT é vinculado a uma sessão no servidor (claim sid), então logout ou revogação invalida imediatamente em todas as réplicas e fecha WebSockets. Retenção:

VariávelPadrãoFinalidade
AUDIT_RETENTION_DAYS180Dias de retenção do log de auditoria

Single Sign-On OIDC genérico

Qualquer provedor OpenID Connect com documento de descoberta pode ser usado. O fluxo usa PKCE (S256), estado CSRF e nonce validado dentro do ID token cuja assinatura foi verificada. Identidades são ligadas pela claim estável sub.

VariávelPadrãoFinalidade
OIDC_ISSUER_URLnão definidoURL do emissor; busca em <issuer>/.well-known/openid-configuration
OIDC_CLIENT_IDnão definidoID OAuth registrado
OIDC_CLIENT_SECRETnão definidoSegredo OAuth
OIDC_DISPLAY_NAMESingle Sign-OnRótulo no botão
OIDC_SCOPESopenid profile emailEscopos solicitados
OIDC_CALLBACK_URLBASE_URL + rota OIDCURI de redirecionamento
OIDC_ALLOWED_EMAIL_DOMAINSnão definidoLista por vírgulas de domínios de e-mail verificado
OIDC_GROUP_CLAIMgroupsClaim com nomes de grupos
OIDC_ADMIN_GROUPSnão definidoLista que controla o papel admin em cada login
OIDC_SYNC_GROUPSfalsetrue sincroniza grupos Libre em cada login

OIDC só é ativado com URL, ID e segredo. Um e-mail já usado por conta local não vinculada é rejeitado em vez de mesclado, e a criação respeita ENABLE_SIGNUP.

É possível ajustar a admissão WebSocket sem enfraquecer autenticação:

VariávelPadrãoFinalidade
CHAT_WS_MAX_PAYLOAD_BYTES10 MiBTamanho máximo de mensagem
CHAT_WS_MAX_MESSAGES_PER_MINUTE120Limite por conexão
CHAT_WS_MAX_ACTIVE_GENERATIONS_PER_USER4Gerações por conta
CHAT_WS_MAX_CONNECTIONS_PER_USER5Sockets simultâneos
WEBSOCKET_TICKET_TTL_MS30000Vida do ticket único, máximo 60 segundos

O navegador troca Authorization por ticket opaco e coloca apenas esse valor curto no URL de upgrade. Tickets são únicos, vinculados ao protocolo e sessão e armazenados como hash. Quando CORS_ORIGIN ou BASE_URL está definido, o Origin do navegador deve coincidir. Defina ao menos um em implantação remota; sem ambos, o filtro é permissivo para desenvolvimento.

Upgrades sem Origin continuam disponíveis para Electron e clientes não navegador, mas exigem ticket válido e as mesmas verificações. Trate o ticket como fronteira e restrinja com TLS, firewall e proxy.

OAuth

VariávelFinalidade
GITHUB_CLIENT_IDID do cliente GitHub
GITHUB_CLIENT_SECRETSegredo GitHub
GITHUB_CALLBACK_URLSubstituição do callback
HUGGINGFACE_CLIENT_IDID do cliente Hugging Face
HUGGINGFACE_CLIENT_SECRETSegredo Hugging Face
HUGGINGFACE_CALLBACK_URLSubstituição do callback

Sem callbacks definidos, o Libre WebUI cria padrões a partir de BASE_URL.

Ollama

VariávelPadrãoFinalidade
OLLAMA_BASE_URLhttp://localhost:11434URL base
OLLAMA_TIMEOUT300000Timeout padrão (1.000-3.600.000 ms)
OLLAMA_LONG_OPERATION_TIMEOUT900000Timeout longo (mesma faixa e não menor que OLLAMA_TIMEOUT)
OLLAMA_MAX_CONTEXT32768Contexto máximo adotado (128-2.097.152 tokens)

Busca na web

VariávelPadrãoFinalidade
SEARXNG_URLnão definidoEndpoint padrão; administrador ainda ativa em Configurações > Busca

Libre Claw

VariávelPadrãoFinalidade
LIBRE_CLAW_BASE_URLhttp://127.0.0.1:8766URL opcional do daemon
LIBRE_CLAW_TIMEOUT_MS30000Timeout HTTP

Runtime do Work

Estas variáveis configuram a execução na máquina ou cluster do backend. Docker é o padrão; Helm escolhe Kubernetes com work.enabled=true.

VariávelPadrãoFinalidade
WORK_RUNTIME_IMAGEnode:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3Imagem fixada dos sandboxes
WORK_DOCKER_COMMANDdockerExecutável CLI
WORK_COMMAND_TIMEOUT_MS120000Timeout padrão; ferramenta pode pedir 600000 ms
WORK_MAX_OUTPUT_CHARS50000Limite por stream de stdout/stderr
WORK_MAX_AGENT_ROUNDS48Rodadas modelo/ferramenta por execução
WORK_STATUS_BLURB_MODEL10 ignora a chamada que escreve o status do agente
WORK_MEMORY_LIMIT2gMemória por contêiner
WORK_CPU_LIMIT2CPU por contêiner
WORK_PIDS_LIMIT256Processos por contêiner
WORK_PREVIEW_PORT4173Porta interna da prévia
WORK_PREVIEW_BIND127.0.0.1Interface do host para publicar; implantações Compose no Docker Engine nativo precisam usar uma interface de bridge não pública e alcançável
WORK_DOCKER_PUBLISHED_HOSTpadrão do app: igual a WORK_PREVIEW_BIND; padrão do Compose: host.docker.internalHost/IP visto pelo backend para prévia, tela e áudio
WORK_COMPUTER_SCREEN_PORT6080Porta da ponte de tela websockify
WORK_COMPUTER_AUDIO_PORT6081Porta da ponte de áudio websockify/PulseAudio
WORK_MAX_ACTIVE_RUNTIMES_GLOBAL3Tarefas simultâneas na instância
WORK_MAX_ACTIVE_RUNTIMES_PER_USER2Tarefas simultâneas por usuário
WORK_MAX_TASKS_GLOBAL500Tarefas persistidas na instância
WORK_MAX_TASKS_PER_USER100Tarefas persistidas por administrador
WORK_NETWORK_NAMElibre-webui-workRede bridge gerenciada
WORK_RUN_LEASE_WAIT_MS60000Espera pela concessão compartilhada antes de conflito (team)
WORK_RUNTIME_DNSnão definidoIPs de resolvedores separados por vírgula
WORK_DOCKER_SOCKETDOCKER_HOST se unix:// ou tcp://, senão /var/run/docker.sockEndpoint Docker Engine de terminais e diagnóstico
WORK_TERMINAL_MAX_SESSIONS_PER_TASK2Terminais simultâneos por tarefa
WORK_TERMINAL_IDLE_TIMEOUT_MS900000Timeout ocioso
WORK_RUNTIME_IDLE_TIMEOUT_MS0 (desativado)Parar sandbox após inatividade, inclusive prévias
WORK_HOST_WORKSPACES_ENABLEDfalsePermitir pasta do host
WORK_HOST_WORKSPACE_ROOTSdiretório pessoal do usuárioRaízes permitidas separadas por :
WORK_RUNTIME_BACKENDdockerdocker ou kubernetes
WORK_K8S_NAMESPACElibre-webui-workNamespace de Pods/PVCs
WORK_K8S_STORAGE_CLASSpadrão do clusterStorageClass
WORK_K8S_WORKSPACE_SIZE5GiPVC por tarefa, cota real
WORK_K8S_POD_READY_TIMEOUT_MS900000Espera pelo Pod Running
WORK_K8S_POD_GONE_TIMEOUT_MS60000Espera pelo desaparecimento
AGENT_CLI_MODELS_ENABLEDnão definido (controle administrativo, desligado)Fixar Agents ligado/desligado
TOOLS_ACCESS_MODEnão definido (somente administradores)Fixar ferramentas em admins ou all-users
STT_ACCESS_MODEnão definido (todos)Fixar STT em admins ou all-users
TTS_ACCESS_MODEnão definido (todos)Fixar TTS em admins ou all-users
VOICE_MODE_ACCESS_MODEnão definido (todos)Fixar modo de voz em admins ou all-users
VOICE_CLONING_ACCESS_MODEnão definido (todos)Fixar clonagem em admins ou all-users
TOOLS_PRIVATE_NETWORK_ALLOWLISTnão definidoHosts exatos que ferramentas/Webhooks podem resolver em rede privada
AGENT_CLI_TIMEOUT_MS600000Tempo até encerrar agent CLI
CODEX_OAUTH_MODELS_ENABLEDtrueOferecer Codex (ChatGPT) a administradores
CODEX_HOME~/.codexLocal de auth.json

Binários Agent CLI e credenciais Codex OAuth são locais ao nó e só funcionam em solo, onde descoberta e execução veem o mesmo ambiente. Team executa trabalhos no worker e exige AGENT_CLI_MODELS_ENABLED=false e CODEX_OAUTH_MODELS_ENABLED=false; outros valores são rejeitados. Use Ollama ou plugin com estado compartilhado.

No Docker, uma pasta do host é montada em /workspace, permitindo leitura/escrita direta. Kubernetes rejeita. Isso reduz o isolamento: mantenha WORK_HOST_WORKSPACES_ENABLED desligado e WORK_HOST_WORKSPACE_ROOTS estreito. Caminhos resolvem symlinks e .ssh, .gnupg, .aws, .config são recusados.

Modelos Agent CLI expõem agentes instalados (claude, codex) sem chave. Somente administradores veem; o CLI roda como usuário do servidor e herda credenciais — equivalente a conceder acesso de shell a esses agentes.

Tarefas com rede entram na bridge WORK_NETWORK_NAME com comunicação entre contêineres desativada. WORK_RUNTIME_DNS aponta a resolvedor filtrante; entradas não IP são recusadas. DNS não restringe IP direto, exigindo firewall. Kubernetes usa NetworkPolicies e work.networkPolicy.blockedEgressCidrs.

Terminal e diagnóstico Docker falam diretamente com Engine API: WORK_DOCKER_SOCKET, ou DOCKER_HOST (unix:// ou tcp:// HTTP como proxy; veja docker-compose.socket-proxy.yml), ou /var/run/docker.sock. ssh:// e tcp:// com DOCKER_TLS_VERIFY tornam terminal/diagnóstico indisponíveis; o resto continua pelo CLI. Kubernetes usa Pod exec.

Os valores são lidos na inicialização. A porta de prévia é interna e publicada em loopback dinâmico.

Fixe a imagem em versão/digest revisado. Aumentar concorrência amplia recursos consumidos. WORK_MAX_AGENT_ROUNDS vale igualmente para Ollama e plugins. O orçamento de chamadas é max(128, WORK_MAX_AGENT_ROUNDS × 8). Ao esgotar, o Work pede uma entrega final sem ferramentas e termina em needs_input, não erro bruto nem conclusão falsa. Uma nova execução continua no mesmo espaço. A saída persistida limita-se a cerca de 20.000 caracteres e marcador.

Essas variáveis ajustam um runtime já acessível. Compose de instância única habilita por padrão com CLI e socket. Duas variáveis de nível Compose:

VariávelPadrãoFinalidade
DOCKER_GID0Grupo do socket adicionado ao usuário
DOCKER_SOCKET/var/run/docker.sockCaminho do socket

DOCKER_GID deve ser o grupo visto dentro do contêiner; macOS informa outro. A base team não monta socket até adicionar docker-compose.team.work.yml; esse overlay dá a app e worker o mesmo proxy interno filtrado. Criar contêiner ainda é credencial de controle do host; prefira daemon dedicado/rootless. Helm nunca monta socket do nó; ative Pod/PVC com work.enabled=true.

solo deve ter zero ou uma réplica. Helm aceita zero para suspensão e rejeita mais ou autoscaling. team completo usa múltiplas réplicas e worker por ter PostgreSQL, S3, PGVector e Redis. Pods Work escalam à parte, e worker recebe mesma imagem, StorageClass e work.env.

Compose também aceita WEBUI_BIND_ADDRESS (padrão 127.0.0.1) e WEBUI_PORT (padrão 8080). Mantenha loopback salvo necessidade confiável.

Descoberta de modelos de provedores

Catálogos ausentes ou antigos são redescobertos:

VariávelPadrãoFinalidade
PLUGIN_MODEL_DISCOVERY_TTL_MS21600000 (6 h)Idade para atualizar na próxima leitura
PLUGIN_MODEL_DISCOVERY_RETRY_MS600000 (10 min)Intervalo mínimo após falha
PLUGIN_MODEL_DISCOVERY_REFRESH_DEADLINE_MS3000Espera antes de responder

Uma atualização tardia aparece na próxima solicitação. Atualizar modelos ignora o intervalo.

Chaves de plugins de provedores

VariávelProvedor
OPENAI_API_KEYOpenAI e OpenAI TTS
ANTHROPIC_API_KEYAnthropic
GROQ_API_KEYGroq
GEMINI_API_KEYGoogle Gemini
MISTRAL_API_KEYMistral
OPENROUTER_API_KEYOpenRouter
KIMI_API_KEYKimi Code da Moonshot AI
GITHUB_API_KEYGitHub Models
HUGGINGFACE_API_KEYAPIs Hugging Face configuradas
ELEVENLABS_API_KEYElevenLabs TTS
COMFYUI_API_KEYComfyUI com chave

Usuários também salvam credenciais na interface. Chaves ambientais valem somente para definição incluída não shadowed. Importadas, graváveis com ID incluído e rotas personalizadas exigem credencial da conta; o Libre não anexa a chave nem a expõe em descoberta. A confiança vem do hash compilado.

Chaves salvas são vinculadas à definição, origem, autenticação e rota. Devem ser salvas novamente após mudança. Legadas sem vínculo só migram no primeiro uso de definição e rota exatas.

Em source, PLUGINS_DIR relativo resolve do backend; no pacote, vira absoluto do chamador. Por compatibilidade, também lê backend/plugins e locais antigos. Mova para $DATA_DIR/plugins; a recuperação bloqueia snapshot só de volume enquanto houver estado externo. Diretórios e JSON devem ser entradas físicas regulares; symlinks não são seguidos.

Frontend

VariávelPadrãoFinalidade
VITE_API_BASE_URLproxy de desenvolvimento de mesma origem ou API de produçãoURL base da API
VITE_WS_BASE_URLinferido da APIBase absoluta ws:/wss: para Chat e Work
VITE_APP_VERSIONversão injetada pelo ViteVersão exibida
VITE_DEMO_MODEfalseSimulações quando true
VITE_API_TIMEOUT300000Timeout em ms
VITE_BACKEND_URLhttp://localhost:3001Usado por componentes de autenticação
VITE_DEBUG_VERBOSEnão definidoLogs detalhados em desenvolvimento
VITE_LOG_LEVELnão definidoSubstitui o nível
ELECTRON_BUILDnão definidoComportamento Electron quando true

VITE_WS_BASE_URL substitui todos os fallbacks WebSocket. Pode incluir prefixo, mas deve ser URL ws: ou wss: absoluto sem credenciais, consulta ou fragmento. Ausente, Electron file: usa ws://localhost:3001; navegador deriva de VITE_API_BASE_URL, depois da origem do navegador. O Vite faz proxy da origem de desenvolvimento para o backend na porta 3001.

Scripts de manutenção

VariávelFinalidade
CHANGELOG_AI0 desativa rascunhos assistidos
CHANGELOG_AI_MODELModelo Ollama para release/changelog
CHANGELOG_AI_TIMEOUT_MSTimeout em ms
CHANGELOG_AI_MODEL=glm-5.2:cloud npm run changelog
CHANGELOG_AI=0 npm run release:minor

Exemplo de produção

NODE_ENV=production
PORT=3001
SERVE_FRONTEND=true
DATA_DIR=/data/libre-webui
CORS_ORIGIN=https://librewebui.example
BASE_URL=https://librewebui.example

JWT_SECRET=replace-with-a-long-random-secret
ENCRYPTION_KEY=replace-with-64-hex-characters
ENABLE_SIGNUP=false

OLLAMA_BASE_URL=http://ollama:11434
OLLAMA_TIMEOUT=300000
OLLAMA_LONG_OPERATION_TIMEOUT=900000
OLLAMA_MAX_CONTEXT=32768

TURNSTILE_SITE_KEY=...
TURNSTILE_SECRET_KEY=...
TURNSTILE_EXPECTED_HOSTNAME=librewebui.example

Documentos relacionados