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
localhostno 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
localhostsi 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:
YOUR_PUBLIC_HTTPS_URL =https://abc123.ngrok-free.appYOUR_PUBLIC_HOSTNAME_WITHOUT_HTTPS = abc123.ngrok-free.app
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 IDClient Secret
7) Crear credenciales Google en n8n
En n8n:
- Credentials → New
- Elegí:
- Google Sheets OAuth2
- Google Drive OAuth2
- Gmail OAuth2
- Pegá
Client IDyClient Secret - Click Sign in with Google
- 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
COMPARTE ESTE ARTÍCULO Y MUESTRA LO QUE APRENDISTE




