¡Hola! Estás a punto de tener tu propio n8n funcionando de forma segura en la nube. Este tutorial te guiará desde cero en tu servidor VPS Ubuntu de Hetzner hasta tener n8n accesible por un dominio seguro (HTTPS).
¿Qué necesitas antes de empezar?
- Acceso SSH a tu VPS: Conéctate a tu servidor (usualmente
ssh root@TU_IP_DEL_VPS
y tu contraseña). Todos los comandos se ejecutarán en esa terminal. - Un nombre de dominio: Debes tener un dominio registrado (ej.
tudominio.com
). - Acceso al panel DNS de tu dominio: Para configurar un subdominio (ej.
n8n.tudominio.com
) que apunte a la IP de tu VPS. - Permisos de
sudo
: Si no te conectas comoroot
, asegúrate de que tu usuario tenga estos permisos.
Paso 1: Preparar tu Servidor Ubuntu e Instalar Docker
Primero, pondremos a punto tu VPS e instalaremos Docker, la “cocina especial” donde funcionará n8n.
-
Actualizar y Limpiar el Sistema: Asegúrate de que tu VPS esté al día.
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
-
Instalar Docker: Este conjunto de comandos instala Docker Engine, Docker Compose y las dependencias necesarias.
sudo apt install ca-certificates curl gnupg lsb-release -y sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
-
Verificar Docker: Comprueba que Docker se instaló correctamente.
sudo docker run hello-world
Si ves un mensaje de “Hello from Docker!”, ¡vas por buen camino!
-
Configurar Docker para tu usuario (opcional): Si no usas el usuario
root
y quieres ejecutar comandosdocker
sinsudo
, añade tu usuario al grupodocker
.sudo usermod -aG docker tu_nombre_de_usuario
Importante: Si hiciste esto, cierra tu sesión SSH y vuelve a conectarte para que los cambios surtan efecto.
Paso 2: Configurar tu Dominio
Ahora, dile a tu dominio dónde encontrar tu VPS.
-
Crea un Registro DNS de tipo
A
: Accede al panel de gestión DNS de tu dominio (donde lo compraste).- Tipo:
A
- Nombre/Host/Subdominio:
n8n
(o el que quieras usar, ej.automatizacion
). - Valor/IP/Destino: La IP pública de tu VPS Hetzner.
- TTL: Por defecto (generalmente 600 segundos o 1 hora).
Ejemplo:
n8n.tudominio.com
apuntando aTU_IP_DEL_VPS
. - Tipo:
-
Espera la Propagación: Los cambios DNS pueden tardar unos minutos u horas en propagarse por internet. Puedes verificarlo en
https://www.whatsmydns.net/
.
Paso 3: Arrancar n8n con Docker (Puerto para Nginx)
Iniciaremos n8n en un contenedor Docker, mapeando su puerto interno al localhost
del VPS para que Nginx pueda acceder a él.
-
Crear el Volumen de Datos de n8n: Esto asegura que tus automatizaciones y configuraciones persistan.
docker volume create n8n_data
-
Ejecutar n8n en Docker: Este comando inicia n8n, exponiendo su puerto
5678
solo a la interfaz127.0.0.1
(localhost) de tu VPS.docker run -d --name n8n \ -p 127.0.0.1:5678:5678 \ -v n8n_data:/home/node/.n8n \ -e N8N_PUBLIC_URL=https://n8n.tudominio.com \ docker.n8n.io/n8nio/n8n
-
Verificar que n8n esté funcionando:
docker ps
Deberías ver
n8n
con un estadoUp
. -
Confirmar acceso interno (opcional, para depuración):
curl http://localhost:5678
Esto debería devolver una respuesta HTML (la página de n8n), confirmando que es accesible para Nginx.
Paso 4: Instalar y Configurar Nginx como Proxy Inverso
Nginx será el “portero” que reciba las visitas en tu dominio y las redirija a n8n de forma segura.
-
Instalar Nginx:
sudo apt install nginx -y
-
Configurar el Firewall (UFW): Abre solo los puertos necesarios (SSH, HTTP y HTTPS).
sudo ufw allow ssh sudo ufw allow 'Nginx Full' sudo ufw enable sudo ufw status
Confirma que el firewall esté activo y los puertos abiertos.
-
Crear Configuración de Nginx para n8n: Abre un nuevo archivo de configuración. ¡Recuerda reemplazar
n8n.tudominio.com
con tu subdominio real!sudo nano /etc/nginx/sites-available/n8n.conf
Pega el siguiente contenido:
server { listen 80; server_name n8n.tudominio.com; # ¡Reemplaza con tu subdominio! location / { proxy_pass http://localhost:5678; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 900s; proxy_send_timeout 900s; proxy_connect_timeout 900s; } }
Guarda (
Ctrl + O
, Enter) y sal (Ctrl + X
). -
Activar la Configuración de Nginx: Crea un enlace simbólico y prueba la configuración.
sudo ln -s /etc/nginx/sites-available/n8n.conf /etc/nginx/sites-enabled/ sudo nginx -t
Deberías ver
syntax is ok
ytest is successful
. -
Reiniciar Nginx:
sudo systemctl restart nginx
Paso 5: Asegurar n8n con SSL/HTTPS (Certbot)
Ahora obtendremos un certificado SSL gratuito de Let’s Encrypt para cifrar tu conexión.
-
Instalar Certbot:
sudo apt install certbot python3-certbot-nginx -y
-
Obtener e Instalar el Certificado SSL: Certbot configurará Nginx automáticamente para usar HTTPS. ¡Reemplaza
n8n.tudominio.com
con tu subdominio!sudo certbot --nginx -d n8n.tudominio.com
- Te pedirá tu email.
- Acepta los términos de servicio.
- Te preguntará si quieres redirigir todo el tráfico HTTP a HTTPS: elige
2
para redirigir.
-
Verificar Renovación Automática: Certbot configura automáticamente la renovación. Puedes probarla:
sudo certbot renew --dry-run
Si no hay errores, la renovación automática funcionará.
Configurar la Variable N8N_PUBLIC_URL
Para que n8n genere las URLs de callback y otras URLs públicas correctamente, debes especificar la dirección completa y segura donde es accesible.
-
Detén el contenedor de n8n actual:
docker stop n8n
-
Elimina el contenedor de n8n actual:
docker rm n8n
-
Inicia n8n de nuevo, añadiendo la variable de entorno
N8N_PUBLIC_URL
: ¡Importante! Reemplazahttps://n8n.tudominio.com
con tu subdominio real (el que configuraste con Nginx y SSL).docker run -d --name n8n \ -p 127.0.0.1:5678:5678 \ -v n8n_data:/home/node/.n8n \ -e N8N_EDITOR_BASE_URL=https://n8n.tudominio.com/ \ -e WEBHOOK_URL=https://n8n.tudominio.com/ \ docker.n8n.io/n8nio/n8n
-
Verifica que n8n esté corriendo nuevamente:
docker ps
-
Verifica la configuración (opcional): Puedes entrar al contenedor para verificar que la variable de entorno se haya aplicado:
docker exec n8n env | grep N8N_PUBLIC_URL
Deberías ver la URL que configuraste.
¡Paso Final: Accede a tu n8n Seguro!
- Configuración inicial de n8n: La primera vez que accedas, n8n te pedirá crear una cuenta de administrador. ¡Guarda bien esas credenciales!
- Actualizar n8n: Para actualizar en el futuro, detén el contenedor (
docker stop n8n
), elimina el contenedor y la imagen antigua (docker rm n8n
ydocker rmi docker.n8n.io/n8nio/n8n
), descarga la nueva imagen (docker pull docker.n8n.io/n8nio/n8n
) y vuelve a arrancar n8n con el mismo comando del Paso 3. - Backup: Considera implementar una estrategia de backup para tu volumen
n8n_data
.