NIMxion
Volver al blog
Guía Definitiva: Cómo instalar n8n en un VPS con Docker (Paso a Paso)
n8n VPS Docker Seguridad Automatización DevOps

Guía Definitiva: Cómo instalar n8n en un VPS con Docker (Paso a Paso)

N
NIMxion Intelligence

Guía Definitiva: Cómo instalar n8n en un VPS con Docker (Guía 2025)

Bienvenido a la guía más completa para desplegar n8n en tu propio servidor. Tener tu propia instancia de n8n no solo te ahorra cientos de euros en suscripciones, sino que te da el control absoluto sobre tus datos y los de tus clientes.

Esta guía está diseñada para que cualquier persona, incluso sin experiencia previa en servidores, pueda tener un sistema profesional funcionando en menos de 20 minutos.


Faes 1: La Fundación - El Servidor (VPS)

Un VPS (Servidor Privado Virtual) es un ordenador encendido 24/7 en la nube.

¿Qué proveedor elegir?

  • Recomendados: Hetzner (gran relación calidad/precio), DigitalOcean o AWS.
  • Sistema Operativo: Elige siempre Ubuntu 24.04 LTS. Es el estándar de la industria y el más sencillo de documentar.

Requisitos de Hardware

  • Mínimo: 1 vCPU / 2GB RAM (Solo para flujos muy simples).
  • Recomendado (Producción): 2 vCPU / 4GB RAM. n8n utiliza Node.js, y PostgreSQL consume recursos; no racanees aquí si quieres estabilidad.

Fase 2: Preparación del Terreno (SSH y Docker)

Una vez comprado tu VPS, conéctate vía terminal (SSH):

# Conéctate (reemplaza 'tu_ip' por la IP de tu servidor)
ssh root@tu_ip

Instalación de Docker (El estándar de 2025)

Ya no instalamos Docker como un paquete suelto. Instalamos el motor y el plugin de Compose moderno:

sudo apt update && sudo apt upgrade -y
sudo apt install docker.io docker-compose-v2 -y
# Verifica la instalación
docker compose version

Fase 3: Despliegue con Docker Compose

Docker Compose nos permite definir toda nuestra infraestructura en un solo archivo. Crearemos una carpeta dedicada para mantener todo limpio.

mkdir n8n-docker && cd n8n-docker
nano docker-compose.yml

Copia y pega el siguiente código. Nota importante: Hemos eliminado el tag

version
porque la especificación moderna de Docker ya no lo requiere.

services:
  postgres:
    image: postgres:15
    restart: unless-stopped
    environment:
      POSTGRES_USER: n8n_prod
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # Se lee del archivo .env
      POSTGRES_DB: n8n_production
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U n8n_prod -d n8n_production']
      interval: 10s
      timeout: 5s
      retries: 5

  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    environment:
      # --- Base de Datos ---
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_DATABASE: n8n_production
      DB_POSTGRESDB_USER: n8n_prod
      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
      
      # --- Seguridad y Cifrado ---
      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
      N8N_BASIC_AUTH_ACTIVE: "true"
      N8N_BASIC_AUTH_USER: ${N8N_USER}
      N8N_BASIC_AUTH_PASSWORD: ${N8N_PASSWORD}
      N8N_SECURE_COOKIE: "true"
      N8N_BLOCK_ENV_ACCESS_IN_NODE: "true" # Evita escape de credenciales
      
      # --- Automatización de Mantenimiento ---
      EXECUTIONS_DATA_PRUNE: "true"
      EXECUTIONS_DATA_MAX_AGE: "720" # Purga cada 30 días automáticamente
      EXECUTIONS_DATA_PRUNE_TIMEOUT: "3600"
      
      # --- Rendimiento y Estabilidad Pro ---
      N8N_EXECUTION_PROCESS: "own" # Aísla cada flujo en su propio proceso
      N8N_LOG_LEVEL: "info"
      N8N_RECURSION_LIMIT: "100" # Evita bucles infinitos
      N8N_PERSONAL_DATA_EXPOSE_LEVEL: "error" # Privacidad GDPR
      N8N_METRICS: "true"

    ports:
      - "127.0.0.1:5678:5678" # Solo accesible via Proxy Local (Seguridad)
    depends_on:
      postgres:
        condition: service_healthy
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  postgres_data:
  n8n_data:

Fase 4: Configuración de Variables (.env)

No metas tus contraseñas directamente en el archivo anterior. Crea un archivo

.env
en la misma carpeta:

nano .env

Añade esto y personalízalo:

POSTGRES_PASSWORD=una_password_muy_fuerte_aqui
N8N_ENCRYPTION_KEY=genera_una_con_openssl_rand_hex_32
N8N_USER=tu_usuario_admin
N8N_PASSWORD=tu_password_acceso_web

Fase 5: ¡A Volar! (Comandos de Gestión)

Para levantar el sistema por primera vez y dejarlo en segundo plano:

docker compose up -d

Comandos útiles:

  • docker compose logs -f n8n
    : Ver qué está pasando en tiempo real.
  • docker compose ps
    : Ver si los contenedores están vivos.
  • docker compose restart n8n
    : Reiniciar el servicio.

Fase 6: Nginx Reverse Proxy y SSL (El Candadito Verde)

Como hemos configurado n8n para escuchar solo en

127.0.0.1
, nadie podrá entrar desde fuera. Necesitamos un proxy inverso (Nginx) para gestionar el HTTPS.

  1. Instala Nginx:
    sudo apt install nginx -y
    .
  2. Configura el Sitio: Crea un archivo en
    /etc/nginx/sites-available/n8n.conf
    :
    server {
        server_name n8n.tu-dominio.com;
        location / {
            proxy_pass http://127.0.0.1:5678;
            proxy_set_header Connection '';
            proxy_http_version 1.1;
            chunked_transfer_encoding off;
            proxy_buffering off;
            proxy_cache off;
        }
    }
    
  3. Activa SSL con Certbot:
    sudo apt install python3-certbot-nginx -y
    sudo certbot --nginx -d n8n.tu-dominio.com
    

Enciclopedia de Variables: ¿Por qué esto es importante?

  • N8N_ENCRYPTION_KEY: Es el corazón de tu n8n. Cifra tus credenciales API. Si la pierdes, todas tus integraciones dejarán de funcionar. Guárdala fuera del servidor.
  • N8N_EXECUTION_PROCESS (own): Por defecto n8n corre todo en el mismo proceso. Si un flujo se vuelve loco, tira el servidor. Con
    own
    , cada flujo tiene su propia "celda" aislada.
  • EXECUTIONS_DATA_MAX_AGE: n8n guarda un registro de cada vez que se ejecuta algo. En un servidor con mucho tráfico, esto llenará el disco en semanas. Configurar esto a 30 días (720h) es salud pura para tu VPS.
  • N8N_BLOCK_ENV_ACCESS_IN_NODE: Regla de oro de seguridad. Impide que un nodo de código pueda "leer" las variables de tu servidor Linux.

Conclusión

Ya no eres un principiante. Tienes una instalación de n8n preparada para el mundo real: segura, aislada, autolimpia y bajo tu total control. ¡Feliz automatización!

Compartir este artículo

¿Te ha gustado? Ayúdanos a llegar a más personas.