¿Alguna vez intentaste levantar n8n con docker en tu máquina local? Seguramente te salieron muchos errores, y al final, te diste por vencido, ¿verdad?
Tranquilo, preparé este post para darte el paso a paso para levantar tu n8n con docker en local y no mueras en el intento. Levantaremos n8n con postgres
Para esto, necesitarás lo siguiente:
- Docker y docker composer dependiendo de tu sistema operativo. Si es linux, usa esta referencia y usa Docker Desktop si trabajas con windows.
- Ngrok
Manos a la obra
En una carpeta crea dos archivos
- .env: Este archivo tendrá datos de conexión y datos sensibles
- docker-compose.yml: Este archivo tendrá toda la configuración lista para levantar n8n y todos sus juguetes.
Antes de levantar n8n, necesitas hacer un tunnel para que tu ip local sea visible al mundo, además esta ip debe tener https. Tranquilo, para esto usaremos ngrok.
Descarga esta aplicación según su sistema operativo.
Luego de esto, ejecuta el comando, como te indica en la página de ngrok
ngrok config add-authtoken TU-TOKEN-AQUI
Luego de esto, ejecuta:
ngrok http localhost:5678
Este comando, generará una salida similar a la siguiente pantalla:
Copia esta dirección y debes pegarla en el archivo .env en las variables N8N_HOST y WEBHOOK_TUNNEL_URL.
Te dejo el contenido de estos dos archivos:
Archivo .env
DB_POSTGRES_USER=admin DB_POSTGRES_PASSWORD=admin DB_POSTGRES_DB=n8n_db DB_POSTGRES_PORT=5432 TIMEZONE=America/Guayaquil N8N_ENCRYPTION_KEY=blUE1nF0S2Hj6AW48FCyootJldZQJO5535sKKxHewJwX5TIdUDpWcu7oiIotukho N8N_HOST=TU-DIRECCCION-DE-NGROK WEBHOOK_TUNNEL_URL=TU-DIRECCCION-DE-NGROK
Si deseas, puedes crear otro valor para la variable N8N_ENCRYPTION_KEY desde la página random Keygen
Arhivo docker-compose.yml
services: n8n: image: n8nio/n8n restart: always ports: - "5678:5678" environment: - GENERIC_TIMEZONE=${TIMEZONE} - TZ=${TIMEZONE} - NODE_ENV=production - DB_TYPE=postgresdb - DB_POSTGRESDB_HOST=postgres - DB_POSTGRESDB_PORT=${DB_POSTGRES_PORT} - DB_POSTGRESDB_DATABASE=${DB_POSTGRES_DB} - DB_POSTGRESDB_USER=${DB_POSTGRES_USER} - DB_POSTGRESDB_PASSWORD=${DB_POSTGRES_PASSWORD} - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} - N8N_BLOCK_ENV_ACCESS_IN_NODE=true - N8N_RUNNERS_ENABLED=true - N8N_HOST=${N8N_HOST} - WEBHOOK_URL=https://${WEBHOOK_TUNNEL_URL}/ volumes: - ./n8n-data:/home/node/.n8n depends_on: - postgres postgres: image: postgres:16 container_name: postgres restart: always environment: - POSTGRES_USER=${DB_POSTGRES_USER} - POSTGRES_PASSWORD=${DB_POSTGRES_PASSWORD} - POSTGRES_DB=${DB_POSTGRES_DB} volumes: - ./postgres-data:/var/lib/postgresql/data ports: - "${DB_POSTGRES_PORT}:5432" volumes: postgres-data: n8n-data:
Levantando los contenedores
Una vez configurados estos archivos, estamos listos para levantar nuestros contenedores con n8n y postgres.
Ejecuta el siguiente comando; de acuerdo a tu versión del docker compose, puedes ejecutar cualquiera de los dos comandos:
docker compose up docker-compose up
Si en la consola ves un error como:
Error: EACCES: permission denied, open '/home/node/.n8n/config'
Ejecuta:
sudo chown -R 1000:1000 n8n-data/
Si también en la consola se genera el siguiente mensaje:
Permissions 0644 for n8n settings file /home/node/.n8n/config are too wide.
Ejecutar:
sudo chmod 600 n8n-data/config
Luego de realizar estos pasos, puedes bajar los contenedores y volver a levantarlos:
docker compose down -v docker compose up
Al final, deberás ver en la terminal el mensaje de que tu aplicación se está ejecutando con la dirección de ngrok que configuraste.
Ahora, ya puedes acceder desde tu navegador con la siguiente dirección
https://072299e01960.ngrok-free.app
Con estas configuraciones, tienes n8n completamente funcional corriendo en tu equipo local con base de datos postgres.
Recuerda: Ngrok te dará un tiempo limitado, con lo cual deberás volver a general la url de tunnel. De igual forma, si apagas tu equipo y quieres volver a levantar n8n, deberás generar la url ejecutando el comando de ngrok y reemplazar esta url en las variables N8N_HOST y WEBHOOK_TUNNEL_URL del archivo .env.
ngrok http localhost:5678
Luego de copiar este valor y reemplazar en las variables antes indicadas, vuelve a generar los contenedores. Tranquilo, tus datos y tus Flujos no se perderán.
docker compose down docker compose up
Hora de probar y crear tus automatizaciones!!!
Buena suerte.