Lab Ansible Débutant : découvrir Ansible par la pratique avec SSH, Playbooks, Apache et MariaDB

Quand on parle d’automatisation, on fait souvent référence à Ansible. Pourtant, il peut parfois sembler complexe à comprendre au premier abord, et il n’est pas toujours évident de visualiser concrètement son utilité dans un environnement informatique.

À travers ce premier lab de découverte, je vous propose de découvrir Ansible par la pratique, en réalisant pas à pas plusieurs actions simples et concrètes sur des serveurs Linux.

Vous apprendrez notamment à :

  • configurer une connexion SSH par clés ;
  • créer un inventaire Ansible ;
  • tester la connectivité des machines ;
  • exécuter vos premiers playbooks ;
  • automatiser les mises à jour Debian ;
  • déployer Apache ;
  • installer et configurer MariaDB.

L’objectif de ce lab est de vous montrer qu’Ansible n’est pas réservé aux grandes infrastructures, mais qu’il peut rapidement devenir un outil simple, puissant et très utile au quotidien.

Consignes du Lab

Objectif

Découvrir les bases d’Ansible en administrant plusieurs serveurs Debian depuis un serveur de contrôle.

Environnement disponible

Vous disposez de :

  • 1 serveur de contrôle avec Ansible a installé
  • 2 clients Debian
    • ansible-client1
    • ansible-client2

Informations de connexion

  • Utilisateur : root
  • Mot de passe : formation

Ce que vous allez réaliser

  1. Générer une clé SSH
  2. Configurer l’accès aux clients
  3. Installer Ansible et créer un inventaire YAML
  4. Tester la connexion avec ansible ping
  5. Créer votre premier playbook
  6. Mettre à jour les serveurs Debian
  7. Installer Apache sur un client
  8. Installer MariaDB sur un autre client

Conseils

  • Relancez les playbooks plusieurs fois pour observer l’idempotence.
  • Prenez le temps de lire les retours des commandes.
  • Vérifiez la syntaxe YAML (indentation importante).

Ressources


🧪 Lab · membre · 30 min

🧪 Lancer le lab
Voir la solutionMasquer la solution

1. Créer un jeu de cle de privee / publique pour la connexion ssh, ne pas mettre de mot de passe (passphrase)

ssh-keygen -t ed25519 -C "ansible@control-serveur"

2. Localiser les clients à l’aide de la commande ping et noter les IP, les clients sont ansible ansible-client1 et ansible-client2

ping ansible-client1
ping ansible-client2

3. Se connecter aux clients et ajouter la cle publique, le compte a utiliser est root et mot de passe formation.

# Pour le client1
ssh root@ansible-client1
# Dans le dossier .ssh ouvrir le fichier authorized_keys
nano .ssh/authorized_keys
# Coller ensuite le cle publique et repeter l'operation

4. Installer Ansible et créer le fichier d inventaire au format yaml, pour des raisons de facilite, on va créer un dossier

apt update
apt install ansible
mkdir ansible
cd ansible
# Créer le fichier inventaire.yaml
nano inventaire.yaml
# inventaire.yaml
all:
  hosts:
    ansible-client1:
      ansible_host: <IP>
    ansible-client2:
      ansible_host: <IP>

5. Test client avec ansible ping

ansible all -i /root/ansible/inventaire.yaml -m ping -vv

6. Transformer ansible ping en playbook

# Créer le fichier playbook_ping.yaml dans le dossier ansible
nano playbook_ping.yaml
# playbook_ping.yaml
---
- name: Vérification de la connectivité des hôtes
  hosts: all
  tasks:
    - name: Envoyer un ping Ansible aux machines
      ping:
# Executer le playbook
ansible-playbook /root/ansible/playbook_ping.yaml -i /root/ansible/inventaire.yaml -v

7. Créer un playbook pour installer les maj sur les serveurs, Debian, afin de simuler un environnement plus large, on édite en premier le fichier d’inventaire pour créer un group Debian

# inventaire.yaml
all:
  hosts:
    ansible-client1:
      ansible_host: <IP>
    ansible-client2:
      ansible_host: <IP>
  children:
    debian:
      hosts:
        ansible-client1:
        ansible-client2:
# playbook_debian_update.yaml
---
- name: Mise à jour complète des serveurs Debian
  hosts: debian
  become: yes

  tasks:
    - name: Actualiser le cache apt et mettre à jour tous les paquets
      apt:
        update_cache: yes
        upgrade: dist
# Executer le playbook
ansible-playbook /root/ansible/playbook_debian_update.yaml -i /root/ansible/inventaire.yaml -v

8. Installation Apache sur client 1 avec Ansible en utilisant un playbook puis MariaDB sur le client 2
On commence par éditer le fichier d’inventaire pour créer deux nouveaux groupes

# inventaire.yaml
all:
  hosts:
    ansible-client1:
      ansible_host: <IP>
    ansible-client2:
      ansible_host: <IP>
  children:
    debian:
      hosts:
        ansible-client1:
        ansible-client2:
    webservers:
      hosts:
        ansible-client1:
    databases:
      hosts:
        ansible-client2:

Création du playbook pour installer Apache :

#playbook_apache_install.yaml
---
- name: Installer Apache
  hosts: webservers
  become: yes

  tasks:

    - name: Installer Apache2
      apt:
        name: apache2
        state: present
        update_cache: yes

    - name: Démarrer Apache
      service:
        name: apache2
        state: started
        enabled: yes

Création du playbook MariaDB pour l’installation et la configuration

#playbook_mariadb_install.yaml
---
- name: Installer et configurer MariaDB
  hosts: databases
  become: yes

  vars:
    mysql_root_password: SuperRoot123!
    app_db: appdb
    app_user: appuser
    app_password: AppPass123!

  tasks:

    - name: Installer MariaDB
      apt:
        name:
          - mariadb-server
          - python3-pymysql
        state: present
        update_cache: yes

    - name: Démarrer MariaDB
      service:
        name: mariadb
        state: started
        enabled: yes

    - name: Définir mot de passe root
      community.mysql.mysql_user:
        name: root
        host: localhost
        password: "{{ mysql_root_password }}"
        login_unix_socket: /run/mysqld/mysqld.sock
        check_implicit_admin: true
        priv: "*.*:ALL,GRANT"

    - name: Supprimer base test
      community.mysql.mysql_db:
        name: test
        state: absent
        login_user: root
        login_password: "{{ mysql_root_password }}"

    - name: Créer base applicative
      community.mysql.mysql_db:
        name: "{{ app_db }}"
        state: present
        login_user: root
        login_password: "{{ mysql_root_password }}"

    - name: Créer utilisateur applicatif
      community.mysql.mysql_user:
        name: "{{ app_user }}"
        password: "{{ app_password }}"
        priv: "{{ app_db }}.*:ALL"
        host: "%"
        state: present
        login_user: root
        login_password: "{{ mysql_root_password }}"

Exécuter les playbooks :

ansible-playbook /root/ansible/playbook_apache_install.yaml -i /root/ansible/inventaire.yaml -v
ansible-playbook /root/ansible/playbook_mariadb_install.yaml -i /root/ansible/inventaire.yaml -v