É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:
- Préparation de l'inventaire Ansible
- Création de playbooks pour le déploiement
- Gestion des variables et des templates
- 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
webserversdu 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
dbserversdu 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:
- 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. - 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
- 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
registerpour capturer son résultat dans une variable (par exemple,apache_installpour l'installation d'Apache). - Ensuite, le module
debugest 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.