Referencia de configuración

Por: Artiko
nodconfiguracionvariables-de-entornodockerself-hostedopentelemetry

Referencia de configuración

Objetivos

  • Saber qué archivo .env lee cada tipo de instalación y qué tiene precedencia.
  • Aplicar cambios de configuración sin perder datos.
  • Tener a mano todas las variables y sus valores por defecto.
  • Desactivar la analítica, el feedback y las trazas cuando haga falta.

Este capítulo aplica a instalaciones desde código y a servidores propios. La app de escritorio no lee .env: cuando se conecta a un servidor usa la configuración de ese servidor, y su dirección y su token son ajustes del cliente.


Cómo funcionan los ajustes

flowchart TD
    Shell["Variables de la shell<br/>solo instalación directa"] -- "ganan sobre" --> EnvRepo[".env del repositorio"]
    EnvRepo --> Srv["Servidor de Nod<br/>lee al arrancar"]
    Shell --> Srv
    EnvStack[".env del stack<br/>deployment/self-host/"] --> Srv
    App["Ajustes hechos en la app<br/>modelos, apps, canales"] --> DB[("Base de datos<br/>cifrados")]
    DB --> Srv
InstalaciónArchivoDetalles
Desde código.env en la carpeta del repositorioGit lo ignora. pnpm start lo crea desde .env.example. Una variable de la shell gana sobre la misma variable del archivo
Stack de servidor.env en deployment/self-host/Compose lo pasa con env_file, así que no hace falta editar compose.yaml. No reenvía variables arbitrarias de la shell del host

La mayoría de las cosas no necesitan variable: modelos, apps y canales se conectan en la app y Nod los guarda cifrados en la base de datos.

En el stack de servidor, NOD_AUTH_TOKEN, NOD_VAULT_KEY y NOD_POSTGRES_PASSWORD deben quedarse en .env.

Aplicar cambios

Nod lee los ajustes al arrancar. Tras editar .env:

docker compose up -d --wait

Con el proxy HTTPS incluido:

docker compose --profile https up -d --wait

Compose recrea los contenedores cuya configuración cambió y conserva los volúmenes de datos. En una instalación directa, detén y vuelve a iniciar el proceso de Nod.

docker compose restart no aplica cambios. Ese comando conserva los valores de entorno antiguos.


Servidor y datos

VariableQué hacePor defecto
PORTPuerto local de la app y de la API4310
NOD_HOSTDirección en la que escucha el servidor. Una dirección que no sea loopback exige NOD_AUTH_TOKEN127.0.0.1
NOD_AUTH_TOKENToken de acceso para clientes web y de escritorio: al menos 43 letras, dígitos, _ o -. Obligatorio para escuchar fuera de loopback o con una URL públicaSin definir; las instalaciones locales generan una clave de acceso privada
NOD_DATA_ROOTCarpeta de datos locales: sesiones, archivos del workspace y la clave de acceso.local
NOD_POSTGRES_PASSWORDContraseña del contenedor local de PostgreSQL. Un valor propio necesita al menos 43 caracteresGenerada
DATABASE_URLConexión a PostgreSQL. pnpm start la rellena para el contenedor local en 127.0.0.1:54329Contenedor local
DATABASE_POOL_MAXMáximo de conexiones a la base de datos12
NOD_PUBLIC_URLOrigen exacto desde el que abres Nod. Sin ruta, query, fragmento ni credencialeshttp://localhost:<PORT>
NOD_PRIVACY_NOTICE_FILEAviso de privacidad en Markdown que se sirve en /privacySin aviso

Para generar un token a mano:

openssl rand -hex 32

Ejemplo de un servidor remoto:

NOD_PUBLIC_URL=https://nod.example.com
NOD_AUTH_TOKEN=<your-generated-token>

Cambiar NOD_AUTH_TOKEN y aplicar la configuración revoca el token anterior; hay que reconectar los clientes. En una configuración local, omite NOD_AUTH_TOKEN y NOD_PUBLIC_URL si no los usas: un valor vacío explícito no es válido.


Modelos

VariableQué hacePor defecto
LLM_PROVIDERProveedor de la primera elección de modelo. Un modelo elegido en la app tiene prioridadopenai
LLM_MODELPrimera elección de modeloEl del proveedor
OPENAI_API_KEYAñade una conexión OpenAI. También activa la transcripción de voz y las respuestas por vozVacío
ANTHROPIC_API_KEYAñade una conexión AnthropicVacío
ANTHROPIC_WORKSPACE_IDWorkspace para la clave de Anthropic. Solo con claves de organización no limitadas a un workspaceVacío
OPENROUTER_API_KEYAñade una conexión OpenRouter, con voces de ElevenLabs y KokoroVacío
ELEVENLABS_API_KEYAñade una conexión ElevenLabs para voz y transcripción, sin modelo de chatVacío
OPENAI_COMPATIBLE_BASE_URLAñade un servidor compatible con OpenAI, por ejemplo Ollama en http://localhost:11434/v1Vacío
OPENAI_COMPATIBLE_API_KEYClave de ese servidor, si la necesitaVacío
TYPESAFE_API_KEYUsa Jev directo para las comprobaciones de correo de acceso a cuentas y para el modo decisionVacío
NOD_TRUST_MODELVerificador de acciones: selected, llm o decisionselected
TTS_MODELModelo de voz de OpenAI para las respuestas habladasgpt-4o-mini-tts
STT_MODELModelo para transcribir mensajes de voz entrantesgpt-transcribe (openai/gpt-transcribe en OpenRouter)
TTS_VOICEVoz de las respuestas habladascoral

Las claves definidas aquí son conexiones gestionadas por el servidor: se mantienen en memoria y no se copian a la base de datos. Se pueden configurar varios proveedores a la vez; LLM_PROVIDER solo fija la selección inicial.

Variables de clave por proveedor

LLM_PROVIDERVariable de clave
openaiOPENAI_API_KEY
anthropicANTHROPIC_API_KEY
googleGEMINI_API_KEY
openrouterOPENROUTER_API_KEY
amazon-bedrockAWS_BEARER_TOKEN_BEDROCK (más AWS_REGION)
google-vertexGOOGLE_CLOUD_API_KEY
azureAZURE_OPENAI_API_KEY (más AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_MODEL, AZURE_OPENAI_DEPLOYMENT)
cloudflare-workers-aiCLOUDFLARE_WORKERS_AI_API_KEY (más CLOUDFLARE_ACCOUNT_ID)
cloudflare-ai-gatewayCLOUDFLARE_AI_GATEWAY_API_KEY (más CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_GATEWAY_ID)
compatibleOPENAI_COMPATIBLE_API_KEY (más OPENAI_COMPATIBLE_BASE_URL)
deepseekDEEPSEEK_API_KEY
groqGROQ_API_KEY
mistralMISTRAL_API_KEY
togetherTOGETHER_API_KEY
fireworksFIREWORKS_API_KEY
cerebrasCEREBRAS_API_KEY
xaiXAI_API_KEY
huggingfaceHF_TOKEN
nvidiaNVIDIA_API_KEY
vercel-ai-gatewayAI_GATEWAY_API_KEY

La documentación de modelos lista además ant-ling, baseten, kimi-coding, meta, minimax, moonshotai, opencode, opencode-go, qwen-token-plan, radius, xiaomi y zai, con sus variantes regionales. Cada variante regional tiene su propia variable, para que la clave de una región no se use en otra.


Apps y Composio

VariableQué hacePor defecto
NOD_COMPOSIO_PROXY_URLServicio de conexión de confianza para instalaciones desde código o servidorhttps://composio.n8n.cloud

Debe ser un origen HTTPS sin ruta, query, fragmento ni credenciales. HTTP solo se admite para localhost, 127.0.0.1 o [::1] en desarrollo local. Notion, Linear y n8n no pasan por este servicio: se conectan mediante sus propios servidores MCP.


Vault

VariableQué hacePor defecto
NOD_VAULT_KEYClave de 32 bytes en base64 que cifra las credenciales guardadasSin definir en instalaciones desde código; el stack de servidor la genera en .env
openssl rand -base64 32

Sin la variable, una instalación desde código usa el llavero en macOS y el archivo NOD_DATA_ROOT/vault/master-key en Linux. Otras plataformas exigen NOD_VAULT_KEY.

Respalda la clave de Vault. Sin ella no se pueden leer las credenciales guardadas, y una copia de la base de datos sola no las recupera. Nod nunca genera una clave nueva si ya existen datos cifrados.


Canales

Deja vacías o sin definir todas las variables de un canal para gestionarlo desde Channels en la app. Definir cualquier variable no vacía de un canal lo convierte en gestionado por el servidor: la configuración del entorno tiene prioridad y la app no permite editarla ni quitarla.

VariableQué hacePor defecto
TELEGRAM_ENABLEDtrue activa Telegram y false lo desactivaSin definir
TELEGRAM_MODEpolling recibe mensajes con peticiones salientes. webhook necesita una dirección HTTPS públicapolling
TELEGRAM_BOT_TOKENToken del bot de BotFatherVacío
TELEGRAM_WEBHOOK_SECRET_TOKENSecreto que Telegram envía en cada llamada: de 16 a 256 letras, dígitos, _ o -. Obligatorio en modo webhookGenerado en memoria para polling
TELEGRAM_ALLOWED_USER_IDÚnico ID de usuario de Telegram al que Nod respondeVacío
WHATSAPP_ENABLEDtrue activa WhatsApp y false lo desactivaSin definir
WHATSAPP_MODEbot vincula un número separado, self-chat vincula tu número y cloud usa Meta Cloud APIcloud
WHATSAPP_POLICY_CONFIRMEDtrue confirma que tu uso está permitido por los términos de WhatsApp. Obligatoriofalse
WHATSAPP_ACCESS_TOKENToken de acceso de WhatsApp Cloud APIVacío
WHATSAPP_APP_SECRETSecreto de la app de Meta, usado para verificar las firmas del webhookVacío
WHATSAPP_PHONE_NUMBER_IDID del número emisor de la cuenta businessVacío
WHATSAPP_VERIFY_TOKENToken que Meta envía al verificar el webhookVacío
WHATSAPP_ALLOWED_NUMBERTu número personal con código de país, de 7 a 15 dígitos. Obligatorio para bot y Cloud APIVacío

La configuración mínima de Telegram por entorno es:

TELEGRAM_BOT_TOKEN=<token-de-botfather>
TELEGRAM_ALLOWED_USER_ID=<tu-id-de-usuario>

El capítulo 13 cubre el registro del webhook de Telegram y los modos de WhatsApp.


Analítica y feedback

VariableQué hacePor defecto
NOD_ANALYTICS_ENABLEDfalse desactiva los datos de uso para todosActivo con pnpm start, inactivo con pnpm run dev
NOD_ANALYTICS_ENVIRONMENTEtiqueta de los eventos: production o developmentSegún NODE_ENV
NOD_APP_VERSIONVersión o revisión que acompaña a los eventos y a los informes de feedbackLa de la app o del repositorio
NOD_FEEDBACK_ENABLEDfalse desactiva los envíos de feedbackActivo
NOD_FEEDBACK_URLDirección HTTPS que recibe los informes de Send feedback. Vacío desactiva el envíoEl equipo de Nod en n8n
NOD_FEEDBACK_RECEIPT_URL_PREFIXObligatoria con un colector propio. URL HTTPS que termina en /Issues del colector por defecto
NOD_FEEDBACK_TOKENAutenticación enviada como x-nod-feedback-tokenVacío
NOD_TRACES_URLDirección HTTPS que recibe las trazas de conversación de quienes las activan. Vacío las desactiva para todosEl equipo de Nod en n8n
NOD_TRACES_TOKENToken enviado con cada traza. Sin él, Nod no envía trazas y oculta el interruptorVacío
NOD_ONBOARDING_EMAIL_URLDirección HTTPS que acepta los correos de alta en novedades. Vacío desactiva ese registroUn webhook de n8n

Para desactivar la analítica, el registro de contacto y el feedback:

NOD_ANALYTICS_ENABLED=false
NOD_ONBOARDING_EMAIL_URL=
NOD_FEEDBACK_ENABLED=false

Estos ajustes no desactivan el tráfico de modelos, de apps ni de actualizaciones. Según la documentación, la analítica va a un proyecto de PostHog en la UE, sin opción de cambiar el destino en tiempo de ejecución.


OpenTelemetry

VariableQué hacePor defecto
OTEL_EXPORTER_OTLP_ENDPOINTURL base HTTP o HTTPS de tu colector OTLP. Nod añade /v1/tracesVacío; exportación desactivada
OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4318

Qué se exporta:

  • Un span por cada registro de uso de modelo, incluido el trabajo auxiliar y de segundo plano.
  • Cada span contiene proveedor y modelo, categoría, operación y estado, inicio y fin, tokens de entrada, salida y caché, y costos estimados.
  • No contiene prompts, respuestas, argumentos ni resultados de herramientas, claves ni errores crudos.
  • Usa OTLP sobre HTTP con JSON. Envía lotes cada 5 segundos y al apagar. La cola admite 256 spans como máximo; lo que sobra o falla se descarta sin reintentar.
  • Esta versión exporta solo spans de modelos: no métricas, logs, pasos de navegador ni spans de herramientas. No admite OTLP sobre gRPC ni envía cabeceras de autenticación.

La exportación es independiente de Share usage data y Share conversation traces.


Ordenadores

VariableQué hacePor defecto
WORKSPACE_CONTAINERContenedor Docker del workspacenod-workspace
BROWSER_CONTAINERContenedor Docker del navegadornod-browser

El stack de servidor los define como nod-workspace-<project> y nod-browser-<project>, con COMPOSE_PROJECT_NAME como <project>.


Ajustes del stack de Docker

Van en deployment/self-host/.env y controlan Compose.

VariableQué hacePor defecto
COMPOSE_PROJECT_NAMENombra los contenedores y volúmenes de la instalación. Cambiarlo selecciona otros datosGenerado una vez por setup.sh
NOD_BIND_ADDRESSInterfaz del host para el puerto del backend127.0.0.1
NOD_IMAGE_TAGEtiqueta de las imágenes construidas desde tu códigolocal
NOD_SERVER_MEMORYLímite de memoria del contenedor del servidor2g
NOD_BROWSER_MEMORYLímite de memoria del contenedor del navegador3g
NOD_WORKSPACE_MEMORYLímite de memoria del contenedor del workspace2g

Compose fija NOD_HOST, NOD_DATA_ROOT, WORKSPACE_CONTAINER, BROWSER_CONTAINER, NODE_ENV y NOD_ENVIRONMENT para su disposición interna; esos valores sobrescriben el .env del stack.

DATABASE_URL solo se define para usar un PostgreSQL externo. En ese caso, los comandos de respaldo y restauración incluidos no aplican, porque solo soportan la base de datos incluida.


Instalaciones avanzadas desde código

VariableQué hacePor defecto
NOD_WEB_ROOTDirectorio de la app web compiladadist/web
NODE_ENVproduction para un servidor persistenteLo fija el comando de arranque
NOD_ENVIRONMENTEtiqueta del entorno de ejecucióndevelopment

Las variables que empiezan por NOD_DESKTOP_ y NOD_TEST_ son internas del runtime y de las pruebas, y no se usan para configurar un servidor.


Voz local

En Settings → Voice & audio, elige Free voices y luego Set up → Download voices. Nod descarga modelos de Whisper y Kokoro en su carpeta de datos y los ejecuta en un proceso aparte. El audio se procesa en memoria. Las voces locales cubren inglés, español, francés, hindi, italiano y portugués de Brasil. Si te conectas a un servidor remoto, la inferencia corre en ese servidor.


Actividad

  1. Abre el .env de tu instalación e identifica qué variables están definidas.
  2. Cambia PORT a otro valor, aplica el cambio con docker compose up -d --wait y abre Nod en el puerto nuevo.
  3. Define NOD_ANALYTICS_ENABLED=false y aplica la configuración.
  4. Si tienes un colector OTLP, define OTEL_EXPORTER_OTLP_ENDPOINT y observa los spans de una petición.

Autoevaluación

1. ¿Lee la app de escritorio el archivo .env?

No. Cuando se conecta a un servidor usa la configuración del servidor.

2. ¿Por qué docker compose restart no aplica un cambio de .env?

Porque conserva los valores de entorno antiguos. Hay que usar docker compose up -d --wait, que recrea los contenedores afectados.

3. ¿Qué pasa al definir una sola variable no vacía de un canal?

El canal pasa a estar gestionado por el servidor: la configuración del entorno tiene prioridad y la app no permite editarlo ni quitarlo.

4. ¿Qué contienen los spans que exporta Nod por OpenTelemetry?

Datos de uso de modelos: proveedor, modelo, operación, tiempos, tokens y costos estimados. No contienen prompts, respuestas, argumentos de herramientas ni claves.

5. ¿Qué efecto tiene cambiar COMPOSE_PROJECT_NAME?

Selecciona otros contenedores y volúmenes, es decir, otros datos. No se cambia durante una actualización.


Lista de control

  • Sé qué .env usa mi instalación.
  • Aplico los cambios con docker compose up -d --wait o reiniciando el proceso.
  • Tengo respaldada la clave de Vault.
  • Decidí el valor de las variables de analítica, feedback y trazas.
  • Sé que una variable de canal no vacía bloquea la edición desde la app.

Anterior: Conectar un modelo · Siguiente: Apps, MCP, APIs, CLI y n8n