Intermedio 11 minn8n

n8n con Docker: instalar y autoalojar gratuitamente

n8n con Docker es la forma más rápida de obtener una instancia de automatización autoalojada que sobreviva a los reinicios y las actualizaciones. Esta guía se detiene deliberadamente en los cimientos: un archivo Docker Compose, un volumen para los datos, una clave de cifrado bajo tu control, un procedimiento de copia de seguridad y actualización, y una exposición HTTPS prudente. Los nodos de IA y la conexión con Ollama se tratan en una guía aparte; aquí, el objetivo es una instalación limpia que no tengas que rehacer.

Por Samir K.·Actualización 2026-10-14·Probado en Windows, macOS y Linux

#Por qué instalar n8n con Docker en lugar de npm

n8n es una aplicación de Node.js. Se puede ejecutar con npm o npx, y la documentación lo propone para una prueba rápida. Para una instancia que funcione de forma continua, la imagen oficial de Docker es la opción recomendada por el proyecto: incluye la versión correcta de Node.js, aísla n8n del resto de la máquina y simplifica la actualización tanto como cambiar de imagen. También es el formato en el que la documentación de alojamiento de n8n presenta todos sus ejemplos de servidor.

La segunda ventaja es la reproducibilidad. Un archivo docker-compose.yml describe toda la configuración: imagen, puerto, variables de entorno y volumen de datos. Puede versionarlo, copiarlo a otra máquina o volver a leerlo dentro de seis meses para saber exactamente qué se está ejecutando. Con una instalación mediante npm, esta información está dispersa entre el sistema, el perfil de usuario y el gestor de servicios.

Qué cubre esta guía
Instalación local o en un servidor pequeño, persistencia de los datos, clave de cifrado, copia de seguridad, actualización y acceso HTTPS.
Lo que no cubre
Los nodos de IA de n8n, la conexión con Ollama, el servidor MCP y el escalado en modo de cola. Los dos primeros puntos tienen su propia guía, enlazada al final del artículo.
Lo que no afirmamos
No se especifica ninguna duración de instalación, ningún consumo medido ni ningún número de versión fijado. Estos valores cambian de una release a otra y deben consultarse en las fuentes oficiales en el momento de la instalación.

#Licencia y límites de la edición comunitaria

El kit Agentes Locales

Agentes que actúan en tu máquina: Cline agéntico, MCP, n8n + Ollama, automatizaciones locales.

  • Espacio en línea de por vida
  • PDF + archivos
  • Reembolsado 30 d

n8n no está bajo una licencia de código abierto en el sentido de la OSI. El código se publica bajo la Sustainable Use License, un modelo que el editor denomina «fair-code». En líneas generales, puede utilizar, modificar y alojar n8n libremente para sus necesidades internas, personales o empresariales. Lo que está restringido es la reventa: ofrecer n8n como servicio alojado a terceros o integrarlo en un producto comercial requiere un acuerdo con el editor. El texto completo y sus preguntas frecuentes están en docs.n8n.io/sustainable-use-license/; léalos si su uso va más allá de la automatización interna.

La versión que instala con Docker es la edición comunitaria. Contiene el editor completo, cientos de nodos de integración, webhooks, desencadenadores programados, nodos de IA y gestión de usuarios. Algunas funciones están reservadas para las ofertas de pago autoalojadas: el inicio de sesión único (SSO), los entornos con sincronización de Git, los secretos externos, el envío de registros a una herramienta externa y parte de las funciones de colaboración. Además, el editor ofrece una clave gratuita denominada «comunidad registrada», que se obtiene indicando una dirección de correo electrónico en los ajustes y desbloquea algunas funciones adicionales. La lista exacta evoluciona: prevalece la página docs.n8n.io/hosting/community-edition-features/.

i
Gratis, pero no de código abierto
Para un uso personal o interno, la distinción no cambia nada en la práctica. Importa si piensa revender un servicio construido sobre n8n o si su empresa exige una licencia aprobada por la OSI: en ese caso, debe leer la licencia antes de instalar, no después.

#Prerrequisitos

Docker y Docker Compose
Docker Engine con el complemento Compose en Linux, o Docker Desktop en Windows y macOS. Compruébelo con docker compose version: el comando debe responder con un número de versión, en dos palabras (docker compose), no con el guion de la herramienta antigua.
Una máquina que permanece encendida
n8n ejecuta sus flujos de trabajo a la hora prevista o cuando recibe un webhook. Un PC que se apaga por la noche no detectará las ejecuciones nocturnas. Un mini-PC, un NAS compatible con Docker o un VPS pequeño son adecuados; las necesidades de memoria siguen siendo modestas para unos pocos flujos de trabajo sencillos.
Un puerto libre
n8n escucha en el puerto 5678 dentro del contenedor. Lo publicamos con el mismo número en el host; cámbialo si ya lo utiliza otro servicio.
Solo para el paso de HTTPS
Un nombre de dominio que apunte a la máquina y los puertos 80 y 443 accesibles desde Internet. Sin eso, mantén el acceso local o utiliza una VPN: la sección HTTPS detalla ambas opciones.
Terminal
docker --version
docker compose version

#Instalar n8n con Docker Compose paso a paso

La documentación de n8n ofrece primero un comando docker run de una sola línea, útil para una prueba. Nosotros pasamos directamente a Compose: el archivo es apenas más largo y se convierte en la referencia de su instalación. Todos los valores siguientes son los documentados por n8n; solo los valores de zona horaria y de puerto son decisiones de esta guía.

  1. 01
    Crear la carpeta del proyecto
    Una carpeta dedicada contiene el archivo Compose, el archivo .env y, más adelante, sus copias de seguridad. Los propios datos de n8n irán en un volumen de Docker con nombre, no en esta carpeta.
  2. 02
    Generar la clave de cifrado
    Antes del primer inicio, genere una clave aleatoria y colóquela en el archivo .env. La sección siguiente explica por qué este orden es importante.
  3. 03
    Escribir el docker-compose.yml
    Copie el archivo siguiente. Publica n8n en el puerto 5678 de la máquina, limitado a la dirección local 127.0.0.1, y monta el volumen n8n_data en la carpeta /home/node/.n8n del contenedor, que es donde n8n almacena su base de datos SQLite, su configuración y sus archivos.
  4. 04
    Iniciar
    docker compose up -d télécharge l'image et lance le conteneur en arrière-plan. La première exécution prend le temps du téléchargement de l'image; les suivantes sont immédiates.
  5. 05
    Crear la cuenta propietaria
    Abra http://localhost:5678 en un navegador. n8n le pide crear la primera cuenta, que se convierte en propietaria de la instancia. Desde la versión 1.0, esta cuenta es la que protege el acceso; la antigua autenticación básica mediante variables de entorno ya no existe.
Terminal
mkdir -p ~/n8n && cd ~/n8n

# Clé de chiffrement : 64 caractères hexadécimaux
echo "N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)" > .env
chmod 600 .env
cat .env
docker-compose.yml
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - GENERIC_TIMEZONE=Europe/Paris
      - TZ=Europe/Paris
      - N8N_RUNNERS_ENABLED=true
      - N8N_DIAGNOSTICS_ENABLED=false
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=336
    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files

volumes:
  n8n_data:
Terminal
docker compose up -d
docker compose logs -f n8n   # Ctrl+C pour quitter les journaux

Algunas explicaciones sobre las variables. GENERIC_TIMEZONE establece la zona horaria utilizada por el nodo Schedule Trigger y por las expresiones de fecha; TZ sincroniza el reloj del sistema dentro del contenedor. N8N_RUNNERS_ENABLED activa los task runners, el mecanismo que ejecuta el código de los nodos Code en un proceso separado; la documentación lo recomienda y las versiones recientes muestran una advertencia si está ausente. N8N_DIAGNOSTICS_ENABLED=false desactiva el envío de datos de telemetría al editor. Las dos variables EXECUTIONS_DATA_* indican a n8n que elimine el historial de ejecuciones que supere 336 horas, es decir, catorce días, para evitar que la base de datos crezca indefinidamente.

El montaje ./local-files:/files es opcional. Proporciona a n8n una carpeta compartida con la máquina anfitriona, práctica para los nodos que leen o escriben archivos. Elimine la línea si no la necesita.

→
Acceso desde otra máquina de la red local
El archivo publica el puerto en 127.0.0.1: solo la máquina que aloja n8n puede acceder a él. Para abrirlo a su red local, sustituya por "5678:5678" y añada N8N_SECURE_COOKIE=false a las variables; de lo contrario, n8n rechaza la conexión HTTP desde una dirección distinta de localhost con un mensaje explícito sobre la cookie segura. Esta variable no debe permanecer nunca en una instancia expuesta a Internet: utilice la sección HTTPS.

#La clave de cifrado: la variable que no debes perder

n8n cifra todas las credenciales que guarda en la interfaz, es decir, los tokens de API, las contraseñas y las claves OAuth de sus integraciones. La clave de cifrado utilizada es N8N_ENCRYPTION_KEY. Si no la define, n8n genera una durante el primer inicio y la escribe en el archivo config de la carpeta /home/node/.n8n, es decir, en el volumen. Funciona, pero la clave vive entonces únicamente en ese volumen: si lo pierde o recrea la instancia sin él, todas las credenciales se vuelven ilegibles y deben volver a introducirse.

Por eso esta guía fija la clave en el archivo .env antes del primer inicio. Usted mantiene el control sobre ella, se guarda junto con el archivo Compose y permite restaurar la base de datos en otra máquina sin perder las credenciales. De ahí se derivan dos reglas.

No cambie nunca la clave después
Una clave distinta de la utilizada para cifrar vuelve inutilizables todos los identificadores existentes. Si necesita sustituirla, exporte primero sus identificadores descifrados con el comando export:credentials y vuelva a importarlos después del cambio.
Guarde el archivo .env por separado
Guarde una copia de la clave en su gestor de contraseñas. Una copia de seguridad del volumen sin la clave no sirve de nada para las credenciales, aunque los flujos de trabajo sigan siendo legibles.
!
Clave definida después de un primer inicio sin ella
Si ya has iniciado n8n sin N8N_ENCRYPTION_KEY, el contenedor contiene una clave generada automáticamente. Definir después un valor diferente en .env provoca un error durante el arranque o hace que las credenciales sean ilegibles. En ese caso, recupera la clave existente con docker exec n8n cat /home/node/.n8n/config y copia ese valor en .env, en lugar de generar una nueva.

#Persistencia y copia de seguridad de los datos

Todo lo que n8n debe conservar se encuentra en /home/node/.n8n: la base de datos SQLite que contiene los flujos de trabajo, las credenciales cifradas y el historial de ejecuciones, el archivo config, los nodos comunitarios instalados y los archivos binarios en el modo de almacenamiento en disco. El volumen con nombre n8n_data sobrevive a docker compose down y a la eliminación del contenedor. No sobrevive a docker compose down -v ni a docker volume rm: ambos comandos borran los datos.

Para una copia de seguridad, dos enfoques se complementan. El primero archiva el volumen completo: se detiene n8n mientras se copian los archivos, para evitar capturar una base de datos SQLite en proceso de escritura. El segundo utiliza la herramienta de línea de comandos de n8n para exportar los flujos de trabajo y las credenciales en JSON, legibles y reimportables individualmente.

Copia de seguridad del volumen completo
cd ~/n8n
mkdir -p backups
docker compose stop n8n
docker run --rm \
  -v n8n_data:/data:ro \
  -v "$PWD/backups":/backup \
  alpine tar czf "/backup/n8n_data-$(date +%F).tgz" -C /data .
docker compose start n8n
ls -lh backups/
Exportación JSON mediante la CLI de n8n
# Un fichier par workflow, puis un par identifiant, dans le volume
docker exec n8n n8n export:workflow --backup --output=/home/node/.n8n/exports/workflows/
docker exec n8n n8n export:credentials --backup --output=/home/node/.n8n/exports/credentials/

# Récupérer les exports sur la machine hôte
docker cp n8n:/home/node/.n8n/exports ./backups/exports-$(date +%F)

La opción --backup de los comandos de exportación agrupa las opciones que producen un archivo por elemento, en un formato legible. Los identificadores exportados permanecen cifrados con su clave, salvo que añada --decrypted; en ese caso, trate el archivo como un secreto. Para restaurar, los comandos import:workflow e import:credentials aceptan la misma carpeta con la opción --separate. La referencia completa de la CLI se encuentra en docs.n8n.io/hosting/cli-commands/.

Para una restauración completa en otra máquina: vuelve a crear la carpeta con el mismo docker-compose.yml y el mismo .env, crea el volumen vacío con docker compose up -d y luego docker compose stop, descomprime el archivo en el volumen con el comando inverso al de la copia de seguridad y reinicia. La misma clave de cifrado es imprescindible para recuperar las credenciales.

i
¿SQLite o PostgreSQL?
SQLite es la base de datos predeterminada y basta para una instancia personal o un equipo pequeño. La documentación de n8n recomienda PostgreSQL para producción, especialmente cuando se ejecutan varios workflows en paralelo o se prevé utilizar el modo de cola. El cambio se realiza mediante las variables DB_TYPE=postgresdb y DB_POSTGRESDB_*, añadiendo un servicio postgres al archivo Compose. La migración de SQLite a PostgreSQL se hace mediante la exportación y el import CLI descritos anteriormente.

#Actualizar n8n sin romper la instancia

n8n publica versiones con frecuencia. La etiqueta latest de la imagen apunta a la última versión estable y la etiqueta next a la versión de prueba; las etiquetas numeradas permiten fijar una versión concreta. Con Compose, la actualización se resume en tres comandos: obtener la nueva imagen, detener el contenedor antiguo y crear otro con la misma configuración. Los datos permanecen en el volumen y no se modifican. Las migraciones del esquema de la base de datos, cuando las hay, se realizan automáticamente al iniciar.

Terminal
cd ~/n8n

# 1. Sauvegarde avant toute mise à jour (voir section précédente)

# 2. Mise à jour
docker compose pull
docker compose down
docker compose up -d

# 3. Contrôle
docker compose logs --tail=50 n8n
docker exec n8n n8n --version

Tres precauciones evitan la mayoría de las sorpresas desagradables. Haga una copia de seguridad antes: una migración de base de datos no se puede deshacer. Lea las notas de versión en github.com/n8n-io/n8n/releases y la página de actualización de la documentación, docs.n8n.io/hosting/installation/updating/: las versiones principales eliminan variables de entorno o cambian comportamientos predeterminados, y la documentación mantiene una página específica sobre los cambios incompatibles. Por último, si la instancia es importante para usted, prefiera una etiqueta numerada a latest: elige cuándo actualizar en lugar de sufrirlo en el próximo pull.

docker-compose.yml (versión fijada, ejemplo de estructura)
services:
  n8n:
    # Remplacez par un numéro lu sur la page des releases
    image: docker.n8n.io/n8nio/n8n:1.XX.Y
→
Volver atrás
Si una versión da problemas, vuelve a poner la etiqueta anterior en el archivo Compose y ejecuta de nuevo docker compose up -d. Esto funciona mientras la nueva versión no haya migrado el esquema de la base de datos; de lo contrario, restaura la copia de seguridad realizada antes de la actualización. Esa es la razón del paso 1.

#Exponer n8n mediante HTTPS con prudencia

Mientras utilice n8n desde la máquina que lo aloja o desde su red local, la instalación anterior es suficiente. La necesidad de exponerlo aparece con los webhooks: un servicio de terceros que debe llamar a su instancia, o un acceso desde el exterior. Existen dos vías, y la primera suele ser la adecuada.

Una VPN en lugar de una exposición
Tailscale, WireGuard o la VPN de su router permiten acceder a n8n desde cualquier lugar sin abrir ningún puerto en Internet. Para uso personal sin un webhook público, es la solución más segura y sencilla. La instancia permanece en HTTP dentro de la red privada, y N8N_SECURE_COOKIE=false es necesario si accede a ella mediante la dirección VPN.
Un proxy inverso con certificado
Para recibir webhooks públicos, necesita un nombre de dominio, un proxy inverso que termine TLS y un certificado. El ejemplo oficial de n8n utiliza Traefik; nosotros mostramos Caddy, cuya configuración ocupa tres líneas y que obtiene por sí solo los certificados de Let's Encrypt.

En la configuración siguiente, n8n ya no publica ningún puerto: solo se puede acceder a Caddy, en los puertos 80 y 443, y este reenvía las solicitudes al contenedor de n8n a través de la red interna de Compose. Las variables N8N_HOST, N8N_PROTOCOL y WEBHOOK_URL indican a n8n la dirección pública desde la que se sirve; sin ellas, las URL de webhook que se muestran en el editor apuntarían a localhost y las redirecciones de OAuth fallarían.

docker-compose.yml (con Caddy)
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    environment:
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - N8N_HOST=n8n.votre-domaine.fr
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.votre-domaine.fr/
      - GENERIC_TIMEZONE=Europe/Paris
      - TZ=Europe/Paris
      - N8N_RUNNERS_ENABLED=true
      - N8N_DIAGNOSTICS_ENABLED=false
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=336
    volumes:
      - n8n_data:/home/node/.n8n

  caddy:
    image: caddy:2
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config

volumes:
  n8n_data:
  caddy_data:
  caddy_config:
Caddyfile
n8n.votre-domaine.fr {
    reverse_proxy n8n:5678
}

Antes de ejecutar docker compose up -d, el registro DNS de n8n.votre-domaine.fr debe apuntar a la dirección pública de la máquina y los puertos 80 y 443 deben redirigirse hacia ella. Caddy solicitará entonces un certificado a Let's Encrypt y lo renovará sin intervención. Los volúmenes caddy_data y caddy_config conservan los certificados y el estado entre reinicios.

!
Lo que implica una exposición pública
Una instancia de n8n accesible desde Internet es un objetivo: contiene tus credenciales de integración y puede ejecutar código. Utiliza una contraseña larga y única en la cuenta propietaria, activa la autenticación de dos factores en los ajustes, aplica rápidamente las actualizaciones y elimina cualquier acceso HTTP residual. Si no necesitas webhooks públicos, la VPN sigue siendo preferible. Los principios detallados en nuestra guía sobre la protección de un servidor Ollama se aplican del mismo modo a n8n.

#Solución de problemas: los bloqueos más frecuentes

Mensaje sobre la cookie segura al abrir
Accede a n8n mediante HTTP desde una dirección que no es localhost. Puede pasar a HTTPS o añadir N8N_SECURE_COOKIE=false, únicamente en una red privada.
Error de permisos en /home/node/.n8n
El contenedor se ejecuta con el usuario node, no como root. Esto ocurre cuando se sustituye el volumen con nombre por una carpeta del host cuyos permisos no coinciden. Conserva el volumen con nombre o ajusta el propietario de la carpeta al identificador de usuario 1000, que es el de node en la imagen.
Los flujos programados se ejecutan a la hora equivocada
GENERIC_TIMEZONE está ausente o mal escrito. El valor esperado es un nombre de zona horaria IANA, como Europe/Paris. Cada workflow también puede establecer su propia zona horaria en sus ajustes.
Los webhooks muestran una dirección localhost
WEBHOOK_URL no está definida o no corresponde a la dirección mediante la que el servicio de terceros se conecta con usted. El valor debe terminar con una barra oblicua e incluir el protocolo.
La base de datos crece sin parar
La purga de las ejecuciones está desactivada o tarda demasiado. Compruebe EXECUTIONS_DATA_PRUNE y EXECUTIONS_DATA_MAX_AGE, y tenga en cuenta también la opción que conserva los datos de las ejecuciones correctas, que se puede desactivar flujo por flujo.
Después de una actualización, n8n se niega a iniciar
Lee el registro con docker compose logs n8n: el mensaje suele indicar una variable eliminada o una migración fallida. Compáralo con las notas de la versión y restaura la copia de seguridad si es necesario.
n8n no ve Ollama en la misma máquina
Desde un contenedor, localhost designa el propio contenedor, no el host. La dirección que debe utilizar depende del sistema y de cómo se ejecute Ollama; ese es el objeto de la guía sobre n8n y Ollama que se cita a continuación.
Comandos útiles
docker compose ps                     # état du conteneur
docker compose logs --tail=100 n8n   # dernières lignes du journal
docker exec n8n n8n --version         # version installée
docker volume inspect n8n_n8n_data    # emplacement réel du volume (préfixe = nom du dossier)
docker compose restart n8n            # redémarrage simple

Para las preguntas que no encuentran respuesta en la documentación, el foro community.n8n.io está activo y el editor responde allí. Indique la versión exacta, el modo de instalación y las líneas del registro: son las tres primeras cosas que le pedirán.


#Para ir más allá

La instancia está instalada, respaldada y actualizada. El siguiente paso lógico es conectarla a un modelo local y, después, integrarla en una pila más amplia. Fuentes oficiales consultadas para esta guía: la sección de alojamiento de la documentación de n8n (docs.n8n.io/hosting/), la página de instalación de Docker (docs.n8n.io/hosting/installation/docker/), la página de actualización, la página sobre la licencia y la de las funciones de la edición comunitaria. Estas páginas evolucionan con las versiones: en caso de discrepancia con esta guía, prevalece su contenido.

n8n + Ollama: automatizar con una IA 100 % local
La guía que continúa: nodos de IA, conexión a Ollama desde el contenedor y primeros flujos de traducción y resumen. https://quelllm.fr/guide/n8n-ollama-automatisation-workflow
Ollama con Docker
Si también quiere ejecutar Ollama en un contenedor, junto a n8n, con acceso a la GPU. https://quelllm.fr/guide/ollama-docker-installation-guide
Desplegar un LLM en producción con Docker Compose
La pila completa Ollama, Open WebUI, Qdrant, n8n y Traefik en un solo archivo Compose, para ir más allá de la instancia aislada. https://quelllm.fr/guide/deployer-llm-docker-compose-production
Proteger tu servidor Ollama
Autenticación, cortafuegos y proxy inverso: las reglas de exposición se aplican a cualquier servicio autoalojado, incluido n8n. https://quelllm.fr/guide/securiser-serveur-ollama
¿Esta guía te ha ayudado?

¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.