
Installe Nginx (ou Apache) sur un noeud géré
Découvrez comment utiliser Ansible pour installer un serveur web comme Nginx ou Apache sur vos noeuds gérés, une étape clé de l'automatisation de déploiement.
Le rôle d'Ansible dans l'installation de logiciels serveur
L'une des tâches les plus fondamentales en administration système est l'installation de logiciels. Lorsqu'il s'agit de mettre en place un serveur web, que ce soit Nginx, Apache, ou un autre, Ansible simplifie et standardise ce processus. Au lieu de vous connecter manuellement à chaque serveur et d'exécuter les commandes spécifiques au gestionnaire de paquets de la distribution, vous décrivez l'état souhaité (par exemple, "Nginx doit être installé") dans un playbook, et Ansible se charge du reste.
Cette sous-partie de notre playbook se concentre spécifiquement sur l'installation du logiciel serveur web. Nous allons explorer comment utiliser les modules Ansible dédiés à la gestion des paquets pour installer Nginx ou Apache de manière idempotente. L'idempotence signifie que si le serveur web est déjà installé, Ansible ne tentera pas de le réinstaller, il s'assurera simplement qu'il est présent.
Cette tâche nécessite généralement des privilèges administratifs (root ou sudo), c'est pourquoi la directive become: true est souvent utilisée au niveau du jeu (play) ou de la tâche spécifique dans Ansible.
Utilisation du module `package` pour une installation portable
Ansible fournit un module générique nommé ansible.builtin.package qui tente d'utiliser le gestionnaire de paquets approprié pour le système d'exploitation du noeud géré. C'est un excellent choix si vous souhaitez que votre playbook soit portable entre différentes distributions Linux (par exemple, Debian, Ubuntu, CentOS, Fedora).
Pour installer Nginx en utilisant ce module, la tâche dans votre playbook ressemblerait à ceci :
- name: Installer Nginx (méthode portable)
ansible.builtin.package:
name: nginx
state: present
update_cache: yes # Particulièrement utile pour les systèmes basés sur aptSi vous souhaitiez installer Apache, vous adapteriez le nom du paquet. Sur les systèmes Debian/Ubuntu, le paquet Apache s'appelle généralement apache2. Sur les systèmes basés sur Red Hat (comme CentOS), il s'appelle souvent httpd.
- name: Installer Apache (méthode portable, exemple pour Debian/Ubuntu)
ansible.builtin.package:
name: apache2 # Remplacer par httpd pour CentOS/RHEL
state: present
update_cache: yesLe paramètre state: present indique à Ansible de s'assurer que le paquet est installé. S'il ne l'est pas, Ansible l'installera. S'il est déjà installé, Ansible ne fera rien et la tâche sera marquée comme ok. L'option update_cache: yes est une bonne pratique, surtout pour les systèmes utilisant apt (comme Debian et Ubuntu), car elle demande au module de rafraîchir le cache des paquets disponibles avant de tenter l'installation. Pour yum ou dnf, ce paramètre peut être géré différemment ou être moins critique, mais son inclusion ne cause généralement pas de problèmes.
Utilisation de modules spécifiques au gestionnaire de paquets
Si vous savez que vos noeuds gérés utilisent une famille de systèmes d'exploitation spécifique, vous pouvez utiliser les modules Ansible dédiés à leur gestionnaire de paquets. Cela peut vous donner un contrôle plus fin sur les options d'installation.
Par exemple, pour installer Nginx sur un système Debian ou Ubuntu en utilisant le module ansible.builtin.apt :
- name: Installer Nginx avec apt (pour Debian/Ubuntu)
ansible.builtin.apt:
name: nginx
state: present
update_cache: yes
cache_valid_time: 3600 # Optionnel: ne met à jour le cache que s'il est plus vieux d'une heureEt pour installer Apache (httpd) sur un système CentOS ou RHEL en utilisant le module ansible.builtin.yum (ou ansible.builtin.dnf pour les versions plus récentes) :
- name: Installer Apache httpd avec yum (pour CentOS/RHEL)
ansible.builtin.yum: # ou ansible.builtin.dnf
name: httpd
state: present
# yum/dnf gèrent souvent la mise à jour du cache différemment, 'update_cache' n'est pas un paramètre direct ici
# Vous pourriez utiliser 'disablerepo' ou 'enablerepo' si nécessaire pour des dépôts spécifiques.L'avantage d'utiliser un module spécifique est l'accès à tous les paramètres propres à ce gestionnaire de paquets, comme cache_valid_time pour apt, ou des options de gestion de dépôts pour yum/dnf.
Intégration dans le Playbook et considérations
Dans le contexte de notre playbook complet pour déployer une application web statique, cette tâche d'installation sera l'une des premières. Elle doit s'exécuter avant les tâches de configuration du service ou de copie de fichiers, car ces dernières dépendent de la présence du serveur web.
Voici comment cette tâche pourrait s'intégrer dans un jeu (play) Ansible :
- hosts: webservers
become: true
tasks:
- name: Définir le nom du paquet serveur web selon l'OS
ansible.builtin.set_fact:
web_package_name: "{{ 'nginx' if ansible_os_family == 'Debian' or ansible_os_family == 'Suse' else ('httpd' if ansible_os_family == 'RedHat' else 'nginx') }}"
# Cet exemple est simplifié; une gestion plus robuste des noms de paquets pourrait être nécessaire
- name: Installer le serveur web (Nginx ou Apache/httpd)
ansible.builtin.package:
name: "{{ web_package_name }}"
state: present
update_cache: yes
when: ansible_os_family == "Debian" or ansible_os_family == "Ubuntu" # Conditionner update_cache si besoin
# Tâche alternative si update_cache n'est pas souhaité pour d'autres OS avec 'package'
- name: Installer le serveur web (Nginx ou Apache/httpd) pour autres OS
ansible.builtin.package:
name: "{{ web_package_name }}"
state: present
when: not (ansible_os_family == "Debian" or ansible_os_family == "Ubuntu")
# ... autres tâches (gestion du service, copie de fichiers)Dans cet exemple plus élaboré, nous utilisons ansible.builtin.set_fact pour déterminer le nom du paquet du serveur web (web_package_name) en fonction de la famille du système d'exploitation (ansible_os_family). C'est une façon de rendre le playbook plus flexible si vous devez gérer des parcs hétérogènes. La tâche d'installation utilise ensuite cette variable. Nous avons également scindé la tâche d'installation en deux avec des conditions when pour appliquer update_cache: yes de manière plus ciblée, car son comportement ou sa nécessité peut varier avec le module package selon le gestionnaire sous-jacent.
Choisir entre Nginx et Apache dépendra de vos besoins spécifiques, de vos préférences ou des exigences de l'application que vous déployez. Ansible vous offre la flexibilité d'installer l'un ou l'autre avec une approche similaire. L'essentiel est de s'assurer que le paquet est correctement nommé et que le module de gestion de paquets approprié est utilisé ou que le module package est capable de le gérer sur vos systèmes cibles.