Montar n8n con Docker Compose es una forma práctica de tener una plataforma de automatización estable, fácil de mantener y lista para producción.
Qué incluye este despliegue
- PostgreSQL 15 para la base de datos de n8n.
- n8n configurado con backend PostgreSQL.
- Nginx Proxy Manager para publicar por HTTP/HTTPS.
- Volúmenes persistentes para no perder datos.
- Red Docker externa para comunicar servicios.
- Variables de entorno para credenciales y dominios.
Requisitos previos
- Docker y
docker composeinstalados. - Dominio o subdominio apuntando al servidor.
- Puertos
80y443disponibles. - Carpeta de trabajo para el stack (
/opt/stacks/n8n).
Estructura recomendada en el host
mkdir -p /opt/postgres
mkdir -p /opt/n8n/data
mkdir -p /opt/npm/data
mkdir -p /opt/npm/letsencrypt
Crear la red externa
docker network create internal_net
Archivo .env
POSTGRES_USER=n8n
POSTGRES_PASSWORD=coloca_aqui_una_contrasena_segura
POSTGRES_DB=n8n
N8N_DOMAIN=n8n.tudominio.com
NPM_HOST_IP=192.168.0.112
Compose recomendado
services:
postgres:
image: postgres:15
container_name: postgres-n8n
restart: always
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- /opt/postgres:/var/lib/postgresql/data
networks:
- internal_net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
n8n:
image: n8nio/n8n:2.7.4
container_name: n8n
restart: always
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_HOST: ${N8N_DOMAIN}
N8N_PROTOCOL: https
WEBHOOK_URL: https://${N8N_DOMAIN}/
N8N_EDITOR_BASE_URL: https://${N8N_DOMAIN}
N8N_DIAGNOSTICS_ENABLED: "false"
N8N_PUBLIC_API_DISABLED: "true"
GENERIC_TIMEZONE: America/Costa_Rica
TZ: America/Costa_Rica
volumes:
- /opt/n8n/data:/home/node/.n8n
networks:
- internal_net
depends_on:
postgres:
condition: service_healthy
npm:
image: jc21/nginx-proxy-manager:latest
container_name: npm
restart: always
ports:
- "80:80"
- "443:443"
- "${NPM_HOST_IP}:81:81"
volumes:
- /opt/npm/data:/data
- /opt/npm/letsencrypt:/etc/letsencrypt
networks:
- internal_net
networks:
internal_net:
external: true
Levantar y validar
cd /opt/stacks/n8n
docker compose up -d
docker compose ps
docker logs postgres-n8n
docker logs n8n
docker logs npm
Configuración de Nginx Proxy Manager
- Domain Names: dominio de
N8N_HOST. - Scheme:
http. - Forward Hostname/IP:
n8n. - Forward Port:
5678. - Activar Websockets.
- Solicitar SSL y forzar HTTPS.
Buenas prácticas
- Mantener credenciales fuera de
docker-compose.yml. - Usar backups periódicos de
/opt/postgresy/opt/n8n/data. - Restringir el panel
:81por firewall. - Evitar
latesten entornos críticos.
Comandos de operación
docker compose down
docker compose pull
docker compose up -d
Si vas a actualizar versiones, realiza backup completo antes de aplicar cambios.