← Volver al blog

Desplegar una aplicación PHP en AWS: opciones y guía paso a paso

· 26 sep 2026 · 6 min de lectura
Contenido de este artículo
  1. Qué opciones tienes para ejecutar PHP en AWS
  2. Arquitectura mínima recomendada
  3. Paso 1: crear la instancia y proteger el acceso
  4. Paso 2: instalar Nginx y PHP-FPM
  5. Paso 3: base de datos en RDS
  6. Paso 4: HTTPS con Let's Encrypt
  7. Paso 5: desplegar la aplicación
  8. Seguridad y buenas prácticas
  9. Cómo controlar los costes
  10. Cuándo pasar a contenedores o a algo más gestionado
  11. Preguntas habituales

AWS ofrece muchas formas de ejecutar una aplicación PHP, y elegir mal complica el mantenimiento o encarece la factura. Esta guía compara las opciones más habituales y recorre paso a paso un despliegue clásico y sólido: EC2 con Nginx, PHP-FPM, base de datos en RDS y HTTPS, válido para Symfony, Laravel o PHP a medida.

Qué opciones tienes para ejecutar PHP en AWS

OpciónPara quiénVentajaContrapartida
LightsailWebs y proyectos pequeñosPrecio fijo y panel sencilloMenos flexibilidad y escalado limitado
EC2 (servidor virtual)Aplicaciones a medida, control totalFlexible, predecible y muy documentadoTú administras el sistema operativo
Elastic BeanstalkEquipos que quieren despliegue gestionadoAutomatiza balanceo y despliegueMenos control y abstracciones propias
ECS con Fargate (contenedores)Aplicaciones que ya usan Docker o necesitan escalarSin gestionar servidores, despliegues repetiblesMás piezas y más curva de aprendizaje

Para la mayoría de aplicaciones de pymes, EC2 con una base de datos gestionada es el punto de equilibrio: es sencillo de entender, barato y permite crecer. Si ya trabajas con contenedores o esperas mucho tráfico, valora ECS con Fargate.

Arquitectura mínima recomendada

Paso 1: crear la instancia y proteger el acceso

  1. Crea una instancia EC2 con Ubuntu Server LTS. Para empezar, un tipo pequeño de la familia t (por ejemplo t3.small) basta para una aplicación con tráfico moderado; se redimensiona después.
  2. Configura el grupo de seguridad: puerto 80 y 443 abiertos al mundo, y el 22 (SSH) solo desde tu IP.
  3. Asocia una IP elástica para que la dirección no cambie al reiniciar.
  4. Accede por SSH con clave (no con contraseña) y no uses el usuario root para el día a día.

Paso 2: instalar Nginx y PHP-FPM

En Ubuntu 24.04 la versión de PHP disponible es la 8.3. Instala el servidor web, PHP y las extensiones habituales:

sudo apt update
sudo apt install -y nginx php8.3-fpm php8.3-cli php8.3-mysql php8.3-xml \
  php8.3-mbstring php8.3-curl php8.3-zip php8.3-intl unzip git
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Configura el sitio de Nginx. Este ejemplo sirve una aplicación Symfony cuyo punto de entrada está en public/:

server {
    listen 80;
    server_name ejemplo.com www.ejemplo.com;
    root /var/www/app/public;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/index\.php(/|$) {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        internal;
    }

    location ~ \.php$ {
        return 404;
    }
}

Guárdalo en /etc/nginx/sites-available/app, enlázalo en sites-enabled y recarga con sudo nginx -t && sudo systemctl reload nginx. Para Laravel, el esquema es el mismo con root apuntando a public/.

Paso 3: base de datos en RDS

  1. Crea una instancia RDS (MySQL o PostgreSQL) en la misma región y VPC que la instancia EC2.
  2. Márcala como no accesible públicamente y permite el tráfico solo desde el grupo de seguridad de la EC2 (no desde IPs).
  3. Activa las copias automáticas y define un periodo de retención.
  4. Guarda las credenciales fuera del repositorio: en variables de entorno del servidor, en un fichero .env.local con permisos restringidos o en AWS Secrets Manager.

Paso 4: HTTPS con Let's Encrypt

Con el dominio ya apuntando a la IP elástica desde Route 53 (o desde tu proveedor de DNS), instala Certbot y solicita el certificado:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d ejemplo.com -d www.ejemplo.com

Certbot modifica Nginx para servir HTTPS y programa la renovación automática. Comprueba que funciona con sudo certbot renew --dry-run.

Paso 5: desplegar la aplicación

Clona el repositorio en /var/www/app con un usuario de despliegue y ejecuta este flujo en cada versión:

cd /var/www/app
git pull origin main
composer install --no-dev --optimize-autoloader
php bin/console doctrine:migrations:migrate --no-interaction
php bin/console cache:clear --env=prod
sudo systemctl reload php8.3-fpm

Con el tiempo conviene automatizarlo: un flujo de GitHub Actions que, al hacer push a main, se conecte por SSH, ejecute estos comandos y avise si algo falla. Así los despliegues son repetibles y no dependen de que alguien recuerde los pasos.

Seguridad y buenas prácticas

Cómo controlar los costes

Cuándo pasar a contenedores o a algo más gestionado

Este esquema funciona muy bien hasta cierto tamaño. Si necesitas escalar horizontalmente, desplegar sin cortes, tener entornos idénticos entre desarrollo y producción o gestionar varias aplicaciones, es el momento de dar el paso a contenedores con ECS/Fargate y a una base de datos con alta disponibilidad. No hace falta empezar ahí: migrar desde una EC2 bien montada es un paso natural.

Preguntas habituales

¿Quieres verlo aplicado a tu caso?Cuéntame tu proyecto; respuesta en menos de 24 horas.

Cuéntame tu caso

¿Lo aplicamos en tu caso?Consulta el servicio de despliegue e infraestructura en AWS o escríbeme y hablamos de tu proyecto.

Sigue leyendo

Vibe coding con Claude Code en proyectos fullstack reales

Cómo integro Claude Code en mi flujo de trabajo fullstack: contexto, prompts estructurados, agentes y skills dedicadas.

Leer artículo →

Cuánto cuesta una web a medida: precios y qué influye

Cuánto cuesta una web a medida en España: rangos orientativos por tipo de proyecto, qué factores suben el precio, costes recurrentes y cómo comparar presupuestos.

Leer artículo →
David Otero Mato

David Otero Mato

Desarrollador fullstack freelance en Donostia — PHP, Vue.js, AWS e IA generativa aplicada a proyectos reales.

¿Hablamos de tu proyecto? →