Recherche de site Web

Comment automatiser les déploiements WordPress simultanés sur plusieurs serveurs Linux à l'aide d'Ansible - Partie 3


Dans les deux articles précédents de cette série Ansible, nous avons expliqué comment installer et configurer Ansible pour exécuter des commandes et effectuer des tâches complexes sur plusieurs serveurs distants simultanément.

Dans le didacticiel actuel, nous expliquerons comment configurer WordPress sur les mêmes serveurs distants :

node1: 192.168.0.29
node2: 192.168.0.30

où nous avons installé, activé et démarré Apache (vous savez probablement maintenant pourquoi nous avons choisi de travailler avec un serveur Web comme premier exemple dans le dernier tutoriel).

Je vous encourage fortement à lire la Partie 1 et la Partie 2 avant de continuer afin de vous assurer que vous êtes familier avec les concepts associés à Ansible.

Comment installer et configurer l'outil d'automatisation « Ansible » pour la gestion informatique – Partie 1

Comment utiliser les playbooks Anisble pour automatiser des tâches complexes sur plusieurs serveurs distants – Partie 2

Étape 1 : Présentation des rôles Ansible

À mesure que vous commencez à ajouter de plus en plus de tâches aux jeux, vos Playbooks peuvent devenir de plus en plus difficiles à gérer. Pour cette raison, l'approche recommandée dans ces situations (en fait, dans tous les cas) consiste à utiliser une structure de répertoires contenant les directives de chaque groupe de tâches dans des fichiers distincts.

Cette approche nous permet de réutiliser ces fichiers de configuration dans des projets distincts plus tard. Chacun de ces fichiers définit ce qu'on appelle dans l'écosystème Ansible un rôle.

Dans notre cas, nous allons créer deux rôles. L’une d’elles (appelée wp-dependencies) servira à installer les dépendances WordPress (PHP et MariaDB – pas besoin d’installer Apache car il est déjà installé).

L'autre rôle (nommé wp-install-config) comprendra toutes les tâches nécessaires associées à l'installation et à la configuration de WordPress.

Étape 2 : Création de rôles Ansible

Ansible est livré avec un utilitaire appelé ansible-galaxy qui nous aidera à créer la structure de répertoires pour nos rôles. Nous le ferons dans /etc/ansible/playbooks (que nous avons créé dans la Partie 2) mais en théorie, vous pouvez le configurer dans un autre répertoire si vous le souhaitez.

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

Confirme ensuite les rôles nouvellement créés.

ls -R /etc/ansible/playbooks

Dans l'image ci-dessus, nous pouvons voir que ansible-galaxy a créé deux répertoires portant le même nom que nos rôles, ainsi que d'autres sous-répertoires (defaults, files , gestionnaires, méta, tâches, modèles et vars) et un < fichierREADME.md à l'intérieur de chacun d'eux.

De plus, un fichier YAML nommé main.yml a été créé dans tous les répertoires répertoriés précédemment, à l'exception des fichiers et des modèles.

Nous commencerons par éditer les fichiers de configuration suivants comme indiqué :

1. /etc/ansible/playbooks/wp-dependencies/tasks/main.yml. Notez que nous incluons httpd au cas où vous n'auriez pas suivi les didacticiels précédents de cette 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 (fourni dans ce Pastebin) comme suit et enregistrez-le sur votre machine contrôleur Ansible (comme vous pouvez le voir dans la dernière directive de copie ci-dessus , je l'ai téléchargé dans le répertoire personnel du superutilisateur (/root/wp-config-sample.php).

Important : Veuillez noter que la valeur des variables DB_NAME, DB_USER et DB_PASSWORD sont les mêmes que dans /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. Pour les nouvelles installations de serveur de base de données où le mot de passe root est vide, comme dans ce cas, nous devons malheureusement configurer le mot de passe de l'utilisateur root individuellement sur chaque machine via mysql_secure_installation .

Pour autant que je sache, il n'existe aucune solution de contournement disponible qui vous permettra de configurer le mot de passe root via Ansible au cours de la même étape où vous créez le compte de base de données administrative pour WordPress.

Assurez-vous d'utiliser le même mot de passe sur tous les hôtes, puis copiez les informations d'identification dans /root/.my.cnf (l'emplacement réel peut différer dans votre cas, mais dans tous les cas, il doit correspondre à la valeur du paramètre src pour la tâche Copier ~/.my.cnf vers les nœuds dans /etc/ansible/playbooks/wp-dependencies/tasks/main.yml ).

Dans ce fichier (voir ci-dessus), nous avons supposé que le mot de passe root est YourMariaDBRootPassword.

6. Ensuite, notre playbook (/etc/ansible/playbooks/playbook.yml) aura l'air beaucoup plus organisé et simple par rapport au didacticiel précédent :

cat playbook.yml

- hosts: webservers
  roles:
        - wp-dependencies
        - wp-install-config

Enfin, il est temps d’exécuter ces tâches en appelant notre playbook :

ansible-playbook playbook.yml

Vérifions maintenant si nous pouvons accéder à la page d'administration de WordPress en utilisant les adresses IP de node1 192.168.0.29 et de node2 192.168.0.30 :

Vous pouvez visualiser les deux dernières étapes dans le screencast suivant :

Comme vous pouvez le constater, vous pouvez configurer plusieurs installations WordPress avec peu ou pas d'effort en utilisant Ansible. Vous pouvez ensuite utiliser l'interface utilisateur Admin respective pour configurer chaque site séparément.

Considérations finales

Si vous utilisez une autre distribution pour déployer WordPress, le nom des packages peut varier, mais cela revient à installer le serveur Web Apache, le serveur de base de données MariaDB et le module Python MySQL. Si tel est le cas, utilisez le système de gestion de logiciels de votre distribution pour rechercher le nom exact du package que vous devez installer.

Résumé

Dans cette série, nous avons expliqué comment utiliser Ansible pour exécuter des commandes et exécuter des tâches complexes sur plusieurs machines Linux simultanément.

L’un de ces exemples est la configuration de WordPress, comme nous l’avons évoqué dans ce guide. Que vous soyez administrateur système ou blogueur, j'espère que vous avez trouvé les concepts et les exemples de ce didacticiel utiles.

Bonne chance et n'hésitez pas à nous écrire si vous avez besoin d'aide ou si vous avez des commentaires ou des suggestions !