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 :
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 :
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 :
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 :
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.
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 :
Je retiens
- Chaque distribution a ses spécificités : nom du paquet (
apache2vshttpd), gestionnaire (aptvsdnfvszypper), et chemin duDocumentRoot(/var/www/htmlvs/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.
curldepuis le Control Host permet de valider rapidement le déploiement web.
Cheatsheet¶
| Symptôme | Cause probable | Correction |
|---|---|---|
curl rocky → Connection 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)¶
- Docs
ansibleansible.builtin.servicemodule - Docs
ansibleansible.builtin.systemd_service(spécifique systemd) - Docs
ansibleansible.builtin.package(abstraction multi-distros) - Docs
ansibleansible.builtin.copymodule - Docs
ansibleansible.builtin.file(permissions, répertoires) - Docs
ansibleConditionals (when) - Docs
ansibleansible.posix.firewalld(gestion pare-feu RHEL) - Docs Apache httpd
httpd.confet structure
Précédent : 1st Playbook Suite : Handlers