Étude de cas: Déploiement d'une application web avec Ansible

Dans cette étude de cas, nous allons déployer une application web simple en utilisant Ansible. Nous allons couvrir les étapes suivantes:

  1. Préparation de l'inventaire Ansible
  2. Création de playbooks pour le déploiement
  3. Gestion des variables et des templates
  4. Exécution des playbooks et vérification du déploiement

Étape 0: Création de l'environnement

Avant de commencer, assurez-vous d'avoir un environnement de test avec:

  • Un serveur web (par exemple, une machine virtuelle avec Apache ou Nginx)
  • Un serveur de base de données (par exemple, MySQL ou PostgreSQL)
  • Un poste de contrôle Ansible avec accès SSH aux serveurs

Vous pouvez réutiliser les machines virtuelles créées dans la partie pratique du cours de la semaine 10.

Une fois les machines démarrées, connectez-vous à la machine ansible-controller via SSH (cela permettra de pouvoir copier/coller depuis votre machine hôte). Créez un nouveau répertoire pour votre projet Ansible et naviguez à l'intérieur:

cd ~
mkdir ansible-web-deployment
cd ansible-web-deployment

Étape 1: Préparation de l'inventaire Ansible

Créez un fichier d'inventaire Ansible nommé hosts.ini avec le contenu suivant:

[webservers]
webserver1 ansible_host=192.168.56.11
[dbservers]
dbserver1 ansible_host=192.168.56.12

[all:vars]
ansible_user=ansible
ansible_ssh_pass=Ansible123!
ansible_become_pass=Ansible123!

Créez également un fichier de configuration Ansible nommé ansible.cfg avec le contenu suivant:

[defaults]
inventory = hosts.ini
host_key_checking = False

Étape 2: Création des playbooks pour le déploiement

Créez un playbook Ansible nommé deploy_app.yml pour déployer l'application web:

---
- name: Déploiement de l'application web
  hosts: webservers
  become: yes
  tasks:
    - name: Installer Apache
      apt:
        name: apache2
        state: present
    - name: Démarrer le service Apache
      service:
        name: apache2
        state: started
        enabled: yes
- name: Configuration de la base de données
  hosts: dbservers
  become: yes
  tasks:
    - name: Installer MySQL
      apt:
        name: mysql-server
        state: present
    - name: Démarrer le service MySQL
      service:
        name: mysql
        state: started
        enabled: yes

Explications:

  • Le premier play ("Déploiement de l'application web") déploie et configure le serveur web Apache sur les serveurs situés dans le groupe webservers du fichier d'inventaire.
    • Ce play fait 2 tâches: installer Apache et démarrer le service Apache.
  • Le second play ("Configuration de la base de données") installe et configure le serveur de base de données MySQL sur les serveurs situés dans le groupe dbservers du fichier d'inventaire.
    • Ce play fait 2 tâches: installer MySQL et démarrer le service MySQL.

Étape 3: Exécution des playbooks et vérification du déploiement

Exécutez le playbook deploy_app.yml en utilisant la commande suivante:

ansible-playbook deploy_app.yml

Après l'exécution du playbook, vérifiez que l'application web est accessible via un navigateur en utilisant l'adresse IP du serveur web. Assurez-vous que le tout a fonctionné correctement:

  1. Sur votre machine hôte, ouvrez un navigateur web et accédez à l'adresse http://192.168.56.11 (remplacez cette adresse par celle de votre serveur web, soit le node 1). Vous devriez voir la page par défaut d'Apache s'afficher.
  2. Pour en avoir définitivement le cœur net (et pour tester un peu nos commandes Ansible), exécutez la commande suivante depuis votre machine de contrôle Ansible pour vérifier que le service Apache est en cours d'exécution sur le serveur web:
ansible webservers -m service -a "name=apache2 state=started" --check

Cela utilise le module service de Ansible pour vérifier que le service Apache est bien démarré. L'option -a permet de spécifier les arguments à passer au module. L'option --check permet d'exécuter la commande en mode "check", ce qui signifie qu'Ansible ne fera que simuler l'exécution sans apporter de modifications réelles. Ici, on a utilisé le mode ad-hoc d'Ansible pour exécuter une commande rapide sans avoir à créer un playbook complet. 3. De même, vous pouvez vérifier que le service MySQL est en cours d'exécution sur le serveur de base de données avec la commande suivante:

ansible dbservers -m service -a "name=mysql state=started" --check
  1. Finalement, pour vérifier que MySQL est bien installé et fonctionne, vous pouvez vous connecter au serveur de base de données et exécuter une commande MySQL simple. Connectez-vous au serveur de base de données :
ssh ansible@192.168.56.12

Connez-vous à MySQL en utilisant le compte root (le mot de passe est "vagrant"):

sudo mysql -u root -p

Entrez tout d'abord le mot de passe de l'utilisateur ansible lorsque vous y êtes invité (soit Ansible123!), puis le mot de passe root de MySQL (appuyez simplement sur Entrée si le mot de passe est vide).

Une fois connecté, testez quelques commandes SQL :

SHOW DATABASES;
SELECT VERSION();
EXIT;

Étape 4: Utilisation de register et debug

Pour mieux comprendre le déroulement de votre playbook, vous pouvez utiliser les modules register et debug. Le module register permet de capturer la sortie d'une tâche, tandis que le module debug permet d'afficher cette sortie. Voici un exemple d'utilisation de register et debug dans votre playbook:

---
- name: Déploiement de l'application web
  hosts: webservers
  become: yes
  tasks:
    - name: Installer Apache
      apt:
        name: apache2
        state: present
      register: apache_install # Nouvelle ligne pour capturer la sortie
    - name: Démarrer le service Apache
      service:
        name: apache2
        state: started
        enabled: yes
      register: apache_service # Nouvelle ligne pour capturer la sortie
      # 2 nouvelles tâches pour afficher les résultats
    - name: Afficher le résultat de l'installation d'Apache
      debug:
        var: apache_install 
    - name: Afficher le résultat du démarrage du service Apache
      debug:
        var: apache_service 
- name: Configuration de la base de données  
  hosts: dbservers
  become: yes
  tasks:
    - name: Installer MySQL
      apt:
        name: mysql-server
        state: present
      register: mysql_install # Nouvelle ligne pour capturer la sortie
    - name: Démarrer le service MySQL
      service:
        name: mysql
        state: started
        enabled: yes
      register: mysql_service # Nouvelle ligne pour capturer la sortie
      # 2 nouvelles tâches pour afficher les résultats
    - name: Afficher le résultat de l'installation de MySQL
      debug:
        var: mysql_install 
    - name: Afficher le résultat du démarrage du service MySQL
      debug:
        var: mysql_service

Explications:

  • Chaque tâche utilise le module register pour capturer son résultat dans une variable (par exemple, apache_install pour l'installation d'Apache).
  • Ensuite, le module debug est utilisé pour afficher le contenu de ces variables, ce qui vous permet de voir les détails de l'exécution de chaque tâche.

Fin

Une fois que vous avez terminé ces étapes, vous pouvez quitter la machine de contrôle avec la commande exit.