En este tutorial, se despliega o implementa un sitio web dinámico básico desarrollado en PHP 8 y MySQL sobre una zona de disponibilidad de Amazon Web Services (AWS). El tutorial también detalla el diseño del diagrama de arquitectura en relación a los servicios de AWS aplicados para este despliegue.
Tras completar el tutorial, habrá desplegado un sitio web dinámico sobre una arquitectura de AWS; asimismo, habrá configurado las instancias del sitio web, la instancia de base de datos, finalmente, habrá aplicado herramientas para el despliegue del código fuente.
Lo que veremos en este tutorial:
- Servicios y componentes AWS.
- Diseño de arquitectura para el despliegue.
- Archivos del sitio web y base de datos.
- Creación y configuración de los Servicios de AWS.
- Herramientas para el despliegue.
- Instalar el servidor Apache, PHP y MySQL.
- Conectar MySQL y crear la base de datos.
- Validar el despliegue de sitio web.
- Conclusiones.
- Referencia.
1. Lista de servicios y componentes AWS.
- Virtual Private Cloud (VPC): Servicio de AWS que permite a los usuarios lanzar recursos de AWS en una red virtual aislada
- Security Groups: Es un conjunto de reglas de firewall que controla el tráfico hacia y desde las instancias de Amazon EC2.
- Key Pair: Es un par de claves criptográficas que se utiliza para acceder de manera segura a instancias de Amazon EC2.
- Elastic Compute Cloud (EC2): Servicio web que proporciona capacidad de computación redimensionable en la nube de AWS.
- Amazon RDS (Relational Database Service): Servicio de base de datos gestionada que facilita la configuración, operación y escalabilidad de bases de datos en la nube. Específicamente, para este tutorial implementaremos Amazon RDS para MySQL que permitirá ejecutar la instancia de la base de datos MySQL.
2. Diseño de arquitectura para el despliegue.
Diseño del diagrama de arquitectura elaborado en draw.io con iconografías (formar) de AWS 2025:
La arquitectura diseñada esta conformada por:
- CSP: Amazon Web Services (AWS).
- VPC: vpc-website-dinamico.
- AVAILABILITY ZONE: us-east-2a
- SUB NET: public-subnet-dinamico y private-subnet-dinamico
- SECURITY GROUPS: sgec2-website-dinamico y sgrds-database-dinamico
- INTANCES: ec2-rds-website-dinamico y rds-ec2-database-dinamico
- INTERNET GATEWAY: igw-website-dinamico
Para la instancia ec2-rds-website-dinamico crear el key pair kp-ec2-website-dinamico para acceder a la instancia y desplegar el código fuente del sitio web; asimismo, la instancia RDS rds-ec2-database-dinamico genera el Endpoint para acceder a base datos; finalmente se genera y configura el route table rtb-website-dinamico:
rtb-website-dinamico | ||
Destino | Objetivo | Descripción |
---|---|---|
0.0.0.0/0 | igw-website-dinamico | Salida a Internet |
10.0.0.0/24 | local | Conexión local para VPN |
3. Archivos del sitio web y base de datos.
Para el funcionamiento del despliega del sitio web básico se detallan los siguientes archivos:
- dbinfo.inc: Incluye la definición de las variables globales de conexión al servidor y base de datos del sitio web.
- script-create-database.sql: Contiene el script SQL para crear la base de datos demo-rds-mysql del sitio web.
- SamplePage.php: Contiene las funciones PHP para la conexión a la base de datos, y para la validar y/o crear la tabla EMPLOYEES; asimismo, contiene la estrucutura del formulario HTML para proceder a ingresar los datos del empleado.
- script-select-table.sql: Contiene la sentencia select para seleccionar los registros ingresados en la tabla EMPLOYEES.
Los archivos debe ser aplicados según el orden detallado. El achivo SamplePage.php es el encargado de crear la tabla.
4. Creación y configuración de los Servicios de AWS.
4.1. Crear y configurar el Servicio Virtual Private Cloud (VPC)
Crear la Virtual Private Cloud (VPC) o también conocido como Red Virtual Privada; asimismo, crear las Subredes, Internet Gateway y actualizar el Route Table para aprovisionar la conexión de la arquitectura Cloud Computing en AWS.
- Crear la Virtual Private Cloud (VPC) asignando el nombre de vpc-website-dinamico (principal) con IPv4 CIDR 10.0.0.0/16.
- Al crear la Virtual Private Cloud (VPC) también se creará de manera automática el route tables (tablas de ruteo) con el destino 10.0.0.0/16 con objetivo de conexión local del entorno Cloud Computing de AWS.
- Asignar el nombre de rtb-website-dinamico al route table.
- Crear las sub-nets (subredes) públicas y privadas en la misma Availability Zone (zona de disponibilidad):
Subredes | ||
Subred | CIDR IPv4 | Zona de disponibilidad |
---|---|---|
public-subnet-dinamico | 10.0.0.0/28 | us-east-2a |
private-subnet-dinamico | 10.0.0.128/25 | us-east-2a |
- Crear el Internet Gateway de nombre igw-website-dinamico.
- Adjuntar el Internet Gateway igw-website-dinamico a la VPC principal vpc-website-dinamico para la comunicación con Internet.
- Asociar el Internet Gateway igw-website-dinamico al route tables (tablas de ruteo) rtb-website-dinamico.
4.2. Crear y configurar el Servicio Elastic Compute Cloud (EC2)
Crear el Elastic Compute Cloud (EC2) de tipo Amazon Linux 2023 AMI, Key Pair, Security Group y asociar la instancia a la subnet public-subnet-dinamico.
- Crear la Elastic Compute Cloud (EC2) de nombre de ec2-rds-website-dinamico.
- Crear el Key Pair de nombre kp-ec2-website-dinamico de tipo RSA en formato .pem.
- Asociar la instancia en creación (ec2-rds-website-dinamico) a la subnet public-subnet-dinamico.
- Crear el Security Group de nombre sgec2-website-dinamico y configurar la siguientes reglas de entra:
- SSH: 22 - Protocolo TCP
- HTTP: 80 - Protocolo TCP
- HTTPS: 443 - Protocolo TCP
4.3. Crear y configurar el Servicio Amazon RDS (MySQL)
Crear la instancia de Amazon Relational Database Service (RDS) que es compatible con el motor de bases de datos MySQL.
- Crear la instancia estándar de nombre rds-ec2-database-dinamico, de tipo MySQL, Edición MySQL Community, plantilla Free tier de despliegue de tipo Single-AZ DB instance deployment (1 instance).
- Asignar un usuario y una contraseña
- Seleccionar la instancia ec2-rds-website-dinamico para conectar la aplicación con la base de datos.
- Seleccionar la opción Connect to an EC2 compute resource.
- Busca y selecciona la instancia ec2-rds-website-dinamico.
- Crear el Security Group de nombre sgrds-database-dinamico para la instancia de base de datos, y establezca el puerto 3306.
5. Herramientas para el despliegue.
- MobaXterm: Herramienta para la administración de sistemas y redes, especialmente diseñada para programadores, webmasters y administradores de TI. Ofrece una amplia gama de funciones en una sola aplicación para Windows, facilitando el manejo de trabajos remotos. Utilizará para la conexión a la instancia EC2 para el despliegue del código fuente.
- Comandos Linux: Programa o utilitario que se ejecuta en la línea de comandos; una línea de comandos es una interfaz que acepta líneas de texto y las procesa en forma de instrucciones para tu ordenador. Este tutorial, contempla los siguientes comandos que serán ejecutados desde MobaXterm
- MySQL Workbench: Herramienta de diseño de base de datos visual integrada que facilita la administración y el desarrollo de bases de datos MySQL. Utilizará para la conexión a la instancia RDS para crear la base de datos y manipulación datos.
6. Instalar el servidor Apache, PHP y MySQL.
6.1. Conectarse por SSH para la instalación de Apache.
![]() |
Iniciar una nueva sesión |
![]() |
Configure la sesión SSH |
- Actualizar a la seguridad más recientes para el software de la instancia de EC2 de Amazon Linux:
- sudo dnf update -y
- Instalar el servidor web Apache, PHP y el software de MariaDB (también MySQL) o PostgreSQL en instancia de EC2 de Amazon Linux:
- sudo dnf install -y httpd php php-mysqli mariadb105
- Iniciar el servidor web Apache de la instancia de EC2 de Amazon Linux:
- sudo systemctl start httpd
- sudo systemctl enable httpd
6.2. Configurar los permisos de archivo para el servidor web Apache:
- Agregue el usuario ec2-user al grupo apache.
- sudo usermod -a -G apache ec2-user
- Cierre la sesión para actualizar los permisos e incluir el nuevo grupo apache.
- exit
- Inicie sesión nuevamente y compruebe que existe el grupo apache mediante el comando groups.
- groups
- El resultado tiene un aspecto similar al siguiente:
- ec2-user adm wheel apache systemd-journal
- Cambie la propiedad de grupo del directorio /var/www y su contenido al grupo apache.
- sudo chown -R ec2-user:apache /var/www
- Cambie los permisos del directorio /var/www y sus subdirectorios para añadir permisos de escritura de grupo y establecer el ID de grupo en los subdirectorios que se creen en el futuro.
- sudo chmod 2775 /var/www find /var/www -type d -exec sudo chmod 2775 {} \;
- Cambie recursivamente los permisos de los archivos del directorio /var/www y sus subdirectorios para añadir permisos de escritura de grupo.
- find /var/www -type f -exec sudo chmod 0664 {} \;
7. Conectar MySQL y crear la base de datos.
7.1. Conectar la instancia EC2 con el motor de base de datos MySQL.
- Mientras está conectado a la instancia de EC2, cambie el directorio a /var/www y cree un subdirectorio nuevo denominado inc.
- cd /var/www
- mkdir inc
- cd inc
- Crear un archivo en el directorio inc, denominado dbinfo.inc y, a continuación, edite el archivo con cualquier editor de su elección.
- dbinfo.inc nano dbinfo.inc
- Añada el contenido del archivo dbinfo.inc (desponible en el repositorio en GitHub).
- Guarde y cierre el archivo dbinfo.inc. Si utiliza nano, guarde y cierre el archivo con Ctrl+S y Ctrl+X.
- Cambie el directorio a /var/www/html.
- cd /var/www/html
- Cree el archivo SamplePage.php en el directorio html, y a continuación, añada el contenido del SamplePage.php (desponible en el repositorio en GitHub).
- SamplePage.php nano SamplePage.php
7.1. Crear la base de datos en la instancia del MySQL.
- Conectar con MySQL Workbench a la instancia de MySQL.
- Ingresar el endpoint y puerto de la base de datos.
- Ingresar el usuario y contraseña.
- Ejecutar el script del achivo script-create-database.sql para crear la base de datos
- Crear la base de datos desde un nuevo query (consulta) y clic en ejecutar.
8. Validar el despliegue de sitio web.
![]() |
Ingresar primer registros (NAME y ADDRESS) |
![]() |
Los datos se reflejan después de ingresar |
0 Comentarios