Búsqueda de sitios web

Cómo automatizar implementaciones simultáneas de WordPress en varios 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 sepas por qué elegimos trabajar con un servidor web como ejemplo inicial en el último tutorial).

Le recomiendo encarecidamente que lea la Parte 1 y la Parte 2 antes de continuar para asegurarse de que está familiarizado con los conceptos asociados con Ansible.

Cómo instalar y configurar la herramienta de automatización 'Ansible' para la gestión de TI - Parte 1

Cómo utilizar los Playbooks de Anisble para automatizar tareas complejas en varios servidores remotos – Parte 2

Paso 1: Introducción de los roles de Ansible

A medida que comienzas a agregar más y más tareas a las jugadas, tus 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 utilizar una estructura de directorios 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 en el ecosistema Ansible un rol.

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 como 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 ansibles

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, puedes configurarlo en otro directorio si lo deseas.

cd /etc/ansible/playbooks
ansible-galaxy init wp-dependencies
ansible-galaxy init wp-install-config

A continuación se confirman 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 (defaults, files , controladores, meta, tareas, plantillas y vars) y un < archivoREADME.md dentro de cada uno de ellos.

Además, se creó un archivo YAML denominado main.yml dentro de todos los directorios enumerados anteriormente, con la excepción de archivos y plantillas.

Comenzaremos editando 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 instalaciones nuevas de servidores de bases 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 ninguna solución alternativa disponible que le permita configurar la contraseña de root a través de Ansible en el mismo paso en el que crea la cuenta de base de datos administrativa para WordPress.

Asegúrese de utilizar 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 Copiar ~/.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 estrategias (/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 nodo1 192.168.0.29 y nodo2 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 utilizando Ansible. Luego puede utilizar la interfaz de usuario Admin respectiva para configurar cada sitio por separado.

Consideraciones finales

Si está utilizando otra distribución para implementar WordPress, el nombre del paquete 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, utilice 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 hemos explicado cómo utilizar Ansible para ejecutar comandos y ejecutar tareas complejas en varias máquinas Linux simultáneamente.

Uno de esos ejemplos es configurar WordPress, como hemos comentado en esta guía. Ya sea administrador de sistemas o blogger, espero que los conceptos y ejemplos de este tutorial le hayan resultado útiles.

¡Mucha suerte y no dudes en escribirnos si necesitas ayuda o tienes algún comentario o sugerencia!