Automatiza tu día a día con n8n y Docker

En nuestro día a día, estamos constantemente repitiendo tareas que podrían automatizarse: enviar emails, recopilar datos, procesar información de APIs… Ahí es donde entra n8n, una herramienta de automatización de flujos de trabajo que nos permite conectar aplicaciones y servicios de forma visual y flexible, sin necesidad de programar todo desde cero.

Logo de n8n

¿Qué es n8n y para qué nos puede servir?

n8n es un orquestador de automatizaciones de código abierto. Con él puedes crear “workflows” que conectan servicios entre sí: desde Slack, Gmail, Google Sheets, hasta APIs propias. Cada paso del flujo puede transformarse, filtrarse o activarse en base a condiciones.

Además, n8n se adapta perfectamente a los nuevos retos de la automatización, incluyendo la integración con herramientas de inteligencia artificial (quizás eso lo veamos más adelante) Por ejemplo, podemos combinar con modelos de IA como Ollama, para analizar textos, generar resúmenes, clasificar información o incluso crear contenido automatizado. Esto abre un abanico enorme de posibilidades para equipos de marketing, soporte o desarrollo.

Desplegando n8n con Docker

Para simplificar su despliegue, podemos usar Docker y Docker Compose. Esto nos permite tenerlo corriendo en cualquier servidor de manera consistente y fácil de mantener.

Es importante saber que, quizás si despliegas en una RaspberryPi o un servidor u otro dispositivo, tendrás que cambiar la «versión», si fuese necesario, o la imagen a utilizar.

En los ejemplos os he puesto la más habitual, pero, en mi caso, como tengo un cacharro bastante antiguo, he tenido que utilizar la imagen: crazymax/n8n:latest , si usamos esta imagen, el volumen se tiene que cambiar por: «– ./n8n-data:/data/.n8n«

Aquí tienes un ejemplo de docker-compose.yml:

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=contraseña
      - N8N_HOST=localhost
      - N8N_PORT=5678
      - GENERIC_TIMEZONE=Europe/Madrid
      - NODE_ENV=production
    volumes:
      - ./n8n-data:/home/node/.n8n

Ahora simplemente, ejecutamos:

docker-compose up -d

De esta manera ya tendremos n8n disponible en http://localhost:5678 con una autenticación básica.

Pero ojo, de esta manera, si no especificamos una conexión o un motor de base datos,, usará para la aplicación un sqlite, por lo que ahora veremos una opción más robusta.

Desplegar n8n con PostgreSQL

Si es para nuestro personal con el ejemplo de antes ya tendríamos más que suficiente, pero, si queremos algo más robusto, que podamos utilizar con retención de datos, registros, etcétera, lo ideal es utilizar como base de datos PostgreSQL

Además de esta manera tendremos:

  • Cuando necesitamos persistencia robusta: los workflows, ejecuciones e historiales se guardan en una base de datos relacional en vez de ficheros locales.
  • Si planeamos usarlo en producción, para equipos o integraciones críticas.
  • Cuando queremos escalar n8n en múltiples contenedores/nodos, ya que todos los nodos deben acceder a la misma base de datos para compartir estados.

Aquí os dejo un ejemplo:

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=n8ncontraseña
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=contraseña
      - N8N_HOST=localhost
      - N8N_PORT=5678
      - GENERIC_TIMEZONE=Europe/Madrid
      - NODE_ENV=production
    volumes:
      - ./n8n-data:/home/node/.n8n
    depends_on:
      - postgres

  postgres:
    image: postgres:14
    restart: unless-stopped
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=n8ncontraseña
      - POSTGRES_DB=n8n
    volumes:
      - ./postgres-data:/var/lib/postgresql/data

También, si ya tenemos un servidor PostgreSQL donde guardar los datos, la parte del contenedor postgres no nos haría falta.

Vista de n8n, recién instalado, un lienzo en blanco, sin duda

Algunos ejemplo de uso

Tal y como he comentado al principio, nos puede servir para un montón de cosas, como:

  • Automatización de emails: Recoger datos de un formulario web y enviar un email con los resultados automáticamente.
  • Integración con IA: Usar un trigger de n8n para enviar textos a Ollama y recibir un resumen o análisis, que luego se envía a Slack o se almacena en una hoja de cálculo.
  • Procesamiento de datos: Cada vez que se actualiza un archivo en Google Drive, n8n puede leerlo, filtrarlo y enviar alertas si cumple ciertas condiciones.

n8n nos ofrece una interfaz visual que hace que montar estos flujos sea tan sencillo como arrastrar y soltar nodos. Y lo mejor: podemos escalarlo y combinarlo con cualquier servicio que tenga API.

Por ejemplo, podemos crear un «workflow» que utiliza una API, por ejemplo esta de Chuck Norris: https://api.chucknorris.io/, que nos genere un chiste diario y nos lo mande por correo.

Muestra del Workflow que he creado que hace que Chuck Norris me mande chistes 🙂

Y sí, me llegan XD

El chiste del día… en inglés .

¿Lo has probado alguna vez? ¿Quieres saber como he creado el envío de chistes de temática Chuck Norris? Deja un comentario! 🙂

Para saber más: n8n.io