Acelerando los desarrollos con contenedores : n8n

Publicado por Víctor Madrid el

Arquitectura de SolucionesAutomatizaciónWorkflowsAgentes IAOrquestaciónDockern8n

En este artículo de soporte se va a mostrar cómo poder disponer de un contenedor de n8n de forma rápida para utilizarlo durante el desarrollo como infraestructura. Este contenedor proporcionará la funcionalidad de IDE de desarrollo y a la vez de entorno de ejecución.

También se puede proporcionar como una nueva herramienta de equipo si se instala de forma centralizada y si se habilitan los usuarios.

Recordemos que el uso de Docker es uno de los mecanismos que facilita la herramienta para tener un alojamiento en tu propia máquina (local), en un servidor propio o bien en algún servicio de la nube basado en contenedores. Así que os aconsejo entender muy bien lo que se va a decir en este artículo y en el futuro seguro que será algo que os ayudará mucho.

A modo de recordatorio pongo los enlaces a los artículos que se irán relacionando :

  • "Primeros pasos con n8n (Parte 1)" : Artículo de introducción a la herramienta n8n donde se explicarán más ciertos detalles técnicos de la herramienta y ciertos conceptos necesarios para explotar el máximo su uso.
  • "Acelerando los desarrollos con contenedores : n8n": Artículo de soporte que ayudará a desplegar la herramienta en local mediante Docker y que servirá de base para la realización de los siguientes artículos. Este artículo 😃.

Este artículo está dividido en 4 partes:

  • 1. Introducción
  • 2. Stack Tecnológico
  • 3. Ejemplo de Uso
  • 4. Conclusiones

1. Introducción

En este apartado se tratarán los siguiente puntos :

  • 1.1. Introducción al uso de contenedores como aceleradores del desarrollo
  • 1.2. ¿Qué necesidades tenemos para tener un "n8n" con contenedores?

1.1. Introducción al uso de contenedores como aceleradores del desarrollo

Para centralizar esta información en un único punto y así poder facilitar su consulta se ha diseñado un artículo específico.

1.2. ¿Qué necesidades tenemos para requerir un "n8n" con contenedores?

Los motivos principales que me llevaron a tratar de investigar en tener un n8n dentro de un contenedor fueron los siguientes:

  • Disponer de una instalación inmutable
  • Disponer de una instalación del fabricante en un servidor propio
  • Replicar la instalación del producto del cliente en local (versionado, entorno, etc.)
    • Hay que tener en cuenta que una de las características más importantes que tiene este producto con respecto a su competencia es que facilita la instalación y el despliegue en servidores propios
  • Minimizar en un entorno previo los posibles cambios de configuración que pudiéramos requerir --> Perdiendo el miedo a los cambios :-)
  • Asegurarse de que a todo el mundo le funcionaba de primeras
  • Ayudar al equipo a coger experiencia en el uso de n8n
  • Disponer en el entorno local de la misma pieza que se utilizará en entornos altos
  • Investigar previamente cómo funciona su API de integración
  • Ayudarme a establecer cierta lógica de negocio, gestión de errores sobre la pieza de desarrollo a realizar
  • Aprender los mecanismos de importación y exportación de flujos de trabajo
  • Proporcionar un entorno para realizar pruebas "locas"
  • Facilitar la incorporación de otros productos con los que integrarse vía contenedor
  • ...

2. Stack Tecnológico

Este es el stack tecnológico elegido para implementar la funcionalidad "n8n":

  • Docker - Tecnología de Contenedores/Containers
  • Docker Hub - Repositorio de Docker Público donde se ubican las imágenes oficiales
  • n8n - Herramienta de automatización de procesos + Agentes IA

3. Ejemplo de Uso

Para enseñar a utilizarlo y así practicar se ha habilitado un repositorio, este repositorio se reutilizará para otros artículos de la serie "Primeros pasos con n8n".

La parte que tiene que ver con este artículo se encuentra en el apartado de example/basic. Este apartado cuenta con un único fichero Docker Compose.

Este fichero Docker Compose consta del siguiente elemento:

Herramienta n8n

  • Se establece la imagen de n8n con una versión establecida: n8n:1.82.1
    • Esta es la versión con la que se configuró la imagen
    • Se aconseja estar actualizado a nivel de la herramienta
  • Se define el nombre del contenedor como: n8n
  • Se define la política de restart
  • Se define la red en la que se ubicará: demo
    • En este caso se trata de una red privada
  • Se establecen algunas variables de entorno que ayudarán a la configuración de la herramienta
    • En este caso se define el "time zone" que es un aspecto importante para la monitorización y el logging
    • Aspectos de la herramienta: logging, acceso securizado, etc.
      • Algunos de ellos estarán comentados pero los he dejado puestos por si los necesitáis.
    • Nota: Estas variables puede cambiar de una versión a otra
  • Se define el puerto:
    • 5678 para las peticiones HTTP a la interfaz Web
  • Se definen los volúmenes del contenedor:
    • Se mapea el socket de Docker
      • Requerido por el uso del provider de Docker
      • Define un bind mount para que el socket de comunicación con Docker esté disponible para el contenedor
    • Se mapea el directorio de configuración de n8n
    • Se mapea otro directorio dentro del contenedor que no sea oculto

Ejemplo de fichero "EXAMPLE-docker-compose-01.yml"

# Use Case: Basic Installation
services:
  # Project URL: https://github.com/n8n-io/n8n
  # Docs URL: https://docs.n8n.io/
  n8n:
    image: n8nio/n8n:1.82.1
    container_name: "n8n"
    #container_name: "${PROJECT_NAME}n8n"
    restart: always
    networks: ['demo']
    environment:
      # *** General ***
      - GENERIC_TIMEZONE=Europe/Madrid
      - TZ=Europe/Madrid
      - NODE_ENV=production
      # *** Settings ***
      - N8N_SECURE_COOKIE=false
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_RUNNERS_ENABLED=true
      #- N8N_ENCRYPTION_KEY=SDi9RWzDZlQB3Gd+NnE5F0LL4ikmLpvV
      # *** Auth ***
      #- N8N_BASIC_AUTH=true
      #- N8N_BASIC_AUTH_USERNAME=test1
      #- N8N_BASIC_AUTH_PASSWORD=test1
      # *** Logging ***
      #- N8N_LOG_LEVEL=debug
      #- N8N_LOG_OUTPUT=console,file
      #- N8N_LOG_FILE_LOCATION=/home/node/.n8n/logs/n8n.log
      #- N8N_LOG_FILE_MAXSIZE=50
      #- N8N_LOG_FILE_MAXCOUNT=60
    ports:
      - 5678:5678
    volumes:
      # *** General configuration ***
      - /var/run/docker.sock:/var/run/docker.sock:ro # Access to Docker on host machine
      # *** Volume configuration ***
      - ./example01-n8n-data/n8n:/home/node/.n8n
      - ./example01-n8n-data/other:/home/node/

volumes:
  example01-n8n-data:

networks:
  demo:
    name: demo
    driver: bridge

Para ver como lanzarlo, ver fichero README dentro del de la sección "basic".

Este ejemplo se puede lanzar individualmente desde Docker Compose o bien se ha montado una herramienta de gestión rápida sobre tecnología Makefile que ayudará en la gestión de la plataforma formativa de n8n.

Nota: Sobre la sección basic del repositorio se irán incorporando variaciones del ejemplo para dar diferentes ideas de desarrollo.. Por ejemplo: configuración de la herramienta con variables de entorno ad-hoc, configuración de la herramienta con variables de entorno desde un fichero, configuración de la herramienta desde el propio fichero de configuración, etc..

3.1. Scripts de Soporte

N/A

3.2. Investigar lo que se usa

Cuando uno crea un contenedor basado en una imagen, ya se han visto que consideraciones se deben tener para llegar a entender que es lo que hace.

Si tienes alguna duda vuelve a revisar el apartado "Soporte de Análisis de Contenedores" del artículo de introducción : Acelerando los desarrollos con contenedores: Introducción.

Ejemplo de ejecución para mostrar la información del proceso ejecutado tras realizar un "up"

Ejemplo de inspección sobre el contenedor creado

Ejemplo de investigación general dentro del contenedor (En este caso se uso una versión anterior de n8n)

Se podrán validar algunos de los aspectos configurados

3.3. Verificar resultados

Se accede a la URL del n8n con:

http://localhost:5678

La primera vez que arrancamos la aplicación se mostrará la siguiente pantalla.

Rellenamos los datos de acceso y pulsamos sobre el botón "Next".

Accederemos a la siguiente pantalla:

Se pueden rellenar o no los campos y pulsar sobre el botón "Get Started".

Estableciendo el correo para que se puede acceder a una licencia de uso (reducida)

4. Conclusiones

Con este artículo ya tenemos una primera versión de n8n con despliegue self-hosting para Docker en nuestro poder. Esto nos va a permitir tener un entorno local para pruebas y desarrollos propios que podremos llevar a entornos productivos cuando queramos.

Estaros muy atentos a los siguientes artículos donde seguiremos trabajando con esta herramienta e iremos añadiendo complejidad a la infraestructura para cubrir diferentes necesidades. comenzaremos nuestro camino en el maravilloso mundo de la automatización de flujos de trabajo y agentes IA.

Espero que os haya gustado y sobre todo que os sea de utilidad.

Autor

Víctor Madrid

Miembro de la Dirección Técnica en knm. Aprendiz de mucho y maestro de nada. Técnico, artista y polifacético a partes iguales ;-)