Cómo instalar N8N en un VPS Plesk (Ionos)



Cómo instalar n8n con PostgreSQL en un VPS con Plesk y Cloudflare (SSL Full Strict)
En esta guía aprenderás a desplegar n8n (herramienta de automatización de flujos) junto con PostgreSQL, corriendo en Docker Compose dentro de un VPS con Plesk, y protegido por Cloudflare en modo SSL Full (strict).
Incluye solución a los errores más comunes que aparecen al montar este stack.
1. Requisitos previos
- VPS con Plesk (con Docker instalado).
- Dominio gestionado en Cloudflare.
- Acceso SSH al servidor.
- Docker + Compose plugin moderno (
docker compose, nodocker-compose).
Si aún tienes la versión vieja:
sudo apt-get remove -y docker-compose
sudo apt-get update
sudo apt-get install -y docker-compose-plugin
docker compose version
2. Estructura y permisos en el host
Crearemos los directorios donde se guardarán los datos persistentes:
sudo mkdir -p /home/docker/n8n/{n8n_data,postgres}
sudo chown -R 1000:1000 /home/docker/n8n/n8n_data # n8n corre como uid 1000
sudo chown -R 999:999 /home/docker/n8n/postgres # postgres corre como uid 999
3. Archivo docker-compose.yml
Crea /home/docker/n8n/docker-compose.yml:
version: "3.9"
networks:
n8n-net:
driver: bridge
services:
postgres:
image: postgres:16
container_name: postgres
restart: unless-stopped
environment:
POSTGRES_DB: n8n
POSTGRES_USER: espartacode_n8n
POSTGRES_PASSWORD: <TU_PASS_PG>
volumes:
- /home/docker/n8n/postgres:/var/lib/postgresql/data
networks: [n8n-net]
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
depends_on:
- postgres
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: espartacode_n8n
DB_POSTGRESDB_PASSWORD: <TU_PASS_PG>
N8N_HOST: espartacode.ludbig.com
N8N_PROTOCOL: https
WEBHOOK_URL: https://espartacode.ludbig.com/
N8N_TRUST_PROXY: "true"
N8N_PORT: 5678
N8N_ENCRYPTION_KEY: "<TU_CLAVE_32+>"
GENERIC_TIMEZONE: Europe/Madrid
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
N8N_DIAGNOSTICS_ENABLED: "false"
N8N_VERSION_NOTIFICATIONS_ENABLED: "false"
N8N_SKIP_WEBHOOK_DEREGISTRATION_ON_SHUTDOWN: "true"
ports:
- "5678:5678"
volumes:
- /home/docker/n8n/n8n_data:/home/node/.n8n
networks: [n8n-net]
🔑 Genera una clave segura para
N8N_ENCRYPTION_KEY:openssl rand -base64 32
4. Levantar el stack
cd /home/docker/n8n
docker compose up -d
docker compose logs -f postgres | tail -n 50 # busca "ready to accept connections"
docker compose logs -f n8n | tail -n 80 # busca "Migrations finished"
5. Cloudflare (SSL)
- En el DNS de Cloudflare, pon el subdominio de n8n en Proxied (naranja).
- En SSL/TLS → Encryption mode, selecciona Full (strict).
- Puedes usar un Origin Certificate de Cloudflare en Plesk o simplemente Let’s Encrypt.
6. Plesk (reverse proxy)
En el subdominio (espartacode.ludbig.com):
- Instala un certificado válido.
- Configura un Proxy Rule hacia
http://127.0.0.1:5678. - En nginx → Additional directives añade:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
Esto habilita WebSockets (necesarios para el editor de n8n).
7. Primer acceso
- Abre
https://espartacode.ludbig.com. - Crea el usuario administrador.
- Verifica en Settings que
Webhook URLapunta al dominio público. - Desactiva sign-up público si no lo necesitas.
8. Copias de seguridad
Datos a respaldar:
/home/docker/n8n/n8n_data/home/docker/n8n/postgresdocker-compose.yml
Backup rápido:
sudo tar -czf /root/backup-n8n-$(date +%F).tgz -C /home/docker/n8n n8n_data postgres docker-compose.yml
Restauración = extraer y docker compose up -d.
9. Problemas comunes y soluciones
A) EACCES: permission denied, open '/home/node/.n8n/config'
- Dueño incorrecto del volumen.
sudo chown -R 1000:1000 /home/docker/n8n/n8n_data
sudo chmod 600 /home/docker/n8n/n8n_data/config
B) connect ECONNREFUSED ::1:5432
- Variables mal escritas o contenedores en distinta red.
- Usa
DB_POSTGRESDB_HOST=postgresy asegúrate de que ambos estén enn8n-net.
C) password authentication failed / role does not exist
- La carpeta de Postgres ya existía y no creó el usuario.
- Solución rápida:
docker compose down
sudo rm -rf /home/docker/n8n/postgres/*
docker compose up -d
D) Mismatching encryption keys
- El archivo
configy la varN8N_ENCRYPTION_KEYno coinciden.
echo '{"encryptionKey":"<TU_CLAVE_32+>"}' | sudo tee /home/docker/n8n/n8n_data/config
sudo chown 1000:1000 /home/docker/n8n/n8n_data/config
sudo chmod 600 /home/docker/n8n/n8n_data/config
docker compose restart n8n
E) Error de docker-compose (legacy, chunked)
- Usa el plugin moderno:
docker compose up -d.
Conclusión
Con este setup tienes n8n corriendo en tu VPS con Postgres como backend confiable, protegido por Cloudflare SSL Full strict y gestionado cómodamente desde Plesk para certificados y proxy.
Tu stack es reproducible, fácil de respaldar y con los permisos y claves bien configurados para evitar errores típicos.