Curso de Automatizaciones con n8n

Toma las primeras clases gratis

Razón de este documento: si se te venció el trial de n8n Cloud (14 días) y no querés suscribirte, podés correr n8n self-hosted en tu máquina gratis usando Docker. Además, vas a poder integrar Google (Gmail/Drive/Sheets) y Slack usando OAuth2, incluso cuando localhost no sea accesible desde afuera, usando un túnel como ngrok.

1) Qué vas a lograr

  • Levantar n8n local con Docker + PostgreSQL (persistente).
  • Acceder al editor n8n desde tu PC.
  • Conectar Google (Gmail/Drive/Sheets) con OAuth2.
  • Hacer que Slack/Google puedan llamar webhooks de n8n usando una URL pública HTTPS (ngrok).

2) Arquitectura (visión general)

3) Requisitos

  • Docker + Docker Compose
  • PostgreSQL via Docker (incluido en el compose)
  • ngrok (o alternativa similar) para exponer HTTPS público
  • Proyecto en Google Cloud para OAuth2
  • (Opcional) Slack App si vas a usar Events/Triggers

Privacidad: en este doc no incluyas secretos reales. Usá placeholders: YOUR_CLIENT_ID, YOUR_CLIENT_SECRET, YOUR_NGROK_TOKEN, etc.

4) Levantar n8n + PostgreSQL con Docker Compose

Creá un docker-compose.yml:

services:
  postgres:
    image: postgres:16
    restart: unless-stopped
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=YOUR_POSTGRES_PASSWORD
      - POSTGRES_DB=n8n
    volumes:
      - pg_data:/var/lib/postgresql/data

  n8n:
    image: n8nio/n8n:2.1.5
    restart: unless-stopped
    depends_on:
      - postgres
    ports:
      - "5678:5678"
    environment:
      # ---------- Seguridad mínima ----------
      - N8N_ENCRYPTION_KEY=YOUR_LONG_RANDOM_ENCRYPTION_KEY
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=YOUR_STRONG_PASSWORD

      # ---------- Base de datos (Postgres) ----------
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=YOUR_POSTGRES_PASSWORD

      # ---------- Zona horaria (opcional) ----------
      - GENERIC_TIMEZONE=America/Chicago
      - TZ=America/Chicago

      # ---------- URL pública para OAuth/Webhooks (se completa con ngrok) ----------
      # Ejemplo: https://abc123.ngrok-free.app
      - N8N_PROTOCOL=https
      - N8N_HOST=YOUR_PUBLIC_HOSTNAME_WITHOUT_HTTPS
      - N8N_PORT=5678
      - N8N_EDITOR_BASE_URL=YOUR_PUBLIC_HTTPS_URL
      - WEBHOOK_URL=YOUR_PUBLIC_HTTPS_URL

    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:
  pg_data:

Levantar servicios

docker compose up -d

Nota: no abras n8n por localhost si vas a configurar OAuth/Webhooks con URL pública. Abrilo por la URL pública (ngrok) para evitar mismatch.

5) Exponer n8n con ngrok (HTTPS público)

5.1 Autenticar ngrok

ngrok config add-authtoken YOUR_NGROK_TOKEN

5.2 Levantar el túnel al puerto 5678

ngrok http 5678

ngrok va a mostrar una URL tipo:

5.3 Completar variables del compose

Con esa URL:

Luego reiniciá n8n:

docker compose up -d

Accedé al editor:

6) OAuth2 con Google (Gmail / Drive / Sheets) usando la URL pública

6.1 Habilitar APIs en Google Cloud

En tu proyecto habilitá:

  • Google Sheets API
  • Google Drive API
  • Gmail API

Esto evita el error: “API has not been used… or it is disabled”.

6.2 OAuth Consent Screen

  • Tipo: External
  • Si está en Testing, agregate como “Test user”
  • Pedí scopes mínimos primero (después expandís)

6.3 Crear OAuth Client ID (Web application)

  • Credentials → Create Credentials → OAuth client ID
  • Application type: Web application
  • Authorized redirect URI:
https://abc123.ngrok-free.app/rest/oauth2-credential/callback

Guardá:

  • Client ID
  • Client Secret

7) Crear credenciales Google en n8n

En n8n:

  1. CredentialsNew
  2. Elegí:
    • Google Sheets OAuth2
    • Google Drive OAuth2
    • Gmail OAuth2
  3. Pegá Client ID y Client Secret
  4. Click Sign in with Google
  5. Aceptá permisos

8) Slack (cuando necesitás URL pública sí o sí)

Slack no puede llamar localhost, por eso ngrok es clave.

En Slac App (Events / Interactivity / Slash commands) vas a poner como Request URL el webhook que te da n8n (que empieza con tu dominio ngrok).

9) Errores típicos y fixes rápidos

invalid_client / Unauthorized

Casi siempre:

  • Client ID/Secret incorrectos
  • OAuth Client no es “Web application”
  • Redirect URI no coincide exacto

✅ Verificá que el redirect sea: https://<ngrok>/rest/oauth2-credential/callback

“Sheets API has not been used…”

✅ Habilitar la API puntual (Sheets/Drive) en Google Cloud.

redirect_uri_mismatch

✅ Estás entrando a n8n desde otra URL (por ejemplo localhost) pero Google espera ngrok. Solución: entrar siempre por la misma URL que registraste en Google.

12) Resultado

Con este setup podés:

  • Correr n8n gratis en tu máquina con persistencia en Postgres
  • Integrar Google/Slack vía OAuth2
  • Usar webhooks externos sin suscripción cloud

13) Versión utilizada: 2.1.5 y motivo de no usar latest

En este documento se utilizó la siguiente imagen:

image: docker.n8n.io/n8nio/n8n:2.1.5

¿Por qué no se utilizó latest?

Durante la creación de este documento, al intentar descargar la imagen n8nio/n8n:latest, se producían errores durante la descarga/extracción del paquete Docker.

El proceso quedaba detenido o fallaba en una capa similar a:

22b37da5853a: Extracting [==================================================>] 1.882kB/1.882kB

Esto indicaba un problema en la descarga o extracción de una capa de la imagen, lo que impedía completar correctamente el pull del contenedor.

Motivo técnico de usar una versión fija

Se decidió utilizar la versión:

2.1.5

por los siguientes motivos:

Estabilidad comprobada

La versión 2.1.5 descargó correctamente y permitió levantar el entorno sin inconvenientes.

Curso de Automatizaciones con n8n

Toma las primeras clases gratis

0 Comentarios

para escribir tu comentario

Artículos relacionados