Comment utiliser Ansible pour la gestion des serveurs

Ansible est un outil open-source d’automatisation et de gestion de configuration des serveurs. Il permet d’automatiser le déploiement d’applications, la configuration des systèmes et l’orchestration des tâches complexes sans nécessiter d’agent sur les machines distantes. Grâce à son approche « Infrastructure as Code » (IaC), Ansible simplifie la gestion des infrastructures, qu’elles soient sur site ou dans le cloud.

Dans cet article, nous allons explorer comment utiliser Ansible pour gérer des serveurs, en couvrant les bases de son fonctionnement, son installation, la création de playbooks et quelques cas d’utilisation concrets.


1. Pourquoi choisir Ansible ?

Ansible se distingue par plusieurs avantages :

Agentless : Il n’a pas besoin d’un agent installé sur les serveurs, il utilise SSH.
Facile à apprendre : Utilise des fichiers YAML simples pour la configuration.
Idempotent : Évite d’exécuter plusieurs fois les mêmes actions si elles sont déjà en place.
Extensible : Compatible avec de nombreux modules et systèmes (Linux, Windows, Docker, Kubernetes, Cloud, etc.).


2. Installation d’Ansible

2.1 Installation sur Linux (Debian/Ubuntu)

bashCopierModifiersudo apt update
sudo apt install ansible -y

2.2 Installation sur Linux (CentOS/RHEL)

bashCopierModifiersudo yum install epel-release -y
sudo yum install ansible -y

2.3 Installation sur macOS avec Homebrew

bashCopierModifierbrew install ansible

2.4 Vérification de l’installation

bashCopierModifieransible --version

Sortie attendue :

javaCopierModifieransible [core 2.X.X]
  config file = /etc/ansible/ansible.cfg
  python version = 3.X.X

3. Configurer l’inventaire Ansible

Ansible utilise un fichier d’inventaire (/etc/ansible/hosts par défaut) pour stocker la liste des serveurs à gérer.

3.1 Ajouter des serveurs à l’inventaire

Éditez le fichier /etc/ansible/hosts ou créez un fichier d’inventaire personnalisé (inventory.ini) :

iniCopierModifier[web_servers]
192.168.1.10
192.168.1.11

[database_servers]
db.example.com

[all:vars]
ansible_user=root
ansible_ssh_private_key_file=~/.ssh/id_rsa
  • [web_servers] et [database_servers] sont des groupes de serveurs.
  • ansible_user=root définit l’utilisateur utilisé pour SSH.
  • ansible_ssh_private_key_file définit la clé SSH utilisée pour l’authentification.

4. Tester la connexion avec Ansible

Avant d’exécuter des tâches, testons la connexion aux serveurs :

bashCopierModifieransible all -m ping -i inventory.ini

Si tout fonctionne, vous devriez voir :

rubyCopierModifier192.168.1.10 | SUCCESS => { "ping": "pong" }
192.168.1.11 | SUCCESS => { "ping": "pong" }

5. Exécuter des commandes avec Ansible

Ansible permet d’exécuter des commandes ad hoc sur les serveurs sans utiliser de playbook.

5.1 Exécuter une commande sur un groupe de serveurs

Exemple : Vérifier l’espace disque sur les serveurs web_servers :

bashCopierModifieransible web_servers -m shell -a "df -h" -i inventory.ini

5.2 Mettre à jour les paquets sur tous les serveurs

bashCopierModifieransible all -m apt -a "update_cache=yes upgrade=dist" --become -i inventory.ini

6. Automatiser la gestion des serveurs avec un Playbook Ansible

Un Playbook est un fichier YAML contenant des instructions pour configurer des serveurs.

6.1 Création d’un Playbook pour installer Nginx

Créons un fichier install_nginx.yml :

yamlCopierModifier- name: Installer et configurer Nginx
  hosts: web_servers
  become: true  # Exécute en mode sudo

  tasks:
    - name: Mettre à jour la liste des paquets
      apt:
        update_cache: yes

    - name: Installer Nginx
      apt:
        name: nginx
        state: present

    - name: Démarrer Nginx
      service:
        name: nginx
        state: started
        enabled: yes

6.2 Exécuter le Playbook

bashCopierModifieransible-playbook install_nginx.yml -i inventory.ini

Cela va :

  1. Mettre à jour les paquets
  2. Installer Nginx
  3. Démarrer Nginx et activer son démarrage automatique

7. Gérer la configuration des serveurs

7.1 Modifier un fichier de configuration avec Ansible

Si vous souhaitez modifier /etc/nginx/nginx.conf, vous pouvez utiliser Ansible pour copier un fichier de configuration personnalisé.

Ajoutez cette tâche dans un Playbook :

yamlCopierModifier- name: Copier le fichier de configuration Nginx
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
  notify:
    - Redémarrer Nginx

Créez le fichier nginx.conf.j2 :

nginxCopierModifierworker_processes auto;
events {
    worker_connections 1024;
}
http {
    server {
        listen 80;
        location / {
            root /var/www/html;
            index index.html;
        }
    }
}

Ajoutez un handler pour redémarrer Nginx si la configuration change :

yamlCopierModifierhandlers:
  - name: Redémarrer Nginx
    service:
      name: nginx
      state: restarted

8. Sécuriser les serveurs avec Ansible

Ansible permet d’automatiser les bonnes pratiques de sécurité, comme la désactivation de SSH root ou la configuration du pare-feu.

8.1 Désactiver la connexion root via SSH

Ajoutez cette tâche dans un Playbook :

yamlCopierModifier- name: Désactiver root login SSH
  lineinfile:
    path: /etc/ssh/sshd_config
    regexp: '^PermitRootLogin'
    line: 'PermitRootLogin no'
  notify: Redémarrer SSH

handlers:
  - name: Redémarrer SSH
    service:
      name: ssh
      state: restarted

9. Déploiement d’applications avec Ansible

Vous pouvez automatiser le déploiement d’une application web avec Ansible.

Exemple : Déployer un site web

yamlCopierModifier- name: Déployer un site web
  hosts: web_servers
  become: true

  tasks:
    - name: Copier les fichiers du site
      copy:
        src: ./site/
        dest: /var/www/html/

10. Intégration avec CI/CD

Ansible peut être utilisé avec GitHub Actions, GitLab CI/CD ou Jenkins pour automatiser le déploiement des serveurs.

Exemple d’utilisation avec GitHub Actions (.github/workflows/deploy.yml) :

yamlCopierModifiername: Deploy with Ansible
on: push
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Install Ansible
        run: sudo apt install ansible -y

      - name: Run Ansible Playbook
        run: ansible-playbook -i inventory.ini deploy.yml

Conclusion

Ansible est un outil puissant pour la gestion des serveurs. Grâce à ses playbooks, il permet d’automatiser l’installation, la configuration et la gestion des infrastructures avec simplicité et efficacité.

En intégrant Ansible dans un workflow DevOps, vous réduisez les tâches répétitives et garantissez une configuration cohérente sur vos serveurs. 🚀

4o

O

carle
carle