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