IAW - Práctica 8

José Juan Sánchez Hernández

IES Celia Viñas (Almería) - 2019/2020

1 Práctica 8: Implantación de Wordpress en Amazon Web Services (AWS) sobre la pila LAMP

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

Despliega la última versión de Worpress utilizando la siguiente arquitectura propuesta:

La arquitectura estará formada por:

Necesitará crear las siguientes máquinas virtuales:

1.1 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.1.1 Balanceador de carga

1.1.2 Front-End

1.1.3 Back-End

1.2 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, en nuestro caso vamos a estudiar las siguientes:

  1. Utilizar almacenamiento compartido por NFS del directorio /var/www/html/wp-content entre todos los servidores de la capa de front-end.
  2. Sincronización con rsync de los archivos del directorio /var/www/html/wp-content entre todos los servidores de la capa de front-end.
  3. Utilizar un sistema de almacenamiento distribuido seguro con GlusterFS.

1.2.1 Opción 1: NFS

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/wp-content. En nuestro caso un frontal hará de servidor NFS y el otro de cliente NFS. El servidor NFS compartirá el directorio /var/www/html/wp-content y el cliente podrá montar este directorio en su sistema de ficheros.

Por ejemplo, en mi caso las máquinas tendrán las siguientes IPs:

1.2.1.1 Paso 1: Instalación de paquetes

Instalación de paquetes necesarios en el servidor NFS:

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

Instalación de paquetes necesarios en el cliente NFS:

sudo apt-get update
sudo apt-get install nfs-common

1.2.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/wp-content

Editamos el archivo /etc/exports:

sudo nano /etc/exports

Añadimos la siguiente línea:

/var/www/html/wp-content      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.

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.2.1.3 Paso 3: Reiniciamos el servicio NFS

sudo /etc/init.d/nfs-kernel-server restart

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

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

sudo mount 192.168.33.11:/var/www/html/wp-content /var/www/html/wp-content

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/wp-content  9.7G  1.1G  8.6G  12% /var/www/html/wp-content
tmpfs                                   100M     0  100M   0% /run/user/1000

1.2.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/wp-content /var/www/html/wp-content  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.2.2 Opción 2: rsync

Inconveniente: En esta opción tiene que existir una máquina donde se redirijan todas las peticiones que se hacen a wp-admin y todo el contenido que se almacene en el directorio uploads, themes, plugin, etc. será el contenido que se sincronice con el resto de máquinas de la capa de front-end. El problema es que la máquina que gestiona las peticiones que se hacen a wp-admin es un SPOF (Single Point of Failure).

1.2.3 Opción 3: GlusterFS

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

1.3 Notas sobre la configuración de WordPress

1.3.1 Instalación sobre un directorio que no es el raíz

Si hemos realizado la instalación de WordPress sobre un directorio que no es el raíz tendremos que realizar dos pasos adicionales.

Por ejemplo, si tenemos los archivos de WordPress en el directorio /var/www/html/wordpress en lugar de tenerlos en el directorio /var/www/html tendremos que configurar la dirección de WordPress (WP_SITEURL) y la dirección del sitio (WP_HOME).

1.3.1.1 Dirección de WordPress y Dirección del sitio

Una vez instalado WordPress accederemos al panel de administración y buscaremos la sección de Ajustes -> Generales. Allí configuraremos los valores de Dirección de WordPress (WP_SITEURL) y Dirección del sitio (WP_HOME) con los siguientes valores:

Ejemplo:

Nota:

1.3.2 Configuración de WordPress en un directorio que no es el raíz

Realiza las siguientes acciones en cada uno de los frontales web:

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );

Por esta línea de código:

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wordpress/wp-blog-header.php' );

Donde wordpress es el directorio donde se encuentra el código fuente de WordPress que hemos descomprimido en pasos anteriores.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Una vez hecho esto ya podremos acceder a WordPress desde la IP del balanceador de carga.

1.3.3 Configuración de las Security Keys

Podemos mejorar la seguridad de WordPress configurando las security keys que aparecen en el archivo wp-config.php.

En la documentación oficial podemos encontrar el motivo por el que nos recomiendan configurar estas security keys y cómo podemos hacerlo.

1.4 Tutorial de referencia

1.5 Tutoriales de Amazon que vamos a utilizar en esta práctica

1.6 Otros tutoriales para crear sitios WordPress escalables

1.7 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 Créditos

3 Referencias

4 Licencia

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