Ansible pour debutants : automatiser sa config serveur

Credit : Illustration backtotheweb.fr

Ansible pour debutants : automatiser sa config serveur

Dylan D. — Agent Support Technique Serveur DevOps 528 mots 3 min

Ansible pour debutants : automatiser sa config serveur

Suite à pas mal de questions reçues par mail, voici un guide complet.

Ansible est un outil d'automatisation agentless : il se connecte en SSH a vos serveurs et execute des taches. Pas de client a installer, juste Python sur les machines cibles.

Installation

# Sur votre machine locale (pas sur les serveurs)
sudo apt install pipx
pipx install ansible-core

# Verifier
ansible --version

L'inventaire

L'inventaire liste vos serveurs. Creez inventory.yml :

all:
  children:
    webservers:
      hosts:
        web1:
          ansible_host: 203.0.113.10
          ansible_user: deploy
        web2:
          ansible_host: 203.0.113.11
          ansible_user: deploy
    databases:
      hosts:
        db1:
          ansible_host: 203.0.113.20
          ansible_user: deploy
  vars:
    ansible_python_interpreter: /usr/bin/python3

Testez la connexion :

ansible all -i inventory.yml -m ping

Premier playbook

Un playbook decrit l'etat souhaite de vos serveurs. Creez setup.yml :

---
- name: Configuration de base des serveurs web
  hosts: webservers
  become: yes

  vars:
    packages:
      - nginx
      - php8.2-fpm
      - php8.2-mysql
      - php8.2-curl
      - php8.2-xml
      - certbot
      - python3-certbot-nginx

  tasks:
    - name: Mettre a jour le cache APT
      apt:
        update_cache: yes
        cache_valid_time: 3600

    - name: Installer les paquets requis
      apt:
        name: "{{ packages }}"
        state: present

    - name: Demarrer et activer Nginx
      systemd:
        name: nginx
        state: started
        enabled: yes

    - name: Demarrer et activer PHP-FPM
      systemd:
        name: php8.2-fpm
        state: started
        enabled: yes

    - name: Copier la config Nginx
      template:
        src: templates/nginx-site.conf.j2
        dest: /etc/nginx/sites-available/monsite.conf
      notify: Recharger Nginx

    - name: Activer le site
      file:
        src: /etc/nginx/sites-available/monsite.conf
        dest: /etc/nginx/sites-enabled/monsite.conf
        state: link
      notify: Recharger Nginx

  handlers:
    - name: Recharger Nginx
      systemd:
        name: nginx
        state: reloaded

Executez-le :

ansible-playbook -i inventory.yml setup.yml

Les templates Jinja2

Creez templates/nginx-site.conf.j2 :

server {
    listen 80;
    server_name {{ domain_name }};
    root /var/www/{{ domain_name }}/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Organiser avec des roles

Les roles structurent votre code Ansible :

mkdir -p roles/nginx/{tasks,templates,handlers,defaults}

roles/nginx/defaults/main.yml :

nginx_worker_processes: auto
nginx_worker_connections: 1024

roles/nginx/tasks/main.yml :

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

- name: Deployer la config principale
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
  notify: Recharger Nginx

roles/nginx/handlers/main.yml :

- name: Recharger Nginx
  systemd:
    name: nginx
    state: reloaded

Utilisez le role dans votre playbook :

- hosts: webservers
  become: yes
  roles:
    - nginx
    - php
    - certbot

Modules utiles

# Gestion de fichiers
- copy: src=fichier dest=/chemin
- file: path=/chemin state=directory mode='0755'
- lineinfile: path=/etc/ssh/sshd_config regexp='^PermitRootLogin' line='PermitRootLogin no'

# Gestion des utilisateurs
- user: name=deploy shell=/bin/bash groups=sudo append=yes
- authorized_key: user=deploy key="{{ lookup('file', '~/.ssh/id_ed25519.pub') }}"

# Cron
- cron: name='Backup quotidien' hour='2' minute='0' job='/opt/scripts/backup.sh'

Deployer sur des serveurs IONOS

Les VPS IONOS sont parfaitement compatibles avec Ansible. Apres avoir provisionne vos serveurs IONOS, ajoutez-les a votre inventaire avec leur IP publique et configurez l'acces SSH par cle.

# Deployer sur tous les serveurs IONOS en une commande
ansible-playbook -i inventory.yml site.yml --diff

L'option --diff montre les changements effectues. Utilisez --check pour simuler sans appliquer.

Ansible est ideal pour garantir la coherence de vos serveurs et reproduire rapidement un environnement.

# Articles similaires

// newsletter

Cet article vous a aide ? Recevez les prochains par email.