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=rootdéfinit l’utilisateur utilisé pour SSH.ansible_ssh_private_key_filedé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 :
- Mettre à jour les paquets
- Installer Nginx
- 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

















