Instalar n8n en un VPS Ubuntu con Docker Compose y HTTPS
Esta guía monta n8n en un servidor Linux con HTTPS automático usando el ejemplo de la documentación oficial: Docker Compose con Traefik como proxy inverso. Necesitas un dominio propio y un VPS con una IP pública. Si todavía no tienes servidor, lee antes qué plan de Hostinger elegir o la comparativa de hosting.
Aviso de honestidad: no hemos ejecutado este despliegue en un servidor propio. Copiamos la estructura de la documentación oficial (consultada el 2026-11-05) y no añadimos variables que no aparezcan en ella. La documentación habla de una distribución Linux en general; nosotros solo asumimos Ubuntu por ser habitual.
1. Instalar Docker y Docker Compose
Sigue las instrucciones oficiales de Docker para tu distribución y verifica:
docker --version
docker compose version
Opcional, para usar Docker sin sudo (según la documentación):
sudo usermod -aG docker ${USER}
exec sg docker newgrp
groups
2. Configurar el DNS
En el panel de tu dominio crea un registro A con el nombre de tu subdominio (por ejemplo n8n) y como destino la IP del servidor. Sin esto el certificado HTTPS no se podrá emitir.
3. Carpeta del proyecto y archivo .env
mkdir n8n-compose
cd n8n-compose
mkdir local-files
Crear local-files tú mismo asegura propietario y permisos correctos, según la documentación. Después crea el archivo .env con tus valores:
DOMAIN_NAME=example.com
SUBDOMAIN=n8n
GENERIC_TIMEZONE=Europe/Madrid
SSL_EMAIL=tu-correo@example.com
DOMAIN_NAME: tu dominio principal.SUBDOMAIN: el subdominio donde vivirá n8n.GENERIC_TIMEZONE: zona horaria para los nodos programados. Si no se define, la documentación indica que el valor por defecto es Nueva York.SSL_EMAIL: correo usado para crear el certificado TLS/SSL.
4. El archivo compose.yaml
Define dos servicios: Traefik (certificados, redirección de HTTP a HTTPS y enrutado, escuchando en los puertos 80 y 443) y n8n (enlazado a 127.0.0.1:5678 y publicado a través de Traefik):
services:
traefik:
image: "traefik"
restart: always
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
- "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}"
- "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- traefik_data:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
n8n:
image: n8nio/n8n
restart: always
ports:
- "127.0.0.1:5678:5678"
labels:
- traefik.enable=true
- traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
- traefik.http.routers.n8n.tls=true
- traefik.http.routers.n8n.entrypoints=web,websecure
- traefik.http.routers.n8n.tls.certresolver=mytlschallenge
- traefik.http.middlewares.n8n.headers.SSLRedirect=true
- traefik.http.middlewares.n8n.headers.STSSeconds=315360000
- traefik.http.middlewares.n8n.headers.browserXSSFilter=true
- traefik.http.middlewares.n8n.headers.contentTypeNosniff=true
- traefik.http.middlewares.n8n.headers.forceSTSHeader=true
- traefik.http.middlewares.n8n.headers.SSLHost=${DOMAIN_NAME}
- traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true
- traefik.http.middlewares.n8n.headers.STSPreload=true
- traefik.http.routers.n8n.middlewares=n8n@docker
environment:
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- N8N_WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
- N8N_RESTRICT_FILE_ACCESS_TO=/files
volumes:
- n8n_data:/home/node/.n8n
- ./local-files:/files
volumes:
n8n_data:
traefik_data:
Nota de la documentación: N8N_WEBHOOK_URL requiere n8n 2.30.0 o superior; en versiones anteriores se usa WEBHOOK_URL.
5. Arrancar y parar
sudo docker compose up -d
sudo docker compose stop
Abre https://n8n.example.com (con tu subdominio y dominio). La documentación indica que n8n solo es accesible por HTTPS. Si no conecta, revisa el cortafuegos del servidor y el DNS.
6. Actualizar
La página de Docker Compose no describe la actualización, pero la de instalación con Docker sí incluye este procedimiento para Compose:
cd </ruta/a/tu/carpeta/compose>
docker compose pull
docker compose down
docker compose up -d
La documentación menciona que n8n publica una versión menor casi cada semana y recomienda la versión stable para producción.
7. Qué respaldar
La documentación no da comandos de copia, pero identifica qué contiene cada elemento:
- Volumen
n8n_data: base de datos SQLite y clave de cifrado. - Volumen
traefik_data: datos de los certificados TLS. - Carpeta
./local-files: archivos compartidos con n8n.
Te recomendamos copiar los tres antes de actualizar. El método concreto depende de tu servidor y de tu proveedor, y no lo hemos probado.
Qué elegir si...
- Quieres lo más simple y gestionado: n8n Cloud evita todo este trabajo.
- Quieres controlar tu servidor y aprender: esta vía es adecuada, pero asumes seguridad, actualizaciones y copias.
- Solo vas a probar en tu ordenador: usa la guía de Docker simple.
- Trabajas en Windows: mira la guía de Windows.
- Quieres los archivos listos: docker-compose comentado, checklist de producción y tabla de alojamiento.
Elige tu camino (sin compromiso)
Control total; instalas, actualizas y respaldas tú. Sigue la guía de Docker Compose con HTTPS y descarga los archivos listos.
Ver VPS de Contabo (sitio oficial)enlace de afiliado
Ver planes VPS en Hostinger (sitio oficial)enlace de afiliado
Lo gestiona n8n; pagas por plan y ejecuciones. Hay prueba gratuita sin tarjeta según su página de precios.
Probar n8n Cloud (sitio oficial)enlace de afiliado
Antes de decidir: tabla para decidir dónde alojar n8n.
Preguntas frecuentes
¿Por qué no se emite el certificado HTTPS?
Lo más habitual es que el registro DNS tipo A aún no apunte a la IP del servidor, o que los puertos 80 y 443 estén bloqueados por un cortafuegos. La documentación pide revisar precisamente el cortafuegos y el DNS si no puedes conectar.
¿Puedo usar otro proxy distinto de Traefik?
Técnicamente sí, pero esta guía solo reproduce el ejemplo oficial con Traefik y no hemos verificado otras configuraciones, así que no damos pasos para ellas.
¿Qué pasa si mi n8n es anterior a la versión 2.30.0?
La documentación indica que N8N_WEBHOOK_URL requiere la 2.30.0 o superior y que en versiones anteriores se usa WEBHOOK_URL. Si usas la etiqueta por defecto de la imagen, normalmente descargarás la versión actual.
Fuentes
- n8n docs: Docker Compose server setup (consultado el 2026-11-05)
- n8n docs: Docker installation (consultado el 2026-11-05)