Saltar al contenido principal

Variables de entorno

Esta página enumera las variables destinadas a operadores que leen actualmente el backend, frontend y scripts de mantenimiento de Libre WebUI. Se omiten deliberadamente los indicadores internos exclusivos de pruebas.

Servidor backend

VariablePredeterminadoFinalidad
NODE_ENVdevelopmentModo de ejecución
PORT3001 en desarrollo, 8080 en producciónPuerto HTTP del backend
TRUST_PROXYsin definir (0 en Helm)Número exacto de saltos de proxy inverso de confianza para derivar la dirección del cliente
CORS_ORIGINorígenes locales de desarrolloOrígenes permitidos del navegador, separados por comas
SERVE_FRONTENDsin definirServir el frontend compilado desde el backend cuando sea true
DOCKER_ENVsin definirActivar comportamiento orientado a Docker cuando sea true
DATA_DIRbackend/data; ~/.libre-webui en el CLI empaquetadoDirectorio de datos persistentes
PLATFORM_PREFLIGHT_TMP_DIRbackend/temp/preflight; caché del usuario en el CLIEspacio temporal para una copia privada de inspección DB/WAL; dimensiona para la base y su WAL
PLUGIN_UPLOAD_TEMP_DIRlibre-webui-plugin-uploads en el temporal del SOEspacio temporal para subidas de plugins en curso
PLUGINS_DIR$DATA_DIR/pluginsDirectorio escribible de plugins instalados o personalizados
BASE_URLhttp://localhost:3001URL base para devoluciones OAuth predeterminadas
LOG_LEVELinfo (warn en pruebas)Nivel de registro del backend
LOG_FORMATtextjson activa registros estructurados de una línea con marcas, correlación y censura
OTEL_EXPORTER_OTLP_ENDPOINTsin definirExportación opcional de telemetría JSON OTLP/HTTP; sin valor no sale telemetría
OTEL_EXPORTER_OTLP_HEADERSsin definirCabeceras key=value al colector OTLP, separadas por comas (por ejemplo, autenticación)
OTEL_SERVICE_NAMElibre-webuiAtributo de recurso service.name en la telemetría exportada
WEBUI_HOSTbucle invertido; 0.0.0.0 en DockerDirección de escucha HTTP
OPEN_BROWSERtrue al servir el frontendDefine false para impedir que se abra el navegador
FULL_DOCUMENT_CONTEXT_MAX_TOKENS32000Límite de tokens del modo de documento completo por chat (1000-2000000)
GALLERY_RETENTION_DAYSsin definir (conservar siempre)Eliminar mediante el programador medios de la galería más antiguos que estos días
RECOVERY_DRILL_INTERVAL_HOURSsin definir (simulacros desactivados)Ejecutar automáticamente un simulacro verificado cada N horas (perfil solo)
RECOVERY_DRILL_HISTORY60Entradas de historial de simulacros conservadas

Los inicios desde el código fuente anclan los valores relativos DATA_DIR, PLUGINS_DIR y PLATFORM_PREFLIGHT_TMP_DIR al directorio del backend, con independencia del directorio de la shell. Sin DATA_DIR —o con DATA_DIR=./data— los comandos desde la raíz y el backend usan backend/data. Por compatibilidad, una configuración existente DATA_DIR=./backend/data sigue seleccionando backend/backend/data; cámbiala solo durante una copia y migración deliberadas con el servicio detenido. Un perfil sin valor también usa el directorio histórico si es el único almacén. Si ambos contienen estado y no se elige uno, el inicio falla de forma segura en vez de adivinar, copiar o combinar.

Los lanzadores npx, npm global y Homebrew conservan los datos en ~/.libre-webui. Un DATA_DIR relativo explícito se resuelve desde el directorio del invocador y se convierte en absoluto antes de iniciar. Un PLUGINS_DIR relativo sigue la misma regla; si falta, los plugins permanecen en $DATA_DIR/plugins. El espacio de inspección usa una caché escribible fuera de los datos: ~/Library/Caches/libre-webui en macOS, %LOCALAPPDATA%\libre-webui en Windows o ${XDG_CACHE_HOME:-~/.cache}/libre-webui en otros sistemas. El servicio Homebrew fija el mismo directorio personal y usa var/libre-webui/preflight. Define PLATFORM_PREFLIGHT_TMP_DIR si la caché no admite la base más WAL. Docker y Helm usan /app/backend/data y /app/backend/temp/preflight con montajes separados.

Base de la plataforma

El perfil solo utiliza SQLite, blobs locales cifrados, vectores integrados cifrados, coordinación local y un trabajador duradero integrado. team utiliza PostgreSQL, blobs privados compatibles con S3, PGVector, Redis y un trabajador externo. La configuración de equipo falla de forma segura: todas las dependencias compartidas deben elegirse juntas.

VariablePredeterminadoFinalidad
LIBRE_PLATFORM_MODEsoloSeleccionar el perfil coherente solo o team
DATABASE_BACKENDsqliteSeleccionar sqlite o postgres
DATABASE_URLsin definirURL de PostgreSQL, obligatoria con postgres
DATABASE_SSL_MODEverify-fullPolítica TLS: disable, require o verify-full con comprobación del host
POSTGRES_MIGRATION_MODEapplyEjecutar migraciones bajo bloqueo de líder, o validate para comprobar el esquema en lectura
POSTGRES_POOL_MAX10Conexiones máximas por proceso de aplicación o trabajador (1-100)
POSTGRES_CONNECT_TIMEOUT_MS5000Tiempo de conexión PostgreSQL (1-60000 ms)
POSTGRES_IDLE_TIMEOUT_MS30000Tiempo de inactividad de conexión (1-600000 ms)
POSTGRES_STATEMENT_TIMEOUT_MS30000Tiempo de sentencia PostgreSQL (1-600000 ms)
POSTGRES_MIGRATION_LOCK_TIMEOUT_MS60000Espera del bloqueo de migración (1-600000 ms)
BLOB_STORE_BACKENDlocalSeleccionar almacenamiento local cifrado o s3 privado
VECTOR_STORE_BACKENDembedded con SQLiteSeleccionar vectores embedded cifrados o pgvector
COORDINATION_BACKENDlocal en solo; redis en teamSeleccionar coordinación local o Redis
REDIS_URLsin definirURL redis: o rediss:, obligatoria con Redis
REDIS_KEY_PREFIXlibreEspacio de nombres de 1-64 caracteres para claves de coordinación
REDIS_CONNECT_TIMEOUT_MS5000Espera inicial de Redis, máximo 60 segundos
JOB_WORKER_MODEembedded en solo; external en teamEjecutar controladores en la aplicación o trabajador compartido
RESOURCE_LEASE_TTL_MS30000TTL del arrendamiento de recursos (5000-300000; el inicio falla fuera del intervalo)
JOB_WORKER_CONCURRENCY4Trabajos duraderos simultáneos por trabajador (1-32)
CHAT_STREAM_EVENT_RETENTION_HOURS24Horas de conservación de fragmentos de chat antes del barrido
PLATFORM_EVENT_RETENTION_DAYS30Días de conservación de eventos duraderos
PLATFORM_JOB_RETENTION_DAYS30Días de conservación de trabajos terminados no vitales
LIBRE_SKIP_STARTUP_INTEGRITY_SCANsin definir1 omite el análisis profundo de cifrado heredado en el siguiente inicio (salida de emergencia; normalmente en caché)
STORAGE_ENCRYPTION_KEYSsin definirMapa JSON secreto; debe incluir legacy que coincida con ENCRYPTION_KEY
STORAGE_ENCRYPTION_ACTIVE_KEY_IDsin definirID de clave para nuevas escrituras de blobs locales y vectores integrados
BLOB_QUOTA_BYTES_PER_USER10737418240Máximo persistente de bytes de blob sin cifrar por propietario
BLOB_QUOTA_RESERVATION_TTL_MS3600000Vida de una reserva abandonada (mínimo 60000 ms)
S3_BUCKETsin definirBucket privado compatible con S3, obligatorio con s3
S3_REGIONsin definirRegión S3, obligatoria con s3
S3_ENDPOINTpredeterminado del proveedorEndpoint HTTP(S) absoluto opcional para MinIO u otro servicio compatible
S3_ACCESS_KEY_IDcadena de credenciales del SDKClave de acceso S3 explícita opcional
S3_SECRET_ACCESS_KEYcadena de credenciales del SDKObligatoria al definir una clave explícita
S3_SESSION_TOKENsin definirToken opcional que acompaña credenciales explícitas
S3_FORCE_PATH_STYLEfalseDefine true para servicios que requieren direccionamiento por ruta
S3_BLOB_PREFIXlibre/blobsPrefijo opaco de claves del bucket propiedad de Libre

Sin mapa de claves versionado, los adaptadores usan ENCRYPTION_KEY como ID legacy; si tampoco existe, leen ${DATA_DIR}/.encryption_key sin generarlo ni modificarlo. La configuración y el archivo deben coincidir. Si se introduce un mapa con una clave antigua, consérvala bajo legacy hasta reescribir o volver a envolver y verificar todos los objetos y vectores. Conflictos, permisos inseguros, enlaces simbólicos y claves ausentes fallan de forma segura.

Redis coordina; no es persistencia canónica. Elegirlo solo no hace seguros SQLite, archivos locales u otro estado de proceso entre réplicas. En team, límites HTTP, conexiones Chat/WebSocket, trabajos STT/TTS/audio, importaciones y terminales de Work utilizan admisión compartida mediante Redis. Las capacidades se aplican a todas las réplicas. Los fallos de admisión o renovación devuelven 503 o abortan; Libre nunca recurre a un contador local. Consulta Base de la plataforma.

Compose team y Helm transmiten todos los selectores y ajustes a aplicación y trabajador. En Helm, los no secretos están bajo env; define secrets.redisUrl, secrets.databaseUrl y secrets.storageEncryptionKeys para conexiones y claves. Los pools son por proceso: reserva al menos (replicaCount + worker.replicaCount) * POSTGRES_POOL_MAX conexiones más margen. Mantén DATABASE_SSL_MODE=verify-full para PostgreSQL remoto; solo Compose team selecciona disable porque su escucha está aislada. Helm team exige secrets.jwtSecret estable compartido por todos los Pods; sin él cada proceso generaría material local. S3 recibe claves opacas y texto cifrado; las URL no se almacenan en metadatos.

Los archivos integrados de solo y team conservan ajustes de pool y esperas, espera de Redis, cuotas de blobs, selectores y direccionamiento S3 en configuración protegida, firmada y cifrada. Una restauración limpia puede publicar los valores necesarios sin ponerlos en metadatos sin cifrar.

Los pares aplicación/trabajador reciben los mismos OLLAMA_BASE_URL, OLLAMA_TIMEOUT, OLLAMA_LONG_OPERATION_TIMEOUT y OLLAMA_MAX_CONTEXT. Las llamadas de embeddings, chats duraderos y Work se ejecutan en el trabajador, así que no deben divergir. Ambos puntos de entrada analizan los tres valores numéricos como enteros positivos completos en base 10 antes de crear o conectar estado. Valores como 300000ms, notación exponencial/hexadecimal, fuera de rango o una espera larga menor fallan al iniciar.

Helm restringe TRUST_PROXY a un entero de 0 a 16 y solo lo envía a Pods HTTP. Mantén 0 para tráfico directo; define el recuento fijo exacto para la cadena y nunca true. Un valor incorrecto agrupa clientes o confía en una dirección proporcionada por ellos.

PostgreSQL exige compatibilidad exacta. App y trabajador usan Recreate; drena y termina todos los Pods antiguos antes de actualizar y deja que un proceso migre bajo el bloqueo asesor. No mezcles binarios ni prometas una actualización sin interrupción. Revertir significa restaurar el archivo verificado anterior en destinos limpios antes de iniciar el binario antiguo.

Una aplicación team activa exige worker.replicaCount >= 1; Helm rechaza una aplicación viva sin trabajador. Pon aplicación y trabajador a cero para suspensión completa. Aplicación a cero y trabajador positivo es modo deliberado de drenaje/recuperación y sigue consumiendo la cola sin servir web.

Auxiliar de copias privadas

Estas variables configuran deploy/private/libre-webui-backup y las lee el script de mantenimiento, no la aplicación:

VariablePredeterminadoFinalidad
LIBRE_WEBUI_STACK_DIR/opt/libre-webuiDirectorio del archivo Compose privado
LIBRE_WEBUI_BACKUP_DIR/var/backups/libre-webuiDirectorio protegido de copias y bloqueo
LIBRE_WEBUI_BACKUP_RETENTION_DAYS14Edad de eliminación de copias completadas
LIBRE_WEBUI_CONTAINER_NAMElibre-webuiContenedor desplegado que inspeccionar
LIBRE_WEBUI_BACKUP_KEY_DIR/etc/libre-webui/backup-keysDirectorio de claves de cifrado y firma
LIBRE_WEBUI_RESTORE_IMAGEobligatorio para restaurarID o resumen inmutable revisado de imagen Libre
LIBRE_WEBUI_RESTORE_CONFIG_DIRruta por volumen bajo /etc/libre-webui/restoredDirectorio nuevo para la configuración recuperada

La unidad systemd carga anulaciones del archivo opcional /etc/libre-webui/backup.env, propiedad de root. Ponlo en modo 0600. Allí se pueden definir directorios, retención, contenedor y claves. El aislamiento de la unidad solo permite escribir bajo el directorio predeterminado. Un LIBRE_WEBUI_BACKUP_DIR personalizado requiere añadir exactamente ese directorio precreado a ReadWritePaths= en una anulación; consulta Despliegue remoto privado.

Autenticación y seguridad

VariablePredeterminadoFinalidad
ENABLE_SIGNUPfalsePermitir registro tras el primer administrador local
JWT_SECRETgenerado/reserva en desarrolloSecreto de firma JWT; definir expresamente en producción
JWT_EXPIRES_IN7dVida del token de sesión
ENCRYPTION_KEYgenerada automáticamenteClave hexadecimal de 64 caracteres
DEBUG_ENCRYPTIONsin definirRegistrar depuración del cifrado
TURNSTILE_SITE_KEYsin definirClave de sitio Cloudflare Turnstile
TURNSTILE_SECRET_KEYsin definirClave secreta de verificación
TURNSTILE_EXPECTED_HOSTNAMEhost de BASE_URLHost exigido en la respuesta de Cloudflare
MFA_REQUIRED_MODEsin definir (interruptor, optional)Fijar política de dos factores a optional o required
WEBAUTHN_RP_IDhost de la solicitudID fijo de parte dependiente para llaves tras varios hosts
VAPID_PUBLIC_KEYgenerada y almacenada cifradaFijar clave pública Web Push VAPID (punto P-256 base64url)
VAPID_PRIVATE_KEYgenerada y almacenada cifradaFijar clave privada Web Push VAPID (escalar base64url)
VAPID_SUBJECTmailto:admin@localhostContacto en autorizaciones Web Push firmadas

Turnstile solo se activa con ambas claves.

ENABLE_SIGNUP=false sigue permitiendo el primer administrador de una base vacía y bloquea las cuentas posteriores. Protege una ruta de arranque remota con una frontera de identidad externa antes del primer inicio.

Cada JWT está ligado a una sesión del servidor (afirmación sid), por lo que cerrar o revocar desde Ajustes → Sesiones invalida el token en todas las réplicas y cierra WebSockets. La retención de auditoría es configurable:

VariablePredeterminadoFinalidad
AUDIT_RETENTION_DAYS180Días de retención del registro de seguridad

Inicio de sesión único OIDC genérico

Puede usarse cualquier proveedor OpenID Connect con documento de descubrimiento. El flujo utiliza PKCE (S256), estado CSRF y un nonce verificado dentro del token ID con firma comprobada. Las identidades se vinculan mediante la afirmación estable sub.

VariablePredeterminadoFinalidad
OIDC_ISSUER_URLsin definirURL del emisor; descubrimiento en <issuer>/.well-known/openid-configuration
OIDC_CLIENT_IDsin definirID de cliente OAuth registrado
OIDC_CLIENT_SECRETsin definirSecreto de cliente OAuth
OIDC_DISPLAY_NAMESingle Sign-OnEtiqueta del botón de inicio
OIDC_SCOPESopenid profile emailÁmbitos solicitados
OIDC_CALLBACK_URLBASE_URL + ruta de devolución OIDCURI de redirección registrado
OIDC_ALLOWED_EMAIL_DOMAINSsin definirLista por comas; exige correo verificado en uno de los dominios
OIDC_GROUP_CLAIMgroupsAfirmación del token que contiene grupos
OIDC_ADMIN_GROUPSsin definirLista por comas; el rol admin sigue la pertenencia en cada inicio
OIDC_SYNC_GROUPSfalsetrue reconcilia grupos de Libre con la afirmación en cada inicio

OIDC solo se activa si están presentes la URL del emisor, el ID y el secreto. Un correo ya usado por una cuenta local no vinculada se rechaza en vez de combinarse, y la creación sigue respetando ENABLE_SIGNUP.

La admisión WebSocket de Chat se puede ajustar sin debilitar la autenticación:

VariablePredeterminadoFinalidad
CHAT_WS_MAX_PAYLOAD_BYTES10 MiBTamaño máximo aceptado de mensaje WebSocket
CHAT_WS_MAX_MESSAGES_PER_MINUTE120Tope de mensajes por conexión
CHAT_WS_MAX_ACTIVE_GENERATIONS_PER_USER4Generaciones de proveedor permitidas por cuenta
CHAT_WS_MAX_CONNECTIONS_PER_USER5Sockets autenticados simultáneos por cuenta
WEBSOCKET_TICKET_TTL_MS30000Vida del ticket Chat/Work de un uso, máximo 60 segundos

El navegador canjea Authorization por un ticket opaco y solo pone ese valor breve en la URL de WebSocket. Los tickets son de un uso, ligados al protocolo y sesión y guardados como hashes, evitando tokens duraderos en registros del proxy. Con CORS_ORIGIN o BASE_URL, el Origin debe coincidir. Define al menos uno para acceso remoto; sin ambos el filtro es permisivo por compatibilidad local. Las actualizaciones sin origen se admiten para Electron y otros clientes, pero exigen ticket y las mismas comprobaciones de cuenta, Work y tarea. Trata el ticket como frontera y limita el acceso con TLS, cortafuegos y proxy.

OAuth

VariableFinalidad
GITHUB_CLIENT_IDID de cliente OAuth de GitHub
GITHUB_CLIENT_SECRETSecreto OAuth de GitHub
GITHUB_CALLBACK_URLAnulación de devolución de GitHub
HUGGINGFACE_CLIENT_IDID de cliente OAuth de Hugging Face
HUGGINGFACE_CLIENT_SECRETSecreto OAuth de Hugging Face
HUGGINGFACE_CALLBACK_URLAnulación de devolución de Hugging Face

Sin URL de devolución, Libre WebUI las construye desde BASE_URL.

Ollama

VariablePredeterminadoFinalidad
OLLAMA_BASE_URLhttp://localhost:11434URL base de la API Ollama
OLLAMA_TIMEOUT300000Espera de solicitud normal (1,000-3,600,000 ms)
OLLAMA_LONG_OPERATION_TIMEOUT900000Espera larga (1,000-3,600,000 ms y no menor que OLLAMA_TIMEOUT)
OLLAMA_MAX_CONTEXT32768Contexto máximo adoptado automáticamente (128-2,097,152 tokens)

Búsqueda web

VariablePredeterminadoFinalidad
SEARXNG_URLsin definirEndpoint SearXNG predeterminado; un administrador aún debe activarlo en Ajustes > Búsqueda

Libre Claw

VariablePredeterminadoFinalidad
LIBRE_CLAW_BASE_URLhttp://127.0.0.1:8766URL opcional del daemon Libre Claw
LIBRE_CLAW_TIMEOUT_MS30000Espera HTTP de Libre Claw

Entorno de Work

Estas variables configuran Work en el equipo o clúster que ejecuta el backend. Docker es predeterminado; Helm elige Kubernetes con work.enabled=true.

VariablePredeterminadoFinalidad
WORK_RUNTIME_IMAGEnode:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3Imagen fijada para entornos de Work
WORK_DOCKER_COMMANDdockerCLI Docker disponible al proceso
WORK_COMMAND_TIMEOUT_MS120000Espera predeterminada; una herramienta puede pedir 600000 ms
WORK_MAX_OUTPUT_CHARS50000Límite de stdout/stderr capturado por flujo
WORK_MAX_AGENT_ROUNDS48Presupuesto de rondas modelo/herramienta por ejecución
WORK_STATUS_BLURB_MODEL1Define 0 para omitir la solicitud al modelo que escribe el estado del agente en la barra lateral tras una ejecución
WORK_MEMORY_LIMIT2gMemoria por contenedor
WORK_CPU_LIMIT2CPU por contenedor
WORK_PIDS_LIMIT256Procesos por contenedor
WORK_PREVIEW_PORT4173Puerto que usa la vista previa dentro del contenedor
WORK_PREVIEW_BIND127.0.0.1Interfaz del host donde se publica la vista; los despliegues con Compose en Docker Engine nativo deben usar una interfaz de puente no pública y alcanzable
WORK_DOCKER_PUBLISHED_HOSTvalor predeterminado de la app: igual que WORK_PREVIEW_BIND; valor predeterminado de Compose: host.docker.internalHost/IP visto por el backend para puertos publicados
WORK_COMPUTER_SCREEN_PORT6080Puerto del puente de pantalla Work Computer (websockify) en entornos gráficos
WORK_COMPUTER_AUDIO_PORT6081Puerto del puente de audio (websockify → PulseAudio monitor)
WORK_MAX_ACTIVE_RUNTIMES_GLOBAL3Tareas simultáneas con entorno en la instancia
WORK_MAX_ACTIVE_RUNTIMES_PER_USER2Tareas simultáneas con entorno por usuario
WORK_MAX_TASKS_GLOBAL500Máximo de tareas persistentes en la instancia
WORK_MAX_TASKS_PER_USER100Máximo por administrador
WORK_NETWORK_NAMElibre-webui-workRed puente administrada para tareas con red
WORK_RUN_LEASE_WAIT_MS60000Espera del arrendamiento compartido antes de informar conflicto de réplica (team)
WORK_RUNTIME_DNSsin definirIP de resolutores forzadas, separadas por comas
WORK_DOCKER_SOCKETDOCKER_HOST si unix:// o tcp://, si no /var/run/docker.sockEndpoint de Docker Engine para terminales y diagnóstico
WORK_TERMINAL_MAX_SESSIONS_PER_TASK2Terminales de navegador simultáneos por tarea
WORK_TERMINAL_IDLE_TIMEOUT_MS900000Espera de inactividad antes de cerrar
WORK_RUNTIME_IDLE_TIMEOUT_MS0 (deshabilitado)Detener un entorno tras esta inactividad, incluidas vistas
WORK_HOST_WORKSPACES_ENABLEDfalsePermitir carpeta del host en vez de volumen
WORK_HOST_WORKSPACE_ROOTSdirectorio personal del usuario del servidorRaíces separadas por : en las que debe estar el espacio
WORK_RUNTIME_BACKENDdockerBackend: docker o kubernetes
WORK_K8S_NAMESPACElibre-webui-workNamespace de Pods y PVC de entornos
WORK_K8S_STORAGE_CLASSpredeterminado del clústerStorageClass de PVC
WORK_K8S_WORKSPACE_SIZE5GiTamaño de PVC por tarea (cuota real)
WORK_K8S_POD_READY_TIMEOUT_MS900000Espera hasta Running, incluidas descargas
WORK_K8S_POD_GONE_TIMEOUT_MS60000Espera hasta que desaparezca un Pod eliminado
AGENT_CLI_MODELS_ENABLEDsin definir (interruptor, desactivado)Fijar Agents; sin valor queda al interruptor, desactivado por defecto
TOOLS_ACCESS_MODEsin definir (interruptor, solo administradores)Fijar herramientas a admins o all-users y bloquear el interruptor
STT_ACCESS_MODEsin definir (interruptor, todos)Fijar voz a texto a admins o all-users
TTS_ACCESS_MODEsin definir (interruptor, todos)Fijar texto a voz a admins o all-users
VOICE_MODE_ACCESS_MODEsin definir (interruptor, todos)Fijar el modo manos libres a admins o all-users
VOICE_CLONING_ACCESS_MODEsin definir (interruptor, todos)Fijar clonación a admins o all-users
TOOLS_PRIVATE_NETWORK_ALLOWLISTsin definirNombres exactos que herramientas y webhooks pueden resolver a direcciones privadas; separados por comas y fijados
AGENT_CLI_TIMEOUT_MS600000Tiempo de ejecución de un CLI antes de terminarlo
CODEX_OAUTH_MODELS_ENABLEDtrueOfrecer el proveedor Codex (ChatGPT) a administradores
CODEX_HOME~/.codexUbicación de credenciales del CLI Codex (auth.json)

Los binarios CLI y credenciales OAuth Codex son locales al nodo. Solo se admiten en solo, donde descubrimiento y ejecución ven el mismo entorno. Team ejecuta chats duraderos en un trabajador y exige AGENT_CLI_MODELS_ENABLED=false y CODEX_OAUTH_MODELS_ENABLED=false; el inicio rechaza otros valores en vez de anunciar un proveedor de una sola réplica. Usa Ollama o un plugin con credenciales compartidas.

En Docker, una carpeta del host se monta en /workspace y la tarea lee y escribe directamente. Kubernetes la rechaza. Es una reducción deliberada del aislamiento: mantén WORK_HOST_WORKSPACES_ENABLED apagado y WORK_HOST_WORKSPACE_ROOTS estrecho. Se resuelven enlaces antes de comprobar raíces y se rechazan .ssh, .gnupg, .aws y .config.

Los modelos CLI exponen agentes instalados (claude, codex) como modelos de chat para usar suscripciones sin clave. Solo los ven administradores; el CLI se ejecuta como usuario del servidor y hereda sus credenciales. Equivale a dar acceso de shell a esos agentes.

Las tareas Docker con red se conectan a WORK_NETWORK_NAME, con comunicación entre contenedores desactivada. WORK_RUNTIME_DNS es el punto de política: usa un resolutor filtrante; se rechazan valores no IPv4/IPv6. DNS no limita salida por IP directa; añade cortafuegos. Kubernetes usa NetworkPolicies y work.networkPolicy.blockedEgressCidrs.

El terminal y diagnóstico hablan con Docker Engine. Siguen WORK_DOCKER_SOCKET, luego DOCKER_HOST —socket unix:// o endpoint tcp:// HTTP como un proxy (consulta docker-compose.socket-proxy.yml)— y finalmente /var/run/docker.sock. Un valor no compatible (ssh:// o tcp:// con DOCKER_TLS_VERIFY) marca terminal y diagnóstico no disponibles; Work sigue por el CLI. Kubernetes usa exec y no Docker.

Work lee valores al iniciar. El puerto de vista es interno; Libre WebUI lo publica en un puerto de bucle invertido dinámico.

Fija la imagen a una versión o resumen revisado. Aumentar concurrencia o recursos amplía lo que consumen ejecuciones autónomas. WORK_MAX_AGENT_ROUNDS se aplica igual a Ollama y plugins. El presupuesto de herramientas es max(128, WORK_MAX_AGENT_ROUNDS × 8). Al agotarlo, Work pide una entrega final sin herramientas y termina en needs_input, no con error bruto ni falso éxito. Un seguimiento continúa en el mismo espacio. La salida persistente tiene un límite aparte de unas 20,000 fuentes más marcador.

Estas variables ajustan un entorno ya accesible. Compose de instancia única lo activa montando el socket. Dos variables controlan el cableado:

VariablePredeterminadoFinalidad
DOCKER_GID0Grupo del socket añadido al usuario contenedor
DOCKER_SOCKET/var/run/docker.sockRuta del socket del host que montar

DOCKER_GID debe ser el grupo visto dentro de un contenedor; macOS informa otro. Compose team no monta socket y mantiene Work no disponible hasta añadir docker-compose.team.work.yml. Esa capa proporciona el mismo proxy filtrado a aplicación y trabajador, nunca socket ni grupo. El proxy limita secciones, pero crear contenedores sigue siendo una credencial de control del host; usa un daemon dedicado o sin root para un límite más fuerte. Helm nunca monta socket; activa Pod/PVC con work.enabled=true.

solo debe tener cero o una réplica porque usa SQLite, archivos y coordinación local. Helm acepta cero para suspender y rechaza más o autoescalado. team completo admite varias réplicas y trabajador gracias a PostgreSQL, S3, PGVector y Redis. Los Pods de Work escalan aparte y el trabajador recibe imagen, StorageClass y límites work.env iguales.

Compose también acepta WEBUI_BIND_ADDRESS (predeterminado 127.0.0.1) y WEBUI_PORT (8080). Mantén el bucle salvo que una LAN fiable o proxy de host deba llegar al puerto.

Descubrimiento de modelos

El catálogo se redescubre cuando falta o caduca para reflejar modelos actuales:

VariablePredeterminadoFinalidad
PLUGIN_MODEL_DISCOVERY_TTL_MS21600000 (6 h)Edad para actualizar al leer la lista
PLUGIN_MODEL_DISCOVERY_RETRY_MS600000 (10 min)Intervalo mínimo entre intentos
PLUGIN_MODEL_DISCOVERY_REFRESH_DEADLINE_MS3000Tiempo que espera una respuesta por actualizaciones

Una actualización que supera el plazo termina y se sirve después. Actualizar modelos siempre contacta al proveedor.

Claves de plugins de proveedores

Las claves de entorno pueden ser valores de despliegue:

VariableProveedor
OPENAI_API_KEYOpenAI y OpenAI TTS
ANTHROPIC_API_KEYAnthropic
GROQ_API_KEYGroq
GEMINI_API_KEYGoogle Gemini
MISTRAL_API_KEYMistral
OPENROUTER_API_KEYOpenRouter
KIMI_API_KEYKimi Code de Moonshot AI
GITHUB_API_KEYGitHub Models
HUGGINGFACE_API_KEYAPI de Hugging Face configuradas
ELEVENLABS_API_KEYElevenLabs TTS
COMFYUI_API_KEYDespliegues ComfyUI que exigen clave

Los usuarios también pueden guardar credenciales. Las claves de entorno solo se usan con el enrutamiento de una definición incluida no sombreada. Las importadas, escribibles que reutilizan ID o rutas personalizadas exigen credencial de la cuenta; Libre no adjunta la de entorno ni la expone. La confianza procede del hash compilado del manifiesto, por lo que rutas compartidas siguen siendo compatibles sin confiar en un archivo modificado.

Las claves guardadas se vinculan a definición, fuente, autenticación y enrutamiento. Hay que guardarlas de nuevo tras cambiar el destino. Las antiguas no vinculadas solo se aceptan para una definición incluida exacta y se vinculan al primer uso.

En inicios desde fuente, PLUGINS_DIR relativo se resuelve desde el backend; el lanzador empaquetado convierte un valor explícito desde el invocador. Libre también lee backend/plugins y ubicaciones históricas. Mueve definiciones a $DATA_DIR/plugins; recuperación las marca como estado externo y bloquea una instantánea solo de volúmenes mientras existan. Directorios y JSON deben ser entradas físicas; no se siguen enlaces simbólicos.

Frontend

VariablePredeterminadoFinalidad
VITE_API_BASE_URLproxy de desarrollo del mismo origen o API de producciónURL base de la API
VITE_WS_BASE_URLinferido de la APIBase absoluta ws:/wss: para Chat y Work
VITE_APP_VERSIONversión inyectada por ViteVersión mostrada
VITE_DEMO_MODEfalseActiva simulaciones con true
VITE_API_TIMEOUT300000Espera de API en milisegundos
VITE_BACKEND_URLhttp://localhost:3001Usada por auxiliares de autenticación
VITE_DEBUG_VERBOSEsin definirActiva registros detallados en desarrollo
VITE_LOG_LEVELsin definirAnula el nivel de registro
ELECTRON_BUILDsin definirActiva comportamiento de Electron con true

VITE_WS_BASE_URL anula todos los valores de WebSocket para Chat y terminal Work. Puede incluir prefijo de proxy, pero debe ser URL absoluta ws: o wss: sin credenciales, consulta ni fragmento. Sin valor, clientes Electron file: usan ws://localhost:3001; los navegadores derivan de VITE_API_BASE_URL y luego del origen del navegador. Vite reenvía el origen de desarrollo al backend en el puerto 3001.

Scripts de mantenimiento

VariableFinalidad
CHANGELOG_AIDefine 0 para desactivar borradores asistidos
CHANGELOG_AI_MODELModelo Ollama para versiones/registros
CHANGELOG_AI_TIMEOUT_MSEspera de generación en milisegundos

Ejemplo:

CHANGELOG_AI_MODEL=glm-5.2:cloud npm run changelog
CHANGELOG_AI=0 npm run release:minor

Ejemplo de producción

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

Documentación relacionada