Instalar y exponer n8n en Debian 13 con Docker y ngrok (Guía paso a paso 2026)
Tabla de contenidos
🧹 Parte 0 — Limpiar lo del tutorial anterior (Debian 13)
En el PC del alumno:
# Parar contenedores antiguos
docker compose down || true
docker stop $(docker ps -aq) 2>/dev/null || true
# Borrar imágenes viejas relacionadas
docker image prune -f
# (Opcional) Borrar carpeta antigua del proyecto
rm -rf ~/docker/n8n-debian
Si tenían n8n instalado “a mano” con npm en el sistema:
sudo npm uninstall -g n8n || true
Comprobar que no hay n8n en el sistema:
which n8n || echo "OK, no hay n8n en el sistema"
📁 Parte 1 — Crear proyecto nuevo
mkdir -p ~/docker/n8n-debian
cd ~/docker/n8n-debian
mkdir n8n-data
Dar permisos correctos:
sudo chown -R 1000:1000 n8n-data
🐳 Parte 2 — Dockerfile (Node 22, compatible 2026)
Crear archivo Dockerfile:
FROM debian:12
RUN apt-get update && apt-get install -y \
curl gnupg ca-certificates \
python3 libreoffice \
&& rm -rf /var/lib/apt/lists/*
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
apt-get install -y nodejs && \
npm install -g n8n
ENV TZ=Europe/Madrid
RUN useradd -m -u 1000 -s /bin/bash node && \
mkdir -p /home/node/.n8n && chown -R 1000:1000 /home/node
USER 1000:1000
WORKDIR /home/node
CMD ["n8n", "start"]
📦 Parte 3 — docker-compose.yml
Crear docker-compose.yml:
services:
n8n:
build: .
ports:
- "5678:5678"
environment:
- GENERIC_TIMEZONE=Europe/Madrid
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=admin123
- WEBHOOK_URL=${WEBHOOK_URL}
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
volumes:
- ./n8n-data:/home/node/.n8n
🌐 Parte 4 — Script start.sh (ngrok + n8n)
Crear start.sh:
#!/bin/bash
set -e
echo "🔁 Deteniendo cualquier sesión activa de ngrok..."
pkill ngrok 2>/dev/null || true
echo "🚀 Iniciando ngrok..."
ngrok http http://localhost:5678 > /dev/null &
echo "⏳ Esperando a que ngrok esté listo..."
for i in {1..10}; do
NGROK_URL=$(curl -s http://localhost:4040/api/tunnels | grep -o '"public_url":"https://[^"]*' | cut -d'"' -f4)
if [[ $NGROK_URL == https://* ]]; then
break
fi
sleep 1
done
if [[ -z "$NGROK_URL" ]]; then
echo "❌ No se ha podido obtener la URL de ngrok."
exit 1
fi
echo "✅ Ngrok está activo en: $NGROK_URL"
echo "WEBHOOK_URL=$NGROK_URL" > .env
docker compose up
Dar permisos:
chmod +x start.sh
▶️ Parte 5 — Arranque
docker compose build --no-cache
./start.sh
Abrir en el navegador:
http://localhost:5678
Usuario: admin
Password: admin123
🎯 Qué aprenden los alumnos en este tutorial
- Limpiar instalaciones rotas del sistema
- Usar n8n solo con Docker (forma profesional)
- Entender volúmenes y permisos en Linux
- Automatizar ngrok + Docker con un script
- Ver qué es
WEBHOOK_URLy para qué sirve