Para instalar n8n, puedes elegir entre varios métodos que se mencionan en la documentacion oficial, incluyendo la instalación con npm en un servidor VPS, con Docker, o a través de un servicio de hosting que ofrezca plantillas preconfiguradas.
Se recomienda considerar las necesidades específicas de tu proyecto y nivel de experiencia técnica al elegir el método de instalación.
Instalación Local
Usando npm (Node.js), Requiere tener Node.js y npm instalados.
npm install n8n -g n8n
-
Accedes por defecto en:
http://localhost:5678
Docker
Al usar docker es ideal para entornos controlados o servidores, creamos el archivo docker-compose.yml
Estructura del proyecto
Primer paso es crear el directorio de trabajo:
mkdir n8n-docker
cd n8n-docker
La estructura esperada es la siguiente.
n8n-docker
│
├── docker-compose.yml
├── .env
└── volumes
├── postgres
└── n8n
Procedemos a crear los directorios para los volúmenes de docker
mkdir -p volumes/postgres
mkdir -p volumes/n8n
Configurar .env
Esto separa credenciales del compose. Creamos el archivo .env
POSTGRES_USER=n8n
POSTGRES_PASSWORD=n8nStrongPassword
POSTGRES_DB=n8n
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=adminStrongPassword
N8N_HOST=localhost
N8N_PORT=5678
N8N_PROTOCOL=http
GENERIC_TIMEZONE=America/Bogota
Esto permite:
- autenticación básica
- zona horaria correcta
- base de datos externa
Docker Compose profesional
Creamos el docker-compose.yml
version: "3.8"
services:
postgres:
image: postgres:15
container_name: n8n_postgres
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- ./volumes/postgres:/var/lib/postgresql/data
networks:
- n8n-network
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
DB_POSTGRESDB_USER: ${POSTGRES_USER}
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
N8N_BASIC_AUTH_ACTIVE: ${N8N_BASIC_AUTH_ACTIVE}
N8N_BASIC_AUTH_USER: ${N8N_BASIC_AUTH_USER}
N8N_BASIC_AUTH_PASSWORD: ${N8N_BASIC_AUTH_PASSWORD}
N8N_HOST: ${N8N_HOST}
N8N_PORT: ${N8N_PORT}
N8N_PROTOCOL: ${N8N_PROTOCOL}
GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
depends_on:
- postgres
volumes:
- ./volumes/n8n:/home/node/.n8n
networks:
- n8n-network
networks:
n8n-network:
driver: bridge
Esto:
- Mapea el puerto 5678, donde corre n8n.
- Habilita autenticación básica (puedes cambiar usuario y contraseña).
- Guarda los flujos y configuraciones en una carpeta local
./n8n_data. - Utilizamos postgresql para guardar datos importantes de non
Backup de la base de datos
Recomendado para producción:
docker exec -t n8n_postgres pg_dump -U n8n n8n > backup.sql
Levantar el servicio
Ejecuta:
docker-compose up -d
Verifica:
Instalación en Servidores Cloud o VPS
Puedes instalar n8n en servicios como: PM2 en un VPS (por ejemplo, Ubuntu)
npm install n8n -g
npm install pm2 -g
pm2 start n8n
pm2 save
pm2 startup
Usando servicios cloud preconfigurados
- n8n.cloud (pago): https://n8n.io/n8n-cloud
- Railway, Render, Fly.io, Heroku, etc. usando Docker o GitHub Deploy.
Pantalla Principal de n8n (Editor UI)
Cuando abres n8n, verás el Editor de flujos de trabajo. Aquí está todo lo que encontrarás:
Resumen visual
| Pestaña | ¿Qué gestiona? | ¿Para qué la usarías? |
|---|---|---|
| Workflows |
Flujos de automatización Es el centro donde se listan todos los flujos de trabajo (workflows) que has creado o importado. |
|
| Credentials |
Accesos a servicios externos Es donde se almacenan de forma segura las credenciales de servicios externos (como Gmail, GitHub, Notion, MySQL, etc.). |
|
| Executions |
Historial de ejecuciones Es el historial de todas las ejecuciones pasadas de tus flujos. |
|
Workflow
Lienzo central (Canvas)
- Es el área principal donde construyes tus flujos.
- Puedes arrastrar y soltar nodos, conectarlos entre sí y configurar su lógica.
- Cada nodo representa una acción (como enviar un email, consultar una API, leer una base de datos, etc.).
Panel izquierdo: "Nodes" (Nodos disponibles)
- Contiene una barra de búsqueda y una lista de todos los nodos disponibles.
- Puedes buscar por nombre, como
HTTP,Webhook,Gmail,PostgreSQL,IF, etc. - Arrastra el nodo al lienzo para usarlo en el flujo.
Panel derecho: Configuración del nodo
- Al seleccionar un nodo en el lienzo, este panel muestra su configuración detallada.
- Aquí defines:
- Entradas necesarias
- Autenticación (si aplica)
- Campos y parámetros de la acción
- Fórmulas, expresiones, transformaciones, etc.
Botón "Execute Node" / "Execute Workflow" (▶️)
- Puedes ejecutar:
- Un nodo individual (
Execute Node) para probarlo - Todo el flujo (
Execute Workflow)
- Un nodo individual (
- Ideal para hacer pruebas paso a paso.
Resultados (Output Panel debajo del lienzo)
- Muestra los resultados que devuelve cada nodo.
- Puedes hacer clic en cualquier nodo para ver sus datos de salida.
- Ayuda a depurar y entender qué devuelve cada paso.
Botones de la barra superior
| Botón o Elemento | Función |
|---|---|
🔄 New Workflow |
Crear un nuevo flujo de trabajo |
💾 Save |
Guardar el flujo actual |
▶️ Execute Workflow |
Ejecutar todo el flujo |
🧮 Toggle Expression |
Habilitar modo expresión ({{ }}) para usar variables o scripts |
⚙️ Settings |
Configurar cosas como nombre del workflow, etiquetas, activación, etc. |
📤 Export |
Exportar flujo en formato JSON |
📥 Import |
Importar un flujo desde JSON |
Modo expresión y variables ({{ }})
- Puedes insertar expresiones como:
{{ $json["email"] }} - Permite acceder a los datos de nodos anteriores, valores del sistema, fechas, etc.
Nodos especiales
Start: punto de inicio (no ejecuta nada, pero sirve para iniciar)Webhook: para que un flujo escuche peticiones externasIF,Switch,Merge,Wait,Set, etc.: nodos de lógica condicional
Activación de flujos (Workflows activos)
- Puedes activar un flujo para que se ejecute automáticamente (por ejemplo, cuando un Webhook es llamado).
- Al hacer clic en el botón Activate (⚡) en la parte superior derecha.
Modo oscuro / claro
- Puedes alternar el tema desde las configuraciones generales o con el ícono de la esquina.
Errores que se pueden presentar
our n8n server is configured to use a secure cookie
Ese error ocurre porque n8n detecta que está configurado para usar cookies seguras (Secure Cookies), pero la URL desde la que accedes es HTTP en lugar de HTTPS.
Esto pasa muy frecuentemente cuando:
- n8n está detrás de un reverse proxy como Nginx
- o cuando usas un túnel SSH inverso
Solución 1:
environment:
N8N_SECURE_COOKIE=false
Solución 2:
Configurar correctamente las variables de entorno para que n8n sepa que está detrás de HTTPS.
En el docker-compose.yml:
environment:
DB_TYPE: postgresdb
N8N_HOST: dominio.com
N8N_PROTOCOL: https
N8N_PORT: 443
WEBHOOK_URL: https://dominio.com/
N8N_PROXY_HOPS: 1/