Contenido
Tutorial de autoalojamiento de n8n: Docker Compose, PostgreSQL y HTTPS
Después de comprobar que todo funciona en tu propio ordenador, necesitarás implementar n8n en un servidor con una dirección fija para mantener tus flujos de trabajo en funcionamiento las 24 horas y permitir que servicios externos, como Webhook y Telegram, se conecten.
Requisitos
- Un servidor Linux en la nube (VPS). Para un uso ligero bastan 1 o 2 núcleos y 2 GB de memoria; necesitarás más si tienes muchos flujos de trabajo o quieres ejecutar modelos de IA localmente.
- Un dominio y un registro DNS A para un subdominio (por ejemplo,
n8n.example.com) que apunte a la dirección IP del servidor. - Docker y Docker Compose instalados en el servidor (consulta Tutorial de Docker: instalación).
- Los puertos 80 y 443 abiertos en el firewall.
Arquitectura
Internet ──HTTPS──▶ Caddy (certificado automático) ──▶ n8n:5678 ──▶ PostgreSQL
- Caddy: proxy inverso que solicita y renueva automáticamente los certificados de Let's Encrypt
- PostgreSQL: base de datos recomendada para producción (SQLite, la opción predeterminada, sirve para uso personal o pruebas)
- Ni n8n ni la base de datos quedan expuestos directamente a Internet
A partir de n8n 2.x, MySQL y MariaDB ya no son compatibles como bases de datos de n8n. Usa PostgreSQL o SQLite.
Archivos
Crea el directorio /opt/n8n en el servidor:
/opt/n8n/
├── compose.yaml
├── .env
└── Caddyfile
.env
DOMAIN=n8n.example.com
POSTGRES_PASSWORD=Reemplaza por una contraseña aleatoria y muy larga
N8N_ENCRYPTION_KEY=Reemplaza por otra cadena aleatoria y muy larga
Genera una cadena aleatoria:
openssl rand -hex 32
N8N_ENCRYPTION_KEYcifra todas las credenciales. Haz una copia de seguridad en otro lugar; si la pierdes, no podrás usar ninguna credencial.
Caddyfile
{$DOMAIN} {
reverse_proxy n8n:5678
}
compose.yaml
services:
caddy:
image: caddy:2
ports:
- "80:80"
- "443:443"
environment:
DOMAIN: ${DOMAIN}
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
restart: unless-stopped
postgres:
image: postgres:17
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: n8n
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n -d n8n"]
interval: 5s
retries: 10
restart: unless-stopped
n8n:
image: n8nio/n8n:2.42.7 # Cambia a la versión fija que quieras usar
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
N8N_HOST: ${DOMAIN}
N8N_PORT: 5678
N8N_PROTOCOL: https
N8N_WEBHOOK_URL: https://${DOMAIN}/
N8N_PROXY_HOPS: 1
NODE_ENV: production
GENERIC_TIMEZONE: Asia/Taipei
TZ: Asia/Taipei
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
EXECUTIONS_DATA_PRUNE: "true"
EXECUTIONS_DATA_MAX_AGE: 336
volumes:
- n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
restart: unless-stopped
volumes:
caddy_data:
pg_data:
n8n_data:
Explicación de las variables de entorno importantes
| Variable | Descripción |
|---|---|
N8N_HOST, N8N_PROTOCOL | Dominio y protocolo externos; afectan, entre otras cosas, a las URL de retorno de OAuth |
N8N_WEBHOOK_URL | URL externa de Webhook. Si no la configuras, el nodo Webhook mostrará http://localhost:5678/.... En versiones anteriores a n8n 2.30, usa WEBHOOK_URL |
N8N_PROXY_HOPS | Configúralo en 1 si n8n está detrás de un proxy inverso para que pueda obtener la IP real del usuario |
N8N_ENCRYPTION_KEY | Clave de cifrado de credenciales |
GENERIC_TIMEZONE | Zona horaria que usan las programaciones |
EXECUTIONS_DATA_PRUNE, EXECUTIONS_DATA_MAX_AGE | Elimina automáticamente los registros de ejecución que superen el límite indicado (336 horas = 14 días) para evitar que la base de datos crezca sin límite |
Inicio
cd /opt/n8n
docker compose up -d
docker compose logs -f n8n
En unos minutos, Caddy obtendrá el certificado automáticamente. Abre https://n8n.example.com y crea la cuenta de propietario.
Crea la cuenta de inmediato. Antes de configurar la cuenta de propietario, cualquier persona que visite esta dirección puede adelantarse y crear una cuenta.
Recomendaciones de seguridad
- Usa una etiqueta de imagen con una versión fija, no
latest, y lee las notas de la versión antes de actualizar. - Abre solo los puertos 22, 80 y 443 en el servidor, y permite el acceso SSH únicamente con claves.
- Activa la verificación en dos pasos para tu cuenta (en los ajustes personales).
- En la versión 2.x, los nodos peligrosos que no necesitas (por ejemplo, los que ejecutan comandos del sistema) ya están desactivados de forma predeterminada. No los habilites sin motivo.
- Haz copias de seguridad periódicamente (consulta Copias de seguridad y actualizaciones).
Uso de modelos de IA locales
Para que n8n use modelos locales de Ollama, puedes añadir el servicio ollama al mismo archivo compose.yaml. Consulta Conectar n8n con Ollama. Ten en cuenta que los modelos de IA necesitan mucha memoria y capacidad de cálculo; un VPS pequeño normalmente no puede ejecutarlos.
Ejecuciones a gran escala: queue mode
Si tienes muchos flujos de trabajo y se ejecutan con frecuencia, puedes activar queue mode: el proceso principal recibe los desencadenantes y los distribuye a varios workers, que los ejecutan en paralelo mediante una cola de Redis. Se trata de una implementación avanzada; consulta la explicación de queue mode en la documentación oficial.
Actualizado 12 de octubre de 2026