Despliegue Rápido: Configuración de Docker Compose y Nginx en AWS EC2
Desplegar servidores web en la nube puede parecer complejo al inicio, pero combinando la infraestructura ágil de AWS EC2 con la portabilidad de Docker, podemos levantar un entorno web de producción en cuestión de minutos.

A continuación, te muestro la guía paso a paso para lograr un despliegue limpio y funcional.
Paso 1: Configurar las Reglas de Entrada (Security Group)
Antes de conectarte, necesitas asegurarte de que AWS permita el tráfico de red hacia tu servidor. Por defecto, AWS bloquea todo excepto lo que tú autorices de forma explícita.
- Entra a tu consola de AWS y ve al servicio EC2.
- En el menú de la izquierda, haz clic en Instances (Instancias) y selecciona la tuya.
- En la parte inferior, ve a la pestaña Security (Seguridad) y haz clic en el nombre de tu Security Group.
- Haz clic en el botón Edit inbound rules (Editar reglas de entrada).
- Asegúrate de tener estas dos reglas configuradas (si no están, haz clic en Add rule):
| Tipo | Puerto | Origen (Source) | Descripción |
|---|---|---|---|
| SSH | 22 | My IP (Solo tu IP actual por seguridad) o 0.0.0.0/0 (Cualquier IP) |
Acceso seguro a la consola |
| HTTP | 80 | 0.0.0.0/0 (Cualquier lugar) |
Tráfico web público |
- Haz clic en Save rules (Guardar reglas).
Paso 2: Conectarte a tu Instancia por SSH
Necesitas abrir la terminal de tu máquina local para conectarte de forma remota a la máquina virtual en la nube.
- Abre tu terminal local (Git Bash, WSL o PowerShell en Windows; la terminal nativa en macOS/Linux).
- Ve a la carpeta donde descargaste tu archivo de llave privada (el archivo
.pemque obtuviste al crear la instancia EC2):cd ~/Downloads - (Paso crítico para macOS/Linux): Dale los permisos de lectura correctos a tu llave para que el cliente de SSH no la rechace por ser “demasiado abierta”:
chmod 400 tu-llave.pem - Conéctate usando el usuario por defecto de Ubuntu (
ubuntu) y la dirección IP pública de tu instancia (la encuentras en los detalles de tu EC2 en la consola de AWS):ssh -i "tu-llave.pem" ubuntu@TU_IP_PUBLICA_EC2 - Si te pregunta si confías en el host escribiendo
yes/no, escribeyesy presiona Enter. ¡Listo! Ya estás dentro del shell de tu servidor en la nube.
Paso 3: Actualizar el Sistema e Instalar Docker
Una vez dentro de la terminal de tu EC2 (notarás que el prompt de tu terminal cambia a algo como ubuntu@ip-172-x-x-x), ejecuta los siguientes comandos:
- Actualiza la lista de paquetes del sistema para garantizar el acceso a las últimas versiones estables:
sudo apt update && sudo apt upgrade -y - Instala los paquetes esenciales para permitir que Ubuntu use repositorios de software sobre HTTPS:
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common - Añade la clave GPG oficial de Docker a los llaveros de confianza del sistema:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg - Añade el repositorio de Docker a las fuentes de software de tu distribución:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - Instala el motor de Docker y el plugin oficial de Docker Compose actualizando la lista de paquetes una vez más:
sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
Paso 4: Configurar Permisos de Docker
Por defecto, el socket de Docker requiere privilegios de superusuario (sudo) para cada comando. Para evitar tener que escribirlo a cada momento, añade tu usuario actual (ubuntu) al grupo de Docker.
- Agrega el usuario al grupo de docker:
sudo usermod -aG docker $USER - Aplica los cambios de grupo de forma inmediata a la sesión actual sin necesidad de cerrar sesión por SSH:
newgrp docker - Comprueba que puedas interactuar con el socket sin necesidad de sudo:
(Ambos comandos deben imprimir las versiones instaladas sin arrojar advertencias ni errores de permisos).docker --version docker compose version
Paso 5: Crear el Archivo Docker Compose y Levantar Nginx
Estructuraremos un despliegue ordenado encapsulando los servicios con Docker Compose.
-
Crea una carpeta dedicada a tu proyecto y accede a ella:
mkdir mi-primer-servidor && cd mi-primer-servidor -
Crea y edita un archivo llamado
docker-compose.ymlutilizando el editor integradonano:nano docker-compose.yml -
Pega la siguiente definición YAML dentro del editor:
services: web: image: nginx:latest container_name: mi_nginx ports: - "80:80" restart: always¿Qué hace este archivo? Declara un servicio llamado
webque descarga la última imagen de Nginx, nombra al contenedormi_nginx, mapea el puerto 80 del host (EC2) al puerto 80 del contenedor, y configura una regla de reinicio automático (restart: always) para volver a encender el contenedor si la máquina física se reinicia. -
Para guardar en nano: Presiona
Ctrl + O, presionaEnterpara confirmar el nombre del archivo, y presionaCtrl + Xpara salir del editor. -
Levanta el contenedor en segundo plano (modo detached):
docker compose up -dDocker descargará automáticamente la imagen oficial de Nginx y creará el contenedor en segundos.
-
Verifica que el contenedor esté corriendo correctamente:
docker ps
Paso 6: ¡La Prueba de Fuego!
- Abre tu navegador web en tu computadora personal.
- En la barra de direcciones, introduce la dirección IP pública de tu instancia EC2 (asegúrate de ingresar explícitamente
http://y nohttps://ya que aún no cuentas con un certificado SSL configurado). Ejemplo:http://54.210.xx.xx - Presiona Enter.
Si todo se configuró correctamente, deberías ver la clásica pantalla de bienvenida por defecto de Nginx: “Welcome to nginx!” 🎉