VPS y Servidor Cloud migrado

En este artículo te mostramos cómo instalar la imagen Ubuntu 24.04 + n8n en tu servidor. La herramienta n8n se proporciona en un contenedor Docker como parte de la instalación. La imagen n8n proporcionada por IONOS no contiene un certificado SSL para la dirección IP suministrada, esto significa que el acceso únicamente es posible inicialmente a través del protocolo HTTP sin cifrar. Para acceder a n8n a través de una conexión cifrada, es necesario realizar una configuración manual. Cómo preparar la configuración y configurar n8n se explica más adelante en este artículo.

Resumen de los pasos necesarios

A continuación, te indicamos brevemente los pasos necesarios que debes seguir:

  • Instalar la imagen en el servidor

  • Preparar la configuración
  • Establecer una conexión SSH con el servidor
  • Guardar los archivos de certificados SSL en el host
  • Crear un archivo fullchain
  • Configurar n8n para la conexión SSL
  • Acceder a la interfaz n8n

Advertencia

Al reinstalar una imagen en un servidor existente, todos los datos existentes en el servidor se eliminarán irremediablemente y se sustituirán por los datos de la imagen recién instalada. Este proceso no se puede deshacer. Asegúrate de crear una copia de seguridad del servidor antes de instalar la nueva imagen. De lo contrario, corres el riesgo de experimentar una pérdida de datos.

1) Instalar la imagen en el servidor

Para instalar la imagen «Ubuntu 24.04 + n8n», sigue las siguientes instrucciones: 

  • Inicia sesión en tu cuenta IONOS.
  • Haz clic en Menú > Servidores & Cloud en la barra de menú superior. 
    Opcional: Si tienes varios contratos, selecciona el pertinente. 

  • En la barra de navegación izquierda, haz clic en Infraestructura > Servidores.
  • Haz clic en Acciones.
  • Haz clic en Reinstalar imagen. Se abrirá el área Reinstalar imagen.
Captura de pantalla: la sección de Infraestructura > Servidores se muestra en el Cloud Panel. En esta sección, la opción para reinstalar imagen del menú acciones está resaltada.
Figura: menú de acciones con la opción para reinstalar imagen en la sección Infraestructura > Servidores
  • Haz clic en la flecha que apunta hacia abajo en el mosaico de Ubuntu.
  • Selecciona la imagen Ubuntu 24.04 + n8n.
  • Haz clic en Reinstalar imagen. La imagen se instalará. Este proceso puede tardar unos minutos.
  • Anota la dirección IP del servidor. Esto será necesario más adelante para conectar tu dominio.

Notas

  • Tras la instalación, los puertos 80, 443 y 5678 deben estar habilitados en el firewall. Encontrarás más información al respecto en el siguiente apartado de este artículo:  «Preparar la configuración».

  • Tras la instalación, puedes acceder a tu instancia n8n utilizando la dirección IP de tu servidor y el número de puerto predeterminado de n8n: http://IP-ADRESSE_DES_SERVERS:5678.

2) Preparar la configuración

Para establecer una conexión cifrada con n8n, se necesita un dominio al que se pueda acceder. Además, se requiere un certificado SSL emitido para el dominio.

  • Adquirir un dominio
    Si aún no has adquirido un dominio para tu servidor, puedes solicitarlo en cualquier momento. Consulta las instrucciones en el siguiente enlace al artículo correspondiente: solicitar un dominio como cliente de IONOS

  • Crear un subdominio
    Crea un subdominio con el siguiente formato: n8n.ejemplo.com

    Sustituye el marcador de posición ejemplo.com por el dominio que hayas elegido. Consulta cómo crear un subdominio en tu cuenta IONOS en el siguiente enlace al artículo correspondiente: crear un subdominio

  • Solicitar un certificado SSL
    Configura un certificado SSL para tu subdominio. Si ya has configurado un certificado SSL Wildcard para el dominio, puedes omitir este paso. Los certificados SSL Wildcard son válidos tanto para el dominio como para el subdominio.

    Si solicitas un certificado SSL Starter, puedes utilizarlo para tu subdominio. Consulta cómo configurar un certificado SSL en el siguiente enlace al artículo correspondiente: configurar un certificado SSL gestionado por el usuario (SSL Starter / SSL Starter Wildcard)

  • Descargar archivos de certificado SSL para la instalación manual
    Consulta las instrucciones sobre cómo descargar los archivos del certificado SSL para la instalación manual en el siguiente enlace al artículo correspondiente: descargar archivos de certificado SSL para la instalación manual

  • Conectar el dominio a la dirección IP estática del servidor
    Consulta las instrucciones sobre cómo conectar tu dominio a la dirección IP estática de tu servidor en el siguiente enlace al artículo correspondiente: cambiar la dirección IPv4/IPv6 de un dominio (registro A/AAAA)

  • Configuración de firewall
    Asegúrate de que los siguientes puertos están habilitados en las políticas de firewall:
    - Puerto 80
    - Puerto 443
    - Puerto 5678

    Consulta las instrucciones en el siguiente artículo: modificar una política de firewall (VPS y Servidor Cloud migrado)

3) Establecer una conexión SSH con el servidor

Para el siguiente paso, establece una conexión SSH a tu servidor. Para ello, inicia sesión como root. Consulta las instrucciones en los siguientes enlaces a los artículos correspondientes: 

4) Guardar los archivos de certificados SSL en el host

Para guardar los archivos de certificado SSL en el host, sigue estos pasos: 

Los archivos del certificado ya se encuentran en el servidor:

  • Crea una carpeta en el directorio /opt/:

    root@ubuntu:~# mkdir -p /opt/certs

  • Copia los archivos en la carpeta. Si los archivos del certificado ya se encuentran en el servidor, utiliza el siguiente comando y personalízalo: 

    root@ubuntu:~# cp /path/to/Certificado-SSL_PARA_DOMINIO.cer /opt/certs/

    root@ubuntu:~# cp /path/to/CERTIFICADO_INTERMEDIO_1.cer /opt/certs/

    root@ubuntu:~# cp /path/to/CERTIFICADO_INTERMEDIO_2.cer /opt/certs/

    root@ubuntu:~# cp /path/to/Private_Key_PARA_DOMINIO.key /opt/certs/

 

Los archivos del certificado ya se encuentran en un equipo con el sistema operativo Microsoft Windows:

Si los archivos de certificado se encuentran en un equipo con el sistema operativo Microsoft Windows, sigue estos pasos:

  • Introduce el comando cmd en la barra de búsqueda situada en la barra de tareas.
  • Haz doble clic en Símbolo del sistema.
  • Utiliza el comando scp para copiar los archivos de Windows al sistema Linux. En el siguiente ejemplo, suponemos que los archivos de certificado se encuentran en la carpeta de certificados C:\SSL. Sustituye de acuerdo con las instrucciones:
     

    - username: tu nombre de usuario real en el servidor
    -remote-server-ip: dirección IP o el nombre de host de tu servidor
    - Certificado-SSL_PARA_DOMINIO.cer: nombre de archivo real
    - Private_Key_PARA_DOMINIO.key: nombre de archivo real
    - CERTIFICADO_INTERMEDIO_1.cer: nombre de archivo real
    - CERTIFICADO_INTERMEDIO_2.cer: nombre de archivo real
     

    scp C:\Certificado-SSL\Certificado-SSL_PARA_DOMINIO.cer username@remote-server-ip:/opt/certs/

    scp C:\Certificado-SSL\CERTIFICADO_INTERMEDIO_1.cer username@remote-server-ip:/opt/certs/

    scp C:\Certificado-SSL\CERTIFICADO_INTERMEDIO_2.cer username@remote-server-ip:/opt/certs/

    scp C:\Certificado-SSL\Private_Key_PARA_DOMINIO.key username@remote-server-ip:/opt/certs/

Alternativamente, puedes transferir los archivos de forma fácil y cómoda utilizando el programa WinSCP, un cliente gráfico SFTP y FTP de código abierto para Windows. Puedes descargar el programa en el siguiente enlace a la página del proveedor: descarga de WinSCP

Asignar derechos de lectura

Cambia al directorio en el que se encuentran los certificados SSL. Por ejemplo: 

root@ubuntu:~# cd /opt/certs

Para habilitar la lectura de los archivos, introduce los siguientes comandos en el VPS:

sudo chmod 755 /path/to
sudo chmod 644 /path/to

Por ejemplo: 

sudo chmod 755 /opt/certs
sudo chmod 644 /opt/certs/*

5) Crear un archivo fullchain

Para integrar los certificados intermedios, debes crear un único archivo de certificado que contenga toda la «cadena de confianza» (chain of trust). Para ello, sigue estos pasos:

  • Cambia al directorio /opt/certs:

    root@ubuntu:~# cd /opt/certs

  • Crea un archivo fullchain con el siguiente comando. El comando cat agrega los archivos en el orden correcto. Sustituye el marcador de posición Certificado-SSL_PARA_DOMINIO por el certificado SSL de tu dominio y los marcadores de posición de los certificados intermedios. Asegúrate de que los nombres de los archivos son correctos.

    root@ubuntu:/opt/certs# cat Certificado-SSL_PARA_DOMINIO.cer 
    intermediate1.cer intermediate2.cer > n8n.fullchain.cer

    Así se creará el archivo fullchain.

6) Configurar n8n para la conexión SSL

Advertencia

Estos pasos desactivarán la instancia no segura instalada e instalarán una nueva instancia n8n segura con un certificado SSL de IONOS. Si realizas estos pasos después de haber estado trabajando con la instancia no segura durante algún tiempo, te recomendamos que primero exportes cualquier flujo de trabajo y otro contenido que hayas creado para poder importarlos a la nueva instancia. Consulta cómo funciona en el siguiente enlace a la documentación de n8n: exportar e importar flujos de trabajo | n8n Docs

  • Para crear un nuevo directorio llamado n8n-compose en tu servidor, introduce el siguiente comando:

    root@ubuntu:~# mkdir n8n-compose

  • Para continuar trabajando en el directorio recién creado, cambia al nuevo directorio:

    root@ubuntu:~# cd n8n-compose

  • En este directorio, utiliza el editor vi para crear un archivo con la extensión .env. Este archivo se utiliza para definir las variables de entorno que se utilizan en el archivo Docker Compose.

    root@ubuntu:~/n8n-compose# vi .env

Nota

El editor vi tiene un modo de inserción y un modo de comandos. Puedes activar el modo de inserción con la tecla [i]. En este modo, los caracteres introducidos se insertan inmediatamente en el texto. Para salir del modo de inserción y activar el modo de comandos, pulsa [ESC]. Si utilizas el modo de comandos, las entradas del teclado se interpretan como comandos.

  • Añade la siguiente información al archivo .env y sustituye el marcador de posición example.com y el marcador de posición de la zona horaria. Se hará referencia a estas variables en el archivo compose.yaml en un paso posterior y se utilizan para definir la configuración del dominio y la norma de zona horaria deseada.

    # DOMAIN_NAME and SUBDOMAIN together determine where n8n will be reachable from
    # The top level domain to serve from
    DOMAIN_NAME=example.com

    # The subdomain to serve from
    SUBDOMAIN=n8n

    # The above example serves n8n at: https://n8n.example.com

    # Optional timezone to set which gets used by Cron and other scheduling nodes
    GENERIC_TIMEZONE=Europe/Berlin

  • Pulsa la tecla [ESC].
  • Para salir de vi y guardar el archivo, introduce el siguiente comando y pulsa la tecla Intro:

    :wq

  • Utiliza el siguiente comando para crear el archivo traefik.yaml:

    root@ubuntu:~/n8n-compose# vi traefik.yaml

  • Inserta la siguiente información, prestando atención a las sangrías:

    # Configuración estática Traefik (traefik.yaml)
    api:
       insecure: true # Permite el panel de control de Traefik (optional)
    providers:
      docker:
        exposedByDefault: false # Solo se tienen en cuenta los contenedores con 'traefik.enable=true'
      file:
        directory: /etc/traefik/dynamic # Ruta *en contenedor*
        watch: true # Supervisar los cambios

    entryPoints:
      web:
        address: ":80"
        # Redireccionamiento automático de HTTP a HTTPS
        http:
          middlewares:
            - redirect-to-https@file
      websecure:
        address: ":443"
        http:
          tls: {} # Activar TLS de forma global para este punto de entrada

  • Pulsa la tecla [ESC].
  • Para salir de vi y guardar el archivo, introduce el siguiente comando y, a continuación, pulsa la tecla Intro:

    :wq

  • Crea un nuevo directorio con el nombre dynamic:

    root@ubuntu:~/n8n-compose# mkdir dynamic

  • Crea un archivo de certificado dinámico:

    root@ubuntu:~/n8n-compose# vi dynamic/certificates.yaml

  • Inserta la siguiente información y reemplaza el marcador de posición Private_Key_PARA_DOMINIO.key. Presta atención a las sangrías:

    # Configuración dinámica: certificados
    tls:
    certificates:
    # Ruta *dentro del contenedor* a la cadena
    - certFile: /opt/certs/n8n.fullchain.cer
    keyFile: /opt/certs/Private_Key_PARA_DOMINIO.key

    # Configuración dinámica: reenvío global de HTTP a HTTPS
    http:
    middlewares:
    redirect-to-https:
    redirectScheme:
    scheme: https
    permanent: true

  • Comprueba las rutas en las líneas certFile y keyFile y ajústalas si es necesario.
  • Pulsa la tecla [ESC].
  • Para salir de vi y guardar el archivo, introduce el siguiente comando y pulsa la tecla Intro:

    :wq

  • Crea un directorio con el nombre local-files. Este es utilizado como bind mount para permitir el acceso a los archivos desde el contenedor. Para ello, introduce el siguiente comando:

    root@ubuntu:~/n8n-compose# mkdir local-files

  • Para crear el archivo Docker Compose necesario, introduce el siguiente comando:

    root@ubuntu:~/n8n-compose# vi compose.yaml

  • Añade la siguiente información y asegúrate de que las entradas de la sección # Definición de Security-Header-Middleware (Name: n8n-secure-headers) están en una línea.

    services:
    traefik:
    image: "traefik:v2.11" # Versión fija para mayor estabilidad
    restart: always
    command:
    - "--configFile=/etc/traefik/traefik.yaml"
    ports:
    - "80:80"
    - "443:443"
    - "127.0.0.1:8080:8080"
    volumes:
    - traefik_data:/data # Memoria interna para Traefik (por ejemplo, ACME info.P.ej. ACME infos, si se utiliza)
    - /var/run/docker.sock:/var/run/docker.sock:ro
    # Montar los certificados (como antes)
    - /opt/certs:/opt/certs:ro
    # Montar el nuevo archivo de configuración estática
    - ./traefik.yaml:/etc/traefik/traefik.yaml:ro
    # Montar la nueva carpeta de configuración dinámica
    - ./dynamic:/etc/traefik/dynamic:ro

    n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    ports:
    - "127.0.0.1:5678:5678"
    labels:
    - traefik.enable=true
    - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
    # El router solo responde a 'websecure' (HTTPS)
    - traefik.http.routers.n8n.entrypoints=websecure
    # Indica al router que utilice TLS
    - traefik.http.routers.n8n.tls=true

    # Definición de Security-Header-Middleware (Name: n8n-secure-headers)
    - traefik.http.middlewares.n8n-secure-headers.headers.STSSeconds=315360000
    - traefik.http.middlewares.n8n-secure-headers.headers.browserXSSFilter=true
    - traefik.http.middlewares.n8n-secure-headers.headers.contentTypeNosniff=true
    - traefik.http.middlewares.n8n-secure-headers.headers.forceSTSHeader=true
    - traefik.http.middlewares.n8n-secure-headers.headers.SSLHost=${DOMAIN_NAME}
    - traefik.http.middlewares.n8n-secure-headers.headers.STSIncludeSubdomains=true
    - traefik.http.middlewares.n8n-secure-headers.headers.STSPreload=true

    # Asignación de middleware al router
    - traefik.http.routers.n8n.middlewares=n8n-secure-headers@docker

    environment:
    # Estas variables de entorno utilizan el archivo .env
          - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
          - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
          - N8N_PORT=5678
          - N8N_PROTOCOL=https
          - N8N_RUNNERS_ENABLED=true
          - NODE_ENV=production
          - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
          - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
          - TZ=${GENERIC_TIMEZONE}
        volumes:
          - n8n_data:/home/node/.n8n
          - ./local-files:/files

    volumes:
    n8n_data:
    traefik_data:

  • Pulsa la tecla [ESC].
  • Para salir de vi y guardar el archivo, introduce el siguiente comando y pulsa la tecla Intro:

    :wq

  • Para saber qué proceso está utilizando el puerto 5678, introduce el siguiente comando:

    root@ubuntu:~/n8n-compose# sudo lsof -i :5678

  • Para terminar un proceso, personaliza el siguiente comando e introdúcelo:

    root@ubuntu:~/n8n-compose# sudo kill PID_INSERTAR_AQUÍ

  • Después de la personalización, introduce el siguiente comando para detener los contenedores antiguos:

    root@ubuntu:~/n8n-compose# docker compose down

  • Para iniciar los contenedores definidos en compose.yaml como daemons en segundo plano, introduce el siguiente comando. Este comando inicia y configura las instancias Traefik y n8n.

    root@ubuntu:~/n8n-compose# docker compose up -d

  • Para comprobar si los contenedores se están ejecutando, introduce el siguiente comando:

    root@ubuntu:~/n8n-compose# docker ps

  • Asegúrate de que los siguientes 2 contenedores se están ejecutando y su estado es «Up». Para ello, introduce los siguientes comandos.

    root@ubuntu:~/n8n-compose# n8n-compose-traefik-1
    root@ubuntu:~/n8n-compose# n8n-compose-n8n-1

Ayuda en caso de problemas

  • Si uno de los contenedores no tiene el estado «Up» (por ejemplo, «Restarting» o «Exited»), el error reside aquí. En este caso, comprueba las entradas de registro de Traefik. para ello, introduce el siguiente comando:

    root@ubuntu:~/n8n-compose# docker logs n8n-compose-traefik-1

  • A continuación, busca mensajes de error, como por ejemplo:
     

    - certificate not found
    - unable to read
    - permission denied (esto indicaría un problema de chmod)
    - router not found for domain

  • Comprueba la configuración del firewall en Cloud Panel y asegúrate de que el tráfico entrante está autorizado para los puertos 80 (TCP) y 443 (TCP).
  • Comprueba la accesibilidad del subdominio.
  • Comprueba la sangría de los archivos .yaml.

7) Acceder a la interfaz n8n

Una vez que los servicios Docker (contenedores) se han iniciado correctamente, el acceso a n8n es gestionado por proxy Traefik. Traefik asegura el cifrado SSL y reenvía las peticiones a tu instancia n8n. El acceso es ahora exclusivamente a través del dominio que has configurado previamente en el archivo .env.

Importante

El acceso directo a través de http://SERVER-IP:5678 ya no es posible. La configuración en compose.yaml (en puertos: - «127.0.0.1:5678:5678») asegura que n8n solo es accesible internamente (para Traefik), pero no públicamente a través de la IP del servidor.

  • Abre tu navegador.
  • Introduce la URL completa y segura, formada por las variables SUBDOMAIN y DOMAIN_NAME de tu archivo .env
    Por ejemplo: https://n8n.example.com
  • La ventana Set up owner account se muestra la primera vez que se accede a ella. Introduce la dirección de correo electrónico deseada en el campo Email.
  • Introduce el nombre y apellidos deseados en los campos First Name y Last Name.
  • Introduce una contraseña en el campo Password.
  • Pulsa Next. Se abrirá la ventana Customize n8n to you.
Captura de pantalla: se muestra la ventana para la configuración de la cuenta. En esta ventana, el botón para continuar aparece resaltado.
Figura: botón para continuar en la ventana de configuración de la cuenta
  • Responde a las preguntas de la ventana Customize n8n to you y haz clic en Get started . Ahora ya podrás utilizar n8n.
Captura de pantalla: se muestra la ventana de personalización n8n. En esta ventana, el botón para comenzar aparece resaltado.
Figura: botón para comenzar en la ventana de personalización n8n