Práctica 1.11

Implantación de Aplicaciones Web

José Juan Sánchez Hernández

Curso 2024/2025

1 Implantación de Wordpress en AWS utilizando una arquitectura de tres niveles

En esta práctica tendrá que realizar la instalación de un sitio WordPress haciendo uso de los servicios de Amazon Web Services (AWS).

1.1 Arquitectura

Deberá desplegar la última versión de Worpress utilizando la siguiente arquitectura de tres niveles.

La arquitectura estará formada por:

Necesitará crear las siguientes máquinas virtuales:

1.2 Tareas a realizar

A continuación se describen muy brevemente algunas de las tareas que tendrá que realizar sobre cada una de las máquinas.

1.2.1 Balanceador de carga

1.2.2 NFS Server (Capa de Frontend)

1.2.3 Servidores web (Capa de Frontend)

NFS Client

1.2.4 Servidor de base de datos (Capa de Backend)

1.3 Sincronización del contenido estático en la capa de Front-End

Al tener varias máquinas en la capa de Front-End tenemos que tener en cuenta que podemos tener algunos problemas a la hora de guardar contenido estático en el directorio uploads, instalar nuevos themes o instalar nuevos plugins, ya que estos contenidos se guardarán sobre el sistema de ficheros del frontal web que esté atendiendo nuestra petición. El contenido estático se almacena en el directorio wp-content.

Por ejemplo, puede ocurrir que hayamos instalado un nuevo plugin en uno de los frontales web y que el resto de frontales no tengan constancia de que este nuevo plugin ha sido instalado. También puede ocurrir que cuando uno de los frontales web esté fuera de servicio todo el contenido del directorio uploads estará inaccesible.

Para resolver este problema tenemos varias opciones:

  1. Utilizar almacenamiento compartido por NFS del directorio /var/www/html entre todos los servidores de la capa de front-end.
  2. Utilizar un sistema de almacenamiento distribuido seguro con GlusterFS.
  3. Utilizar un sistema de almacenamiento distribuido seguro con CephFS.

1.3.1 Opción 1: NFS (Network File System)

Inconveniente: La máquina que actúa como servidor NFS es un SPOF (Single Point of Failure).

Podemos utilizar NFS para que los servidores de la capa de front-end compartan el directorio /var/www/html. Si utilizamos esta opción podemos hacerlo de dos formas:

Ejemplo de configuración de un cliente/servidor NFS

Vamos a suponer que tenemos dos máquinas con la siguientes IPs:

1.3.1.1 Paso 1: Instalación de paquetes

Instalación de paquetes necesarios en el servidor NFS:

sudo apt update
sudo apt install nfs-kernel-server -y

Instalación de paquetes necesarios en el cliente NFS:

sudo apt update
sudo apt install nfs-common -y

1.3.1.2 Paso 2: Exportamos el directorio en el servidor NFS

Cambiamos los permisos al directorio que vamos a compartir:

sudo chown nobody:nogroup /var/www/html

Editamos el archivo /etc/exports:

sudo nano /etc/exports

Solución para compartir el directorio con una dirección IP

Añadimos la siguiente línea:

/var/www/html 192.168.33.12(rw,sync,no_root_squash,no_subtree_check)

Donde 192.168.33.12 es la IP del cliente NFS con el que queremos compartir el directorio.

Solución para compartir el directorio con un rango de IPs

Si quisiéramos compartir el directorio con todos los equipos de la subred 192.168.33.0/24 tendríamos que añadir la siguiente línea:

/var/www/html 192.168.33.0/24(rw,sync,no_root_squash,no_subtree_check)

En la documentación oficial podemos consultar una descripción detallada de cada uno de los parámetros utilizados en el archivo /etc/exports.

1.3.1.3 Paso 3: Reiniciamos el servicio NFS

sudo systemctl restart nfs-kernel-server

NOTA: Tenga en cuenta que para que el servicio de NFS pueda funcionar tendrá que abrir el puerto 2049 para poder aceptar conexiones TCP.

1.3.1.4 Paso 4: Creamos el punto de montaje en el cliente NFS

sudo mount 192.168.33.11:/var/www/html /var/www/html

Donde 192.168.33.11 es la IP del servidor NFS que está compartiendo el directorio.

Una vez hecho esto comprobamos con df -h que le punto de montaje aparece en el listado.

$ df -h

udev                                    490M     0  490M   0% /dev
tmpfs                                   100M  3.1M   97M   4% /run
/dev/sda1                               9.7G  1.1G  8.6G  12% /
tmpfs                                   497M     0  497M   0% /dev/shm
tmpfs                                   5.0M     0  5.0M   0% /run/lock
tmpfs                                   497M     0  497M   0% /sys/fs/cgroup
192.168.33.11:/var/www/html             9.7G  1.1G  8.6G  12% /var/www/html
tmpfs                                   100M     0  100M   0% /run/user/1000

1.3.1.5 Paso 5: Editamos el archivo /etc/fstab en el cliente NFS

Editamos el archivo /etc/fstab para que al iniciar la máquina se monte automáticamente el directorio compartido por NFS.

sudo nano /etc/fstab

Añadimos la siguiente línea:

192.168.33.11:/var/www/html /var/www/html  nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Donde 192.168.33.11 es la IP del servidor NFS que está compartiendo el directorio.

En la documentación oficial podemos consultar una descripción detallada de cada uno de los parámetros utilizados en el archivo /etc/fstabs.

1.3.2 Opción 2: GlusterFS

Otra opción es hacer uso de GlusterFS, que es un sistema de archivos multiescalable para NAS.

Puede encontrar más información sobre cómo crear un grupo de almacenamiento redundante con GlusterFS en la guía de Mark Drake publicada en DigitalOcean.

Fuente de la imagen: DigitalOcean.

1.3.3 Opción 3: CephFS

Ceph es un sistema de almacenamiento distribuido de código abierto.

Puede encontrar más información en la documentación oficial.

Fuente de la imagen: Ceph storage on Ubuntu: An overview.

1.4 Configuración de la variable $_SERVER['HTTPS']

Como el certificado HTTPS solo se ha instalado en el servidor Apache que está haciendo de proxy inverso, vamos a tener algunos problemas con las respuestas que le devuelven los servidores de la capa de Frontend al proxy inverso (balanceador de carga). Puede ocurrir que la respuesta incluya referencias al contenido del sitio web con el protocolo http y https. Para forzar que las referencias de los servidores web de la capa de Frontend siempre sean para el protocolo https tenemos que incluir la variable $_SERVER['HTTPS'] en el archivo wp-config.php y configurarla como on.

$_SERVER['HTTPS'] = 'on';

Referencia:

1.5 Tutorial de referencia

1.6 Entregables

En esta práctica habrá que entregar un documento técnico con la descripción de los pasos que se han llevado a cabo durante todo el proceso.

El documento debe incluir como mínimo lo siguientes contenidos:

2 Referencias

3 Licencia

Licencia de Creative Commons
Esta página forma parte del curso Implantación de Aplicaciones Web de José Juan Sánchez Hernández y su contenido se distribuye bajo una licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.