Com automatitzar les implementacions simultànies de WordPress en diversos servidors Linux mitjançant Ansible - Part 3


En els dos articles anteriors d'aquesta sèrie d'Ansible, vam explicar com instal·lar i configurar Ansible per executar ordres i realitzar tasques complexes en diversos servidors remots simultàniament.

En el tutorial actual us explicarem com configurar WordPress als mateixos servidors remots:

node1: 192.168.0.29
node2: 192.168.0.30

on vam instal·lar, habilitar i iniciar Apache (segurament ja sabeu per què vam triar treballar amb un servidor web com a exemple inicial a l'últim tutorial).

Us recomano que llegiu la part 1 i la part 2 abans de continuar per tal d'assegurar-vos que esteu familiaritzat amb els conceptes associats a Ansible.

Pas 1: Introducció a Ansible Roles

A mesura que comences a afegir més i més tasques a les obres de teatre, els teus Playbooks poden ser cada cop més difícils de gestionar. Per aquest motiu, l'enfocament recomanat en aquestes situacions (en realitat, en tots els casos) és utilitzar una estructura de directoris que contingui les directives per a cada grup de tasques en fitxers diferents.

Aquest enfocament ens permet reutilitzar aquests fitxers de configuració en projectes separats més endavant. Cadascun d'aquests fitxers defineix el que s'anomena rol a l'ecosistema Ansible.

En el nostre cas, crearem dos rols. Una d'elles (anomenada wp-dependencies) s'utilitzarà per instal·lar les dependències de WordPress (PHP i MariaDB; no cal instal·lar Apache ja que ja està instal·lat).

L'altre rol (anomenat wp-install-config) inclourà totes les tasques necessàries associades a la instal·lació i configuració de WordPress.

Pas 2: creació de rols Ansible

Ansible ve amb una utilitat anomenada ansible-galaxy que ens ajudarà a crear l'estructura de directoris per als nostres rols. Ho farem a /etc/ansible/playbooks (que vam crear a la part 2), però en teoria podeu configurar-lo en un altre directori si voleu.

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

A continuació, confirmen els rols de nova creació.

# ls -R /etc/ansible/playbooks

A la imatge de dalt podem veure que ansible-galaxy va crear dos directoris amb el mateix nom que els nostres rols, i altres subdirectoris (per defecte, fitxers, controladors, meta, tasques, plantilles i vars) i un fitxer README.md dins de cadascun dels ells.

A més, es va crear un fitxer YAML anomenat main.yml dins de tots els directoris enumerats anteriorment, amb l'excepció dels fitxers i les plantilles.

Començarem editant els següents fitxers de configuració tal com s'indica:

1. /etc/ansible/playbooks/wp-dependencies/tasks/main.yml. Tingueu en compte que incloem httpd en cas que no hàgiu seguit els tutorials anteriors d'aquesta sèrie.

---
# 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 (proporcionat en aquest Pastebin) de la següent manera i deseu-lo a la vostra màquina del controlador Ansible (com podeu veure a la darrera directiva de còpia anterior, el vaig descarregar al directori inicial del superusuari (/root). /wp-config-sample.php).

Important: tingueu en compte que el valor de les variables DB_NAME, DB_USER i DB_PASSWORD és el mateix que a /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. Per a instal·lacions noves del servidor de bases de dades on la contrasenya d'arrel està buida, com en aquest cas, malauradament hem de configurar la contrasenya per a l'usuari root individualment a cada màquina mitjançant mysql_secure_installation.

Pel que jo sé, no hi ha cap solució alternativa que us permeti configurar la contrasenya d'arrel mitjançant Ansible en el mateix pas en què creeu el compte de la base de dades administrativa per a WordPress.

Assegureu-vos d'utilitzar la mateixa contrasenya a tots els amfitrions i, a continuació, copieu les credencials a /root/.my.cnf (la ubicació real pot ser diferent en el vostre cas, però en tots els casos ha de coincidir amb el valor del paràmetre src de la tasca). Copieu ~/.my.cnf als nodes de /etc/ansible/playbooks/wp-dependencies/tasks/main.yml).

En aquest fitxer (vegeu més amunt) hem suposat que la contrasenya per a root és YourMariaDBRootPassword.

6. A continuació, el nostre llibre de jugades (/etc/ansible/playbooks/playbook.yml) semblarà molt més organitzat i senzill en comparació amb el tutorial anterior:

# cat playbook.yml
- hosts: webservers
  roles:
        - wp-dependencies
        - wp-install-config

Finalment, és hora d'executar aquestes tasques invocant el nostre llibre de jugades:

# ansible-playbook playbook.yml

Ara comprovem si podem accedir a la pàgina d'administració de WordPress mitjançant les adreces IP del node1 192.168.0.29 i del node2 192.168.0.30:

Podeu veure els dos darrers passos a la pantalla següent:

Com podeu veure, podeu configurar diverses instal·lacions de WordPress amb poc o cap esforç mitjançant Ansible. A continuació, podeu utilitzar la interfície d'usuari d'administració corresponent per configurar cada lloc per separat.

Consideracions finals

Si utilitzeu una altra distribució per implementar WordPress, el nom dels paquets pot variar, però es tracta d'instal·lar el servidor web Apache, el servidor de bases de dades MariaDB i el mòdul Python MySQL. Si aquest és el cas, utilitzeu el sistema de gestió de programari de la vostra distribució per cercar el nom exacte del paquet que necessiteu instal·lar.

Resum

En aquesta sèrie hem explicat com utilitzar Ansible per executar ordres i executar tasques complexes en diverses màquines Linux simultàniament.

Un d'aquests exemples és configurar WordPress, tal com hem comentat en aquesta guia. Tant si sou un administrador del sistema com si sou un blogger, espero que hàgiu trobat útils els conceptes i exemples d'aquest tutorial.

Molta sort i no dubteu a escriure'ns si necessiteu ajuda o teniu qualsevol comentari o suggeriment!