Skip to main content

Chapitre 11 - Projet Capstone Ansible - Déploiement Automatisé Web/DB


Projet Ansible Ultime - Déploiement Automatisé Web/DB


Table des matières​

01 - Objectif Global du Projet

Ce projet vous guidera dans la création d'une infrastructure complète en utilisant Ansible pour automatiser le déploiement d'un serveur web et d'une base de données. Nous allons :

  • Automatiser l'installation et la configuration des logiciels.
  • Centraliser la gestion des paramètres de configuration (ports, chemins de dossiers, mots de passe).
  • Gérer plusieurs serveurs en une seule commande, au lieu de tout faire manuellement.

02 - Pourquoi utiliser Ansible ?

Sans Ansible :​

Vous devez vous connecter manuellement à chaque machine via SSH :

ssh user@192.168.1.10
sudo apt update && sudo apt install apache2

Si vous avez 20 serveurs ou plus, cela devient une tâche interminable, propice aux erreurs.

Avec Ansible :​

Avec un fichier d’inventaire et un playbook, la même tâche s'exécute sur tous les serveurs :

ansible-playbook -i inventory.ini site.yml

Une seule commande et Ansible fait tout pour vous !

Retour à la table des matières​


03 - Architecture du Projet

La structure des composants de ce projet Ansible est présentée ci-dessous :

                          +-------------------------+
| Machine de Contrôle |
| (Ansible) |
| Ubuntu 22.04 |
+-------------------------+
|
|
-----------------------------------------------------------------
| | | |
+------------------+ +------------------+ +------------------+ +------------------+
| Serveur Web 1 | | Serveur Web 2 | | Serveur DB 1 | | Serveur DB 2 |
| Ubuntu 20.04 | | Ubuntu 20.04 | | Ubuntu 22.04 | | Ubuntu 22.04 |
| IP : 192.168.1.2 | | IP : 192.168.1.3 | | IP : 192.168.1.4 | | IP : 192.168.1.5 |
+------------------+ +------------------+ +------------------+ +------------------+
  • Machine de contrôle : Le serveur ou PC depuis lequel vous exécutez Ansible (votre poste de travail).
  • Serveurs web (node1, node2) : Machines sur lesquelles Apache est installé pour héberger des sites web.
  • Serveurs DB (node3, node4) : Machines sur lesquelles une base de données est installée.

Retour à la table des matières​


04 - Structure du Projet

ansible/
├── inventory.ini # Liste des serveurs gérés par Ansible
├── site.yml # Playbook principal qui orchestre tout
├── group_vars/ # Variables par groupe de serveurs
│ └── web.yml # Variables pour les serveurs web
├── host_vars/ # Variables spécifiques par serveur
│ └── db-ubuntu-01.yml # Variables pour un serveur DB particulier
├── templates/ # Fichiers de configuration modèles (templates)
│ └── apache.conf.j2 # Template de configuration Apache
├── roles/ # Dossier des rôles Ansible
│ └── web/ # Rôle pour les serveurs web
│ ├── tasks/
│ │ └── main.yml # Liste des tâches pour configurer le web
│ └── templates/
│ └── index.html.j2 # Fichier HTML de la page d'accueil
└── README.md # Documentation du projet

Explications :​

  • inventory.ini : Liste des serveurs à gérer.
  • site.yml : Fichier principal qui exécute les rôles (comme web, db).
  • group_vars/ : Variables globales pour chaque type de serveur.
  • host_vars/ : Variables spécifiques à un serveur donné.
  • templates/ : Fichiers modèles pour les configurations (.j2 pour Jinja2).
  • roles/ : Dossiers contenant les rôles (groupes de tâches réutilisables).

Retour à la table des matières​


05 - Étapes pour Démarrer

1. Cloner le Projet​

git clone https://github.com/votre-utilisateur/projet-ansible.git
cd projet-ansible/ansible

Retour à la table des matières​


2. Configurer l’Inventaire​

Le fichier inventory.ini contient la liste des serveurs. Exemple :

[web]
web-ubuntu-01 ansible_host=192.168.1.10 ansible_user=ubuntu

[db]
db-ubuntu-01 ansible_host=192.168.1.20 ansible_user=ubuntu ansible_become=true

Retour à la table des matières​


3. Tester la Connexion SSH​

ansible -i inventory.ini all -m ping

Sortie attendue :

web-ubuntu-01 | SUCCESS => { "ping": "pong" }

Retour à la table des matières​


4. Exécuter le Playbook​

ansible-playbook -i inventory.ini site.yml

06 - Contenu des Fichiers Clés

1. site.yml​

Ce fichier orchestre le déploiement des rôles :

- name: Déployer l’infrastructure Web et DB
hosts: all
become: true
roles:
- web
- db

Retour à la table des matières​


2. roles/web/tasks/main.yml​

Configuration du serveur Apache :

- name: Installer Apache
ansible.builtin.apt:
name: apache2
state: present

- name: Copier la configuration Apache
ansible.builtin.template:
src: apache.conf.j2
dest: /etc/apache2/sites-available/000-default.conf
mode: "0644"

- name: Activer et démarrer Apache
ansible.builtin.service:
name: apache2
state: started
enabled: true

Retour à la table des matières​


3. group_vars/web.yml​

Variables globales pour tous les serveurs web :

apache_port: 80
document_root: /var/www/html

Retour à la table des matières​


07 - Gestion des Secrets avec Ansible Vault 🔒

Pour protéger les mots de passe sensibles :

  1. Créer un fichier sécurisé :
    ansible-vault create secrets.yml
  2. Ajouter un mot de passe :
    vault_db_password: "supersecurise123"
  3. Exécuter le playbook avec le mot de passe :
    ansible-playbook -i inventory.ini site.yml --ask-vault-pass

Retour à la table des matières​


08 - Commandes Utiles 💡

  • Lister les serveurs du groupe web :
    ansible web -i inventory.ini --list-hosts
  • Exécuter une commande sur tous les serveurs :
    ansible all -m command -a "df -h" -i inventory.ini

Retour à la table des matières​


09 - Extension du Projet : Ajout du Monitoring avec Grafana 🔧

1. Créer le Dossier du Rôle Monitoring​

mkdir -p roles/monitoring/tasks
nano roles/monitoring/tasks/main.yml

2. Contenu du Fichier main.yml​

- name: Installer Grafana
ansible.builtin.apt:
name: grafana
state: present

- name: Démarrer le service Grafana
ansible.builtin.service:
name: grafana
state: started
enabled: true

Retour à la table des matières​


10 - Résultat Final 🎯

Après avoir exécuté le playbook, vous pourrez :

  • Accéder aux serveurs web via leur adresse IP :
    curl http://192.168.1.10
    Sortie attendue :
    <h1>Bienvenue sur le serveur web !</h1>

Retour à la table des matières​


11 - Pourquoi Ce Projet Est Puissant ? 📈

  • Automatisation complète : déploiement de l’infrastructure en une seule commande.
  • Fiabilité : mêmes configurations sur tous les serveurs, aucune incohérence.
  • Sécurité : les secrets sont protégés avec ansible-vault.
  • Modularité : possibilité d’ajouter de nouveaux services avec des rôles.

Retour à la table des matières​


12 - Rejoignez la Communauté 🔗

💬 Rejoignez-nous sur GitHub Discussions.
⭐ Laissez une étoile si ce projet vous aide !


11 - Références utiles

Documentation officielle