Cómo automatizar implementaciones simultáneas de WordPress en múltiples servidores Linux usando Ansible - Parte 3
En los dos artículos anteriores de esta serie de Ansible, explicamos cómo instalar y configurar Ansible para ejecutar comandos y realizar tareas complejas en varios servidores remotos simultáneamente.

En el tutorial actual explicaremos cómo configurar WordPress en los mismos servidores remotos:
node1: 192.168.0.29 node2: 192.168.0.30
donde instalamos, habilitamos e iniciamos Apache (probablemente ya sepa por qué elegimos trabajar con un servidor web como ejemplo inicial en el último tutorial).
Le recomiendo que lea la Parte 1 y la Parte 2 antes de continuar para asegurarse de que está familiarizado con los conceptos asociados con Ansible.
Paso 1: Introducción de roles de Ansible
A medida que comience a agregar más y más tareas a las obras, sus Playbooks pueden volverse cada vez más difíciles de manejar. Por esa razón, el enfoque recomendado en esas situaciones (en realidad, en todos los casos) es usar una estructura de directorio que contenga las directivas para cada grupo de tareas en archivos distintos.
Este enfoque nos permite reutilizar estos archivos de configuración en proyectos separados más adelante. Cada uno de estos archivos define lo que se llama un rol en el ecosistema de Ansible.
En nuestro caso, crearemos dos roles. Uno de ellos (llamado wp-dependencies) se utilizará para instalar las dependencias de WordPress (PHP y MariaDB; no es necesario instalar Apache ya que ya está instalado).
El otro rol (llamado wp-install-config) incluirá todas las tareas necesarias asociadas con la instalación y configuración de WordPress.
Paso 2: creación de roles de Ansible
Ansible viene con una utilidad llamada ansible-galaxy que nos ayudará a crear la estructura de directorios para nuestros roles. Haremos esto en/etc/ansible/playbooks (que creamos en la Parte 2) pero, en teoría, puede configurarlo en otro directorio si lo desea.
# cd /etc/ansible/playbooks # ansible-galaxy init wp-dependencies # ansible-galaxy init wp-install-config

Luego confirma los roles recién creados.
# ls -R /etc/ansible/playbooks

En la imagen de arriba podemos ver que ansible-galaxy creó dos directorios con el mismo nombre que nuestros roles, y otros subdirectorios (predeterminados, archivos, manejadores, meta, tareas, plantillas y vars) y un archivo README.md dentro de cada uno de ellos.
Además, se creó un archivo YAML llamado main.yml dentro de todos los directorios enumerados anteriormente, con la excepción de archivos y plantillas.
Comenzaremos por editar los siguientes archivos de configuración como se indica:
1. /etc/ansible/playbooks/wp-dependencies/tasks/main.yml. Tenga en cuenta que incluimos httpd en caso de que no haya seguido los tutoriales anteriores de esta serie.
--- # tasks file for wp-dependencies - name: Update packages (this is equivalent to yum update -y) yum: name=* state=latest - name: Install dependencies for WordPress yum: name={{ item }} state=present with_items: - httpd - mariadb-server - mariadb - php - php-mysql - MySQL-python - name: Ensure MariaDB is running (and enable it at boot) service: name=mariadb state=started enabled=yes - name: Copy ~/.my.cnf to nodes copy: src=/root/.my.cnf dest=/root/.my.cnf - name: Create MariaDB database mysql_db: name={{ wp_mysql_db }} state=present - name: Create MariaDB username and password mysql_user: login_user=root login_password=YourMariaDBRootPasswordHere name={{ wp_mysql_user }} password={{ wp_mysql_password }} priv=*.*:ALL
2. /etc/ansible/playbooks/wp-dependencies/defaults/main.yml
--- # defaults file for wp-dependencies wp_mysql_db: MyWP wp_mysql_user: wpUser wp_mysql_password: wpP4ss
3. /etc/ansible/playbooks/wp-install-config/tasks/main.yml:
--- # tasks file for wp-install-config - name: Create directory to download WordPress command: mkdir -p /opt/source/wordpress - name: Download WordPress get_url: url=https://www.wordpress.org/latest.tar.gz dest=/opt/source/wordpress/wordpress.tar.gz validate_certs=no - name: Extract WordPress command: "tar xzf /opt/source/wordpress/wordpress.tar.gz -C /var/www/html --strip-components 1" - name: Send config file copy: src=/root/wp-config-sample.php dest=/var/www/html/wp-config.php mode=0644
4. wp-config-sample.php (proporcionado en este Pastebin) de la siguiente manera y guárdelo en su máquina controladora Ansible (como puede ver en la última directiva de copia anterior, lo descargué en el directorio de inicio del superusuario (/ root /wp-config-sample.php).
Importante: tenga en cuenta que el valor de las variables DB_NAME, DB_USER y DB_PASSWORD son los mismos que en /etc/ansible/playbooks/wp-dependencies/defaults/main.yml:
… /** The name of the database for WordPress */ define('DB_NAME', 'MyWP'); /** MySQL database username */ define('DB_USER', 'wpUser'); /** MySQL database password */ define('DB_PASSWORD', 'wpP4ss'); …
5. Para nuevas instalaciones de servidor de base de datos donde la contraseña de root está vacía, como en este caso, desafortunadamente necesitamos configurar la contraseña para el usuario root individualmente en cada máquina a través de mysql_secure_installation.
Hasta donde yo sé, no hay una solución alternativa disponible que le permita configurar la contraseña de root a través de Ansible en el mismo paso donde crea la cuenta de la base de datos administrativa para WordPress.
Asegúrese de usar la misma contraseña en todos los hosts, luego copie las credenciales en /root/.my.cnf (la ubicación real puede diferir en su caso, pero en todos los casos debe coincidir con el valor del parámetro src para la tarea Copie ~/.my.cnf a los nodos en /etc/ansible/playbooks/wp-dependencies/tasks/main.yml).
En ese archivo (ver arriba) asumimos que la contraseña de root es YourMariaDBRootPassword.

6. A continuación, nuestro libro de jugadas (/etc/ansible/playbooks/playbook.yml) se verá mucho más organizado y simple en comparación con el tutorial anterior:
# cat playbook.yml

- hosts: webservers roles: - wp-dependencies - wp-install-config
Finalmente, es hora de ejecutar estas tareas invocando nuestro libro de jugadas:
# ansible-playbook playbook.yml
Ahora, verifiquemos si podemos acceder a la página de administración de WordPress usando las direcciones IP de node1 192.168.0.29 y node2 192.168.0.30:

Puede ver los dos últimos pasos en el siguiente screencast:
Como puede ver, puede configurar varias instalaciones de WordPress con poco o ningún esfuerzo usando Ansible. Luego, puede utilizar la interfaz de usuario de administrador correspondiente para configurar cada sitio por separado.
Consideraciones finales
Si está utilizando otra distribución para implementar WordPress, el nombre de los paquetes puede variar, pero todo se reduce a instalar el servidor web Apache, el servidor de base de datos MariaDB y el módulo Python MySQL. Si ese es el caso, use el sistema de administración de software de su distribución para buscar el nombre exacto del paquete que necesita instalar.
Resumen
En esta serie, explicamos cómo utilizar Ansible para ejecutar comandos y ejecutar tareas complejas en varias máquinas Linux simultáneamente.
Uno de esos ejemplos es la configuración de WordPress, como hemos comentado en esta guía. Tanto si es un administrador del sistema como un blogger, espero que los conceptos y ejemplos de este tutorial le hayan resultado útiles.
¡Mucha suerte y no dude en escribirnos si necesita ayuda o tiene algún comentario o sugerencia!