Guía de Configuración AWS con Docker, Nginx y Certificado SSL para n8n
Esta guía te ayudará a configurar una instancia EC2 de AWS con Docker, Nginx como proxy reverso, y un certificado SSL para ejecutar n8n de forma segura.
Paso 1: Conectar a la Instancia EC2 de AWS via SSH
Utiliza tu clave privada para conectarte a tu instancia EC2:
ssh -i tuarchivo.pem ec2-user@ip-publica
Nota: Reemplaza tuarchivo.pem con el nombre de tu archivo de clave privada y ip-publica con la dirección IP pública de tu instancia.
Paso 2: Actualizar el Sistema e Instalar Docker
Actualiza todos los paquetes del sistema e instala Docker:
sudo yum update -y
sudo yum install -y docker
Este comando actualiza el sistema operativo y descarga Docker desde los repositorios oficiales de Amazon Linux.
Paso 3: Iniciar y Habilitar el Servicio Docker
Inicia Docker y configúralo para que se ejecute automáticamente al arrancar el sistema:
sudo systemctl start docker
sudo systemctl enable docker
El primer comando inicia el servicio Docker inmediatamente, mientras que el segundo asegura que Docker se inicie automáticamente cada vez que reinicies la instancia.
Paso 4: Agregar Usuario al Grupo Docker
Permite que tu usuario ejecute comandos Docker sin necesidad de usar sudo:
sudo usermod -aG docker ec2-user
Este comando agrega tu usuario al grupo docker, lo que te permitirá ejecutar comandos Docker sin permisos de administrador.
Paso 5: Salir de la Sesión SSH
Cierra la sesión actual para que los cambios de grupo tomen efecto:
exit
Es necesario cerrar y volver a abrir la sesión para que el sistema reconozca que tu usuario ahora pertenece al grupo Docker.
Paso 6: Reconectar a la Instancia EC2
Vuelve a conectarte a tu instancia para continuar con la configuración:
ssh -i tuarchivo.pem ec2-user@ip-publica
Recuerda: Usar tuarchivo.pem y ip-publica con tus valores reales.
Paso 7: Instalar Docker Compose
Descarga e instala Docker Compose, una herramienta para definir y ejecutar aplicaciones Docker multi-contenedor:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
El primer comando descarga la última versión de Docker Compose, y el segundo le otorga permisos de ejecución.
Paso 8: Ejecutar el Contenedor Docker de N8N
Lanza n8n en un contenedor Docker con la configuración necesaria:
sudo docker run -d --restart unless-stopped -it \
--name n8n \
-p 5678:5678 \
-e N8N_HOST="tu-nombre-de-dominio" \
-e WEBHOOK_TUNNEL_URL="https://tu-nombre-de-dominio/" \
-e WEBHOOK_URL="https://tu-nombre-de-dominio/" \
-v ~/.n8n:/root/.n8n \
n8nio/n8n
Parámetros explicados:
-d
: Ejecuta el contenedor en segundo plano--restart unless-stopped
: Reinicia automáticamente el contenedor si se detiene-p 5678:5678
: Mapea el puerto 5678 del contenedor al puerto 5678 del host-e
: Define variables de entorno para n8n-v
: Monta un volumen para persistir los datos de n8n
Importante: Reemplaza tu-nombre-de-dominio con tu dominio real.
Paso 9: Instalar y Configurar Nginx
Instala Nginx y configúralo como servidor web y proxy reverso:
sudo dnf install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
Nginx actuará como proxy reverso, redirigiendo las peticiones HTTP/HTTPS hacia tu aplicación n8n que corre en el puerto 5678.
Paso 10: Configurar Nginx como Proxy Reverso para N8N
Crea un archivo de configuración específico para n8n:
sudo nano /etc/nginx/conf.d/n8n.conf
Agrega el siguiente contenido en el archivo n8n.conf
:
server {
listen 80;
server_name tu-nombre-de-dominio;
location / {
proxy_pass http://localhost:5678;
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
# Headers para soporte de WebSocket
proxy_set_header Connection 'Upgrade';
proxy_set_header Upgrade $http_upgrade;
# Headers adicionales para reenviar información del cliente
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;
}
}
Para guardar y salir del editor nano:
CTRL+O, ENTER, CTRL+X
Importante: Reemplaza tu-nombre-de-dominio con tu dominio real.
Paso 11: Verificar y Reiniciar Nginx
Verifica que la configuración de Nginx sea correcta y reinicia el servicio:
sudo nginx -t
sudo systemctl restart nginx
El primer comando verifica la sintaxis de la configuración. Si no hay errores, el segundo comando reinicia Nginx con la nueva configuración.
Paso 12: Configurar Certificado SSL con Certbot
Sección A: Instalación de Certbot
Instala Certbot y el plugin para Nginx que te permitirá obtener certificados SSL gratuitos de Let's Encrypt:
sudo dnf install -y certbot python3-certbot-nginx
Certbot es una herramienta automática que simplifica el proceso de obtención y renovación de certificados SSL.
Sección B: Obtener y Configurar el Certificado SSL
Ejecuta Certbot para obtener automáticamente el certificado SSL y configurar Nginx:
sudo certbot --nginx -d tu-nombre-de-dominio
Durante este proceso:
- Certbot verificará que tu dominio apunte a tu servidor
- Obtendrá un certificado SSL válido de Let's Encrypt
- Modificará automáticamente tu configuración de Nginx para usar HTTPS
- Configurará la redirección automática de HTTP a HTTPS
Importante: Reemplaza tu-nombre-de-dominio con tu dominio real.
Sección C: Finalizar y Verificar la Configuración
Reinicia Nginx para asegurar que todos los cambios se apliquen correctamente:
sudo systemctl restart nginx
Verificaciones finales:
- Accede a tu dominio usando HTTPS (https://tu-nombre-de-dominio) - donde tu-nombre-de-dominio es tu dominio real
- Verifica que el certificado SSL esté funcionando correctamente
- Confirma que n8n esté accesible y funcionando
Configuración de renovación automática:
Certbot configura automáticamente la renovación de certificados. Puedes verificar que funcione con:
sudo certbot renew --dry-run
¡Felicidades! Ahora tienes n8n ejecutándose de forma segura en tu instancia AWS EC2 con un certificado SSL válido.
Resumen de valores que debes personalizar:
- tuarchivo.pem - Tu archivo de clave privada de AWS
- ip-publica - La IP pública de tu instancia EC2
- tu-nombre-de-dominio - Tu dominio real (ej: miapp.com)