Implantación de Aplicaciones Web
José Juan Sánchez Hernández
Curso 2024/2025
En esta práctica tendrá que realizar la instalación de un sitio WordPress haciendo uso de los servicios de Amazon Web Services (AWS).
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:
A continuación se describen muy brevemente algunas de las tareas que tendrá que realizar sobre cada una de las máquinas.
/etc/exports
para permitir el
acceso al directorio compartido solo a los servidores web.AllowOverride All
.rewrite
.NFS Client
/etc/fstab
para montar
automáticamente el directorio al iniciar el sistema.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:
/var/www/html
entre todos los servidores de la
capa de front-end.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:
Podemos hacer que un frontal haga de servidor NFS y el
otro de cliente NFS. En
este caso, el servidor NFS
compartirá el directorio /var/www/html/
y el cliente podrá
montar este directorio en su sistema de ficheros.
La otra posibilidad es utilizar un servidor NFS
dedicado donde se almacenará el directorio compartido
/var/www/html
y los servidores web serán los clientes que
utilizarán el directorio compartido.
Ejemplo de configuración de un cliente/servidor NFS
Vamos a suponer que tenemos dos máquinas con la siguientes IPs:
Instalación de paquetes necesarios en el servidor NFS:
Instalación de paquetes necesarios en el cliente NFS:
Cambiamos los permisos al directorio que vamos a compartir:
Editamos el archivo /etc/exports
:
Solución para compartir el directorio con una dirección IP
Añadimos la siguiente línea:
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:
En la documentación
oficial podemos consultar una descripción detallada de cada uno de
los parámetros utilizados en el archivo /etc/exports
.
NOTA: Tenga en cuenta que para que el servicio de NFS pueda funcionar tendrá que abrir el puerto 2049 para poder aceptar conexiones TCP.
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
/etc/fstab
en el cliente NFSEditamos el archivo /etc/fstab
para que al iniciar la
máquina se monte automáticamente el directorio compartido por NFS.
Añadimos la siguiente línea:
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
.
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.
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.
$_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:
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:
URL del repositorio de GitHub donde se ha alojado el documento técnico escrito en Markdown.
Scripts de bash utilizados para crear la infraestructura necesaria con AWS CLI.
Scripts de bash utilizados para realizar el aprovisionamiento de las máquinas virtuales.
Tenga en cuenta que el aprovisionamiento de las máquinas virtuales se realizará mediante un script de bash. Cada máquina usará su propio script. El contenido de cada uno de los scripts deberá ser incluido en el documento y deberá describir qué acciones se han ido realizando en cada uno de ellos.
URL del sitio web con HTTPS habilitado.
wp-config.php
para WordPress
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.