Installer et activer Nginx automatiquement sur tous les serveurs web de l'inventaire grâce à un rôle Ansible minimaliste.
Installer Nginx (un serveur web léger et très rapide, alternative à Apache) sur tous vos serveurs en lançant une seule commande. Le rendu final : la page « Welcome to nginx » sur le port 80 de chaque serveur.
ansible.cfg, inventaire avec un groupe web, et ansible web -m ping qui répond pong.nginxDepuis la racine de votre projet ansible/ :
mkdir -p roles/nginx/{tasks,handlers,defaults,templates}
Vous obtenez :
roles/nginx/
├── defaults/ (variables par défaut)
├── handlers/ (actions déclenchées à la demande, ex. restart)
├── tasks/ (les tâches à exécuter — c'est ici qu'on écrit)
└── templates/ (fichiers de config dynamiques en .j2)
Pour créer un squelette complet automatiquement : ansible-galaxy init roles/nginx. Voir le tuto créer un rôle.
Créez le fichier des tâches :
nano roles/nginx/tasks/main.yml
Et collez ces 3 tâches :
---
- name: apt update
apt:
update_cache: yes
- name: install nginx
apt:
name: nginx
state: present
- name: enable and start nginx
service:
name: nginx
state: started
enabled: yes
Décryptage :
update_cache: yes — équivalent de apt update.state: present — installe le paquet s'il manque, sinon ne fait rien.enabled: yes — le service redémarrera automatiquement au prochain boot.Le playbook applique le rôle aux bons serveurs. Créez-le :
nano playbooks/deploy_nginx.yml
Contenu :
---
- name: Deploy Nginx Web Server
hosts: web
become: true
roles:
- nginx
hosts: web — cible le groupe web de l'inventaire.become: true — exécute en root via sudo (installation de paquet oblige).Apache et Nginx écoutent par défaut sur le même port. Si Apache (ou un autre serveur web) tourne déjà, Nginx refusera de démarrer.
# Vérifier qui écoute sur le port 80 (sur tous les serveurs)
ansible web -m shell -a "ss -tlnp | grep ':80 ' || echo 'Port 80 libre'"
# Si Apache est installé, le supprimer :
ansible web -m apt -a "name=apache2 state=absent" --become
Si vous voyez apache2 dans la sortie, supprimez-le ou changez le port d'écoute d'Apache avant de continuer.
Depuis la racine du projet, trois étapes (de la plus prudente à la vraie exécution) :
# 1️⃣ Vérifier la syntaxe (gratuit)
ansible-playbook playbooks/deploy_nginx.yml --syntax-check
# 2️⃣ « Dry-run » : simule, ne modifie rien
ansible-playbook playbooks/deploy_nginx.yml --check
# 3️⃣ Déployer pour de vrai
ansible-playbook playbooks/deploy_nginx.yml
À la fin, vous devez voir PLAY RECAP avec failed=0 pour chaque serveur.
ansible web -m shell -a "systemctl is-active nginx"
# attendu : active
curl -I http://< votre IP >
# attendu : HTTP/1.1 200 OK + Server: nginx
http://< votre IP > dans votre navigateur → page « Welcome to nginx ».Le même rôle fonctionne pour 1 ou 1 000 serveurs, sans changer une ligne.
Pour aller plus loin :
nginx.conf.j2 dans templates/ pour pousser votre propre config.restart nginx dans handlers/main.yml, déclenché par notify: restart nginx après modification de la config.