Despliegue de Wordpress usando Vagrant y Chef
Este proyecto es para una tarea de la Maestría en Desarrollo y Operaciones de UNIR.
El Objetivo es desplegar Wondpress usando Vagrant y Chef.
Supuestos
- Se espera que la red de las VMs sea 192.168.56.0/24. Si VirtualBox tiene otro rango de red entonces hay que ajustar el archivio
.env
con los valores adecuados.
Pre-requisitos
- Necesitas tener instalado Git
- Necesitas tener instalado Vagrant 2.3.7 o superior
- Necesitas tener instalado VirtualBox 7.0 o superior
- Ruby 2.5 o superior
Instala el plugin vagrant-env
para poder cargar variables ed ambiente desde el archivo .env
vagrant plugin install vagrant-env
También debes instalar la gema serverspec
para poder ejecutar las pruebas de integración e infraestructura:
gem install serverspec
Arquitectura
El proyecto se compone de tres servicios, cada uno deployado en una VM individual:
- database: En esta VM se instala MySQL.
- wordpress: En esta VM se instala el servidor web Apache y la aplicación Wordpress es instalada para ser servida por el servidor web.
- proxy: Em esta VM se instala un proxy Nginx el cual será el punto de entrada a la aplicación.
En el siguiente diagrama se pueden ver cómo se relacionan las VMs y los puertos de comunicación que esa cada una de ellas:
graph LR;
A("Usuario") --> |80| B("proxy
192.168.56.2") --> |8080| C("wordpress
192.168.56.10") ---> |3306| D[("database
192.168.56.20")]
Configuraciones
En el archivo .env
se pueden definir algunos valores como las IPs de las máquinas virtuales y el usuario y el password de la BD que se usará para configurar Wordpress.
Antes de levantar Vagrant se puede definir la caja que se usará. Mira el siguiente diagrama:
graph TB;
A[Inicio] --> B{BOX_NAME?}
B -->|No| C["Deploy
ubuntu/focal64"]
B -->|Si| D["Deploy
generic/centos8"]
C --> E[Fin]
D --> E[Fin]
Lee la sección Uso para ver ejemplos de esto.
Uso
Para levantar las dos máquinas virtuales con Ubuntu 20.04 ejecuta el comando:
vagrant up
Para levantar las dos máquinas virtuales con CentOS 8 ejecuta el comando:
BOX_NAME="generic/centos8" vagrant up
Se van a crear dos máquinas virtuales, una llamada wordpress
y otra llamada database
.
Si quieres mezclar las versiones puedes hacerlo del siguiente modo.
Wordpress con Ubuntu y MySQL con CentOS:
vagrant up wordpress
BOX_NAME="generic/centos8" vagrant up database
Wordpress con CentOS y MySQL con Ubuntu:
BOX_NAME="generic/centos8" vagrant up wordpress
vagrant up database
Wordpress
Una vez que se hayan levantado todas las VMs podrás acceder a Wordpress en la página: http://192.168.56.2/
Unit tests
Para ejecutar las pruebas unitarias usa el script tests.sh
si estás en Linux o Mac.
./tests.sh
Seleccione una opción:
1. Ejecutar pruebas unitarias en una VM
2. Ejecutar pruebas unitarias en un contenedor
3. Ejecutar pruebas de integración e infraestructura
4. Salir
Opción:
Si seleccionas 1 se ejecutará una VM usando Vagrant y ejecutará las pruebas unitarias.
Si seleccionas 2 se ejecutarán las pruebas unitarias usando Docker.
También puedes seleccionar una de estos dos opciones desde el script para no pasar por el menú:
# Para ejecutar las pruebas unitarias en una VM.
./tests.sh vm
# Para ejecutar las pruebas unitarias en Docker.
./tests.sh docker
Pruebas de integración e infraestructura
Para ejecutar todas las pruebas de integración usa el script tests.sh
opción 3:
./tests.sh
Seleccione una opción:
1. Ejecutar pruebas unitarias en una VM
2. Ejecutar pruebas unitarias en un contenedor
3. Ejecutar pruebas de integración e infraestructura
4. Salir
Opción:
Si deseas ejecutar una a una las pruebas de integración e infraestructura entonces pásale el nombre de la receta al script tests.sh
:
# Para ejecutar las pruebas de integración e infraestructura de la base de datos
./tests.sh database
# Para ejecutar las pruebas de integración e infraestructura de Wordpress
./tests.sh wordpress
# Para ejecutar las pruebas de integración e infraestructura del proxy
./tests.sh proxy
Referencias:
- Chef Documentation: https://docs.chef.io/
- ChefSpec: https://docs.chef.io/workstation/chefspec/
- ServerSpec: https://serverspec.org/resource_types.html
- Test Kitchen: https://docs.chef.io/workstation/kitchen/