6 min read

Tutorial Completo: Instalar n8n con Docker, Nginx y SSL en tu VPS Ubuntu

image

¡Hola! Estás a punto de tener tu propio n8n funcionando de forma segura en la nube. Este tutorial te guiará desde cero en tu servidor VPS Ubuntu de Hetzner hasta tener n8n accesible por un dominio seguro (HTTPS).

¿Qué necesitas antes de empezar?

  • Acceso SSH a tu VPS: Conéctate a tu servidor (usualmente ssh root@TU_IP_DEL_VPS y tu contraseña). Todos los comandos se ejecutarán en esa terminal.
  • Un nombre de dominio: Debes tener un dominio registrado (ej. tudominio.com).
  • Acceso al panel DNS de tu dominio: Para configurar un subdominio (ej. n8n.tudominio.com) que apunte a la IP de tu VPS.
  • Permisos de sudo: Si no te conectas como root, asegúrate de que tu usuario tenga estos permisos.

Paso 1: Preparar tu Servidor Ubuntu e Instalar Docker

Primero, pondremos a punto tu VPS e instalaremos Docker, la “cocina especial” donde funcionará n8n.

  1. Actualizar y Limpiar el Sistema: Asegúrate de que tu VPS esté al día.

    sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
    
  2. Instalar Docker: Este conjunto de comandos instala Docker Engine, Docker Compose y las dependencias necesarias.

    sudo apt install ca-certificates curl gnupg lsb-release -y
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
    
  3. Verificar Docker: Comprueba que Docker se instaló correctamente.

    sudo docker run hello-world
    

    Si ves un mensaje de “Hello from Docker!”, ¡vas por buen camino!

  4. Configurar Docker para tu usuario (opcional): Si no usas el usuario root y quieres ejecutar comandos docker sin sudo, añade tu usuario al grupo docker.

    sudo usermod -aG docker tu_nombre_de_usuario
    

    Importante: Si hiciste esto, cierra tu sesión SSH y vuelve a conectarte para que los cambios surtan efecto.

Paso 2: Configurar tu Dominio

Ahora, dile a tu dominio dónde encontrar tu VPS.

  1. Crea un Registro DNS de tipo A: Accede al panel de gestión DNS de tu dominio (donde lo compraste).

    • Tipo: A
    • Nombre/Host/Subdominio: n8n (o el que quieras usar, ej. automatizacion).
    • Valor/IP/Destino: La IP pública de tu VPS Hetzner.
    • TTL: Por defecto (generalmente 600 segundos o 1 hora).

    Ejemplo: n8n.tudominio.com apuntando a TU_IP_DEL_VPS.

  2. Espera la Propagación: Los cambios DNS pueden tardar unos minutos u horas en propagarse por internet. Puedes verificarlo en https://www.whatsmydns.net/.

Paso 3: Arrancar n8n con Docker (Puerto para Nginx)

Iniciaremos n8n en un contenedor Docker, mapeando su puerto interno al localhost del VPS para que Nginx pueda acceder a él.

  1. Crear el Volumen de Datos de n8n: Esto asegura que tus automatizaciones y configuraciones persistan.

    docker volume create n8n_data
    
  2. Ejecutar n8n en Docker: Este comando inicia n8n, exponiendo su puerto 5678 solo a la interfaz 127.0.0.1 (localhost) de tu VPS.

    docker run -d --name n8n \
    -p 127.0.0.1:5678:5678 \
    -v n8n_data:/home/node/.n8n \
    -e N8N_PUBLIC_URL=https://n8n.tudominio.com \
    docker.n8n.io/n8nio/n8n
    
  3. Verificar que n8n esté funcionando:

    docker ps
    

    Deberías ver n8n con un estado Up.

  4. Confirmar acceso interno (opcional, para depuración):

    curl http://localhost:5678
    

    Esto debería devolver una respuesta HTML (la página de n8n), confirmando que es accesible para Nginx.

Paso 4: Instalar y Configurar Nginx como Proxy Inverso

Nginx será el “portero” que reciba las visitas en tu dominio y las redirija a n8n de forma segura.

  1. Instalar Nginx:

    sudo apt install nginx -y
    
  2. Configurar el Firewall (UFW): Abre solo los puertos necesarios (SSH, HTTP y HTTPS).

    sudo ufw allow ssh
    sudo ufw allow 'Nginx Full'
    sudo ufw enable
    sudo ufw status
    

    Confirma que el firewall esté activo y los puertos abiertos.

  3. Crear Configuración de Nginx para n8n: Abre un nuevo archivo de configuración. ¡Recuerda reemplazar n8n.tudominio.com con tu subdominio real!

    sudo nano /etc/nginx/sites-available/n8n.conf
    

    Pega el siguiente contenido:

    server {
        listen 80;
        server_name n8n.tudominio.com; # ¡Reemplaza con tu subdominio!
    
        location / {
            proxy_pass http://localhost:5678;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_read_timeout 900s;
            proxy_send_timeout 900s;
            proxy_connect_timeout 900s;
        }
    }
    

    Guarda (Ctrl + O, Enter) y sal (Ctrl + X).

  4. Activar la Configuración de Nginx: Crea un enlace simbólico y prueba la configuración.

    sudo ln -s /etc/nginx/sites-available/n8n.conf /etc/nginx/sites-enabled/
    sudo nginx -t
    

    Deberías ver syntax is ok y test is successful.

  5. Reiniciar Nginx:

    sudo systemctl restart nginx
    

Paso 5: Asegurar n8n con SSL/HTTPS (Certbot)

Ahora obtendremos un certificado SSL gratuito de Let’s Encrypt para cifrar tu conexión.

  1. Instalar Certbot:

    sudo apt install certbot python3-certbot-nginx -y
    
  2. Obtener e Instalar el Certificado SSL: Certbot configurará Nginx automáticamente para usar HTTPS. ¡Reemplaza n8n.tudominio.com con tu subdominio!

    sudo certbot --nginx -d n8n.tudominio.com
    
    • Te pedirá tu email.
    • Acepta los términos de servicio.
    • Te preguntará si quieres redirigir todo el tráfico HTTP a HTTPS: elige 2 para redirigir.
  3. Verificar Renovación Automática: Certbot configura automáticamente la renovación. Puedes probarla:

    sudo certbot renew --dry-run
    

    Si no hay errores, la renovación automática funcionará.

Configurar la Variable N8N_PUBLIC_URL

Para que n8n genere las URLs de callback y otras URLs públicas correctamente, debes especificar la dirección completa y segura donde es accesible.

  1. Detén el contenedor de n8n actual:

    docker stop n8n
    
  2. Elimina el contenedor de n8n actual:

    docker rm n8n
    
  3. Inicia n8n de nuevo, añadiendo la variable de entorno N8N_PUBLIC_URL: ¡Importante! Reemplaza https://n8n.tudominio.com con tu subdominio real (el que configuraste con Nginx y SSL).

    docker run -d --name n8n \
    -p 127.0.0.1:5678:5678 \
    -v n8n_data:/home/node/.n8n \
    -e N8N_EDITOR_BASE_URL=https://n8n.tudominio.com/ \
    -e WEBHOOK_URL=https://n8n.tudominio.com/ \
    docker.n8n.io/n8nio/n8n
    
  4. Verifica que n8n esté corriendo nuevamente:

    docker ps
    
  5. Verifica la configuración (opcional): Puedes entrar al contenedor para verificar que la variable de entorno se haya aplicado:

    docker exec n8n env | grep N8N_PUBLIC_URL
    

    Deberías ver la URL que configuraste.

¡Paso Final: Accede a tu n8n Seguro!

  • Configuración inicial de n8n: La primera vez que accedas, n8n te pedirá crear una cuenta de administrador. ¡Guarda bien esas credenciales!
  • Actualizar n8n: Para actualizar en el futuro, detén el contenedor (docker stop n8n), elimina el contenedor y la imagen antigua (docker rm n8n y docker rmi docker.n8n.io/n8nio/n8n), descarga la nueva imagen (docker pull docker.n8n.io/n8nio/n8n) y vuelve a arrancar n8n con el mismo comando del Paso 3.
  • Backup: Considera implementar una estrategia de backup para tu volumen n8n_data.