Skip to content

Compte rendu de TP : Déploiement d'Apache sur un parc hétérogène (Atelier 10)

Objectif

Écrire et exécuter des playbooks ansible adaptés à différentes distributions Linux (Debian, Rocky Linux, SUSE Linux) pour installer Apache, s'assurer que le service est démarré et activé au démarrage, et déployer une page web personnalisée sur chaque système.

Durée

~40 minutes (3 playbooks + validation)

Objectif du TP

L'objectif de cet atelier est d'écrire et d'exécuter des playbooks ansible adaptés à différentes distributions Linux (Debian, Rocky Linux, SUSE Linux). Il s'agit d'installer le serveur web Apache, de s'assurer que le service est démarré et activé au démarrage, et de déployer une page web personnalisée pour chaque système.


1. Préparation de l'environnement

Après avoir démarré les machines de l'atelier (vagrant up) et nous être connectés au Control Host (vagrant ssh ansible), nous naviguons vers le répertoire du projet pour charger automatiquement l'environnement via direnv :

cd ~/ansible/projets/ema/
La configuration et l'inventaire étant déjà prêts, nous nous déplaçons dans le dossier des playbooks pour commencer l'écriture :
cd playbooks


2. Playbook pour Debian

Sur Debian, le gestionnaire de paquets est apt. Le nom du paquet et du service est apache2. Le répertoire web par défaut est /var/www/html. Il est également recommandé de mettre à jour le cache des paquets avant l'installation.

Nous créons le fichier apache-debian.yml :

---
# apache-debian.yml
- hosts: debian
  tasks:
    - name: Update package information
      apt:
        update_cache: true
        cache_valid_time: 3600

    - name: Install Apache
      apt:
        name: apache2
        state: present

    - name: Start & enable Apache
      service:
        name: apache2
        state: started
        enabled: true

    - name: Install custom web page
      copy:
        dest: /var/www/html/index.html
        mode: '0644'
        content: |
          <!doctype html>
          <html>
            <head>
              <meta charset="utf-8">
              <title>Debian</title>
            </head>
            <body>
              <h1>Apache web server running on Debian Linux</h1>
            </body>
          </html>
...

Exécution du playbook :

ansible-playbook apache-debian.yml


3. Playbook pour Rocky Linux

Sur Rocky Linux (famille RedHat), le gestionnaire de paquets est dnf. Le nom du paquet et du service pour Apache est httpd. Le répertoire web par défaut reste /var/www/html. Contrairement à Debian, il n'est pas nécessaire de rafraîchir le cache des paquets manuellement.

Nous créons le fichier apache-rocky.yml :

---
# apache-rocky.yml
- hosts: rocky
  tasks:
    - name: Install Apache
      dnf:
        name: httpd
        state: present

    - name: Start & enable Apache
      service:
        name: httpd
        state: started
        enabled: true

    - name: Install custom web page
      copy:
        dest: /var/www/html/index.html
        mode: '0644'
        content: |
          <!doctype html>
          <html>
            <head>
              <meta charset="utf-8">
              <title>Rocky Linux</title>
            </head>
            <body>
              <h1>Apache web server running on Rocky Linux</h1>
            </body>
          </html>
...

Exécution du playbook :

ansible-playbook apache-rocky.yml


4. Playbook pour SUSE Linux

Sur SUSE Linux, le gestionnaire de paquets est zypper. Le paquet et le service se nomment apache2 (comme sous Debian). La grande différence est l'emplacement par défaut de la racine web (DocumentRoot), qui se situe dans /srv/www/htdocs.

Nous créons le fichier apache-suse.yml :

---
# apache-suse.yml
- hosts: suse
  tasks:
    - name: Install Apache
      zypper:
        name: apache2
        state: present

    - name: Start & enable Apache
      service:
        name: apache2
        state: started
        enabled: true

    - name: Install custom web page
      copy:
        dest: /srv/www/htdocs/index.html
        mode: '0644'
        content: |
          <!doctype html>
          <html>
            <head>
              <meta charset="utf-8">
              <title>SUSE Linux</title>
            </head>
            <body>
              <h1>Apache web server running on SUSE Linux</h1>
            </body>
          </html>
...

Exécution du playbook :

ansible-playbook apache-suse.yml
Exécution des trois playbooks


5. Validation et nettoyage

Afin de vérifier le bon fonctionnement de nos trois déploiements, nous utilisons la commande curl depuis le nœud de contrôle pour interroger chaque serveur web.

curl debian
curl rocky
curl suse
Validation du rendu des trois sites Chaque commande doit nous renvoyer le code HTML de la page personnalisée correspondante.

Une fois la validation terminée, nous nous déconnectons du Control Host et supprimons les ressources du laboratoire :

exit
vagrant destroy -f

Je retiens

  • Chaque distribution a ses spécificités : nom du paquet (apache2 vs httpd), gestionnaire (apt vs dnf vs zypper), et chemin du DocumentRoot (/var/www/html vs /srv/www/htdocs).
  • Un playbook par distribution fonctionne mais génère de la duplication -- les workshops suivants montrent comment factoriser avec des variables et des conditions.
  • curl depuis le Control Host permet de valider rapidement le déploiement web.

Cheatsheet

Symptôme Cause probable Correction
curl rockyConnection refused alors que le playbook s'est bien exécuté Le service est démarré mais un pare-feu local (firewalld sur Rocky, ufw sur Ubuntu) bloque le port 80 Ouvrir le port : ajouter une tâche ansible.posix.firewalld: service=http permanent=true state=enabled immediate=yes (selon la distro)
Après un reboot, Apache ne redémarre pas automatiquement enabled: true oublié sur le service Vérifier la tâche service: contient enabled: true (pas seulement started)
SUSE : page 404 alors que le playbook a déployé index.html DocumentRoot par défaut sous SUSE est /srv/www/htdocs, pas /var/www/html Utiliser le bon chemin de destination dans la tâche copy (déjà corrigé dans apache-suse.yml)
Maintenance : changer la page impose d'éditer 3 playbooks Duplication inter-distro Factoriser avec des variables par famille d'OS + module package générique (cf. Workshop 13)
apt: name=apache2 state=present → « Unable to acquire the dpkg frontend lock » apt est en cours d'utilisation (unattended-upgrades, autre session) Attendre la fin du verrou, ou ajouter une attente : ansible.builtin.wait_for / rejouer après quelques secondes

Sources (principales)


Précédent : 1st Playbook Suite : Handlers