Guide Ansible : Créer un Playbook Ansible pour la pile LEMP

Ansible est un outil d’automatisation simple qui permet d’automatiser le déploiement d’applications logicielles, le provisionnement du cloud et la gestion de la configuration. C’est un outil d’orchestration de serveurs qui t’aide à gérer et à contrôler un grand nombre de nœuds de serveurs à partir d’endroits uniques appelés  » Machines de contrôle « . Ansible a été créé par Michael DeHaan en 2012 et est écrit en Python et Powershell.

Dans ce tutoriel, nous allons te montrer comment créer un Playbook Ansible de base pour provisionner la pile LEMP sur le serveur Ubuntu 18.04. Tu apprendras comment créer un Playbook Ansible de base qui peut être mis à l’échelle pour d’autres applications de projets PHP comme WordPress, Nextcloud, etc.

Conditions préalables

  • 2 OS Ubuntu.
    • 10.5.5.20 ansible
    • 10.5.5.26 provision
  • Connaissance de l’utilisation de base d’Ansible
  • Privilèges de racine

Ce que nous allons faire :

  1. Configurer le projet Ansible Playbook
  2. Générer la structure de répertoire des rôles du Playbook Ansible
  3. Configurer les hôtes et le site.yml
  4. Configuration des rôles ‘common’ – Configuration de base
  5. Configuration des rôles ‘web’ – Configuration de Nginx et PHP-FPM
  6. Rôles ‘db’ – Configuration de la base de données MySQL
  7. Test de

Étape 1 – Configurer le projet Ansible Playbook

Le Playbook Ansible est un ensemble d’instructions que tu envoies pour qu’elles soient exécutées sur un seul ou un groupe d’hôtes serveurs. Il représente le provisionnement ansible, où l’automatisation est définie comme des tâches, et tous les travaux comme l’installation de paquets, l’édition de fichiers, seront effectués par des modules ansible.

Le Playbook Ansible contient une configuration de base, notamment les informations sur les hôtes et les utilisateurs des serveurs de provisionnement, une liste de tâches qui sera mise en œuvre sur les serveurs de provisionnement, des configurations de modèles et personnalisées, et un groupe de variables faisant partie des modèles et des tâches.

Tout d’abord, crée le répertoire du projet maître sur la machine ‘ansible-control’. Le répertoire de projet maître sera stocké tous les répertoires, fichiers et configurations de notre playbook.

Crée le répertoire du projet Ansible appelé ‘project-lemp’ et va dans ce répertoire.

mkdir project-lemp/
cd project-lemp

Crée maintenant de nouveaux fichiers de configuration ‘hosts’ et ‘site.yml’, puis crée un nouveau répertoire appelé ‘roles’.

touch hosts site.yml
mkdir -p roles/

Détails sur les configurations :

hosts – C’est un fichier d’inventaire qui contient des informations sur les serveurs gérés par ansible. Il te permet de créer un groupe de serveurs qui te facilite la gestion et la mise à l’échelle du fichier d’inventaire lui-même. Le fichier d’inventaire peut être créé avec de nombreux formats différents, notamment les formats INI et YAML.

site.yml – Le fichier de playbook principal qui contient le groupe d’hôtes qui sera géré à l’aide de nos rôles disponibles.

Rôles – c’est un groupe de playbooks Ansible qui sera utilisé pour provisionner le serveur. Les rôles Ansible ont leurs propres structures de répertoire, chaque rôle contiendra des répertoires tels que les tâches, les gestionnaires, les vars, etc.

Étape 2 – Générer des rôles Ansible pour la structure de répertoire

Dans cette étape, nous allons générer un répertoire de rôles ansible à l’aide de la commande ansible-galaxy. Nous allons générer deux rôles appelés rôles ‘communs’ et rôles ‘web’.

Dans le répertoire ‘project-lemp’, va dans le répertoire ‘roles’.

cd roles/

Génère le répertoire et les fichiers de la structure des rôles pour les rôles ‘commun’ et ‘web’ en exécutant la commande ansible-galaxy ci-dessous.

ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init db

Ensuite, vérifie toutes les structures de répertoire des rôles ansible disponibles à l’aide de la commande suivante.

tree .

Le résultat s’affiche comme ci-dessous.

Structure du répertoire

Étape 3 – Configure les fichiers hosts et site.yml

Le fichier ‘hosts’ contient la liste et le groupe du serveur géré par Ansible. Pour ce guide, nous allons créer un groupe appelé ‘lemp’ avec le membre nommé ‘server01’ et l’adresse IP 10.5.5.26.

Modifie le fichier ‘hosts’ à l’aide de l’éditeur vim.

vim hosts

Colle la configuration ci-dessous.

[lemp]
server01 ansible_host=10.5.5.26

Sauvegarde et ferme.

Ensuite, édite le fichier de configuration site.yml.

vim site.yml

Colle les configurations ci-dessous.

---

- hosts: lemp
  remote_user: hakase
  become: yes

  roles:
    - common
    - web
    - db

Sauvegarde et ferme.

Configurer les hôtes et le site.yml

Étape 3 – Configurer les rôles communs

Dans cette étape, nous allons configurer les rôles communs. Et pour ce faire, nous devons créer une liste de tâches que nous allons effectuer.

Voici la liste des tâches que nous allons effectuer sur les rôles « communs ».

  1. Modifier le référentiel
  2. Mettre à jour le référentiel
  3. Mettre à niveau les paquets vers la dernière version
  4. Configurer le fuseau horaire du serveur

Va maintenant dans le répertoire ‘common’ et modifie la configuration ‘tasks/main.yml’.

cd common/
vim tasks/main.yml

Crée une tâche pour modifier le référentiel et nous utiliserons le module ‘copy’ qui copiera la base ‘sources.list’ du répertoire ‘files’ vers l’hôte distant ‘/etc/apt/’.

- name: Change repository Ubuntu 18.04Step 4 - Setup 'web' Roles
  copy:
    src: sources.list
    dest: /etc/apt/
    backup: yes

Crée une tâche pour mettre à jour le référentiel et mettre à niveau tous les paquets avec la dernière version en utilisant le module ‘apt’.

- name: Update repository and Upgrade packages
  apt:
    upgrade: dist
    update_cache: yes

Crée maintenant la tâche pour configurer le fuseau horaire du système à l’aide du module ansible timezone.

- name: Setup timezone to Asia/Jakarta
  timezone:
    name: Asia/Jakarta
    state: latest

Sauvegarde et ferme.

Configurer les rôles communs

Ensuite, crée une nouvelle configuration de référentiel ‘sources.list’ dans le répertoire ‘files’.

vim files/sources.list

Choisis le dépôt le plus proche de l’emplacement de ton serveur, ci-dessous le mien.

deb http://buaya.klas.or.id/ubuntu/ bionic main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-updates main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic universe
deb http://buaya.klas.or.id/ubuntu/ bionic-updates universe
deb http://buaya.klas.or.id/ubuntu/ bionic multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-updates multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-backports main restricted universe multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-security main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-security universe
deb http://buaya.klas.or.id/ubuntu/ bionic-security multiverse

Sauvegarde et ferme.

Enfin, la configuration des rôles « communs » est terminée.

Étape 4 – Configurer les rôles « web ».

Dans cette étape, nous allons configurer les rôles ‘web’. Ils effectueront certaines tâches, notamment l’installation du serveur Web Nginx, de PHP-FPM avec quelques extensions de base, et la configuration de PHP-FPM avec Nginx.

Voici les détails des tâches que nous allons effectuer sur les rôles ‘web’ :

  1. Installer Nginx
  2. Installer PHP-FPM
  3. Configurer le php.ini
  4. Créer un hôte virtuel
  5. Ajoute le fichier phpinfo

Va dans le répertoire ‘web’ et modifie le fichier ‘tasks/main.yml’.

cd web/
vim tasks/main.yml

Crée la première tâche pour l’installation de nginx en utilisant le module apt.

- name: Install Nginx
  apt:
    name: nginx
    state: latest

Crée maintenant la tâche pour l’installation de PHP-FPM avec quelques extensions de base. Et pour l’installation de plusieurs paquets, nous pouvons utiliser le format python ‘list’ comme ci-dessous.

- name: Instal PHP-FPM
  apt:
    name: ['php','php-fpm','php-common','php-cli','php-curl']
    state: latest

Ensuite, nous allons ajouter de nouvelles lignes à la configuration de php.ini à l’aide du module ‘blockinfile’. Et à la fin de la ligne, nous informerons l’ansible de redémarrer le service php-fpm après avoir configuré le fichier php.ini.

- name: Configure php.ini
  blockinfile:
    dest: /etc/php/{{ php_version }}/fpm/php.ini
    block: |
      date.time = Asia/Jakarta
      cgi-fix_pathinfo = 0
    backup: yes
  notify: restart php-fpm

Maintenant, nous allons copier la configuration de l’hôte virtuel nginx en utilisant le module ‘template’. Le module template copiera la configuration du répertoire ‘templates’ sur le serveur distant. Nous allons copier le modèle d’hôte virtuel jinja2 ‘vhost.j2’ dans le répertoire ‘/etc/nginx/sites-enabled/’, et enfin, nous allons demander à ansible de redémarrer le service nginx.

- name: Create Nginx virtual host
  template:
    src: vhost.j2
    dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
  notify: restart nginx

Ensuite, nous créerons de nouvelles tâches pour créer le répertoire racine du site Web à l’aide du module ‘file’ et nous y copierons le modèle index.php.

- name: Create web-root directory
  file:
    path: /var/www/{{ domain_name }}
    state: directory

- name: Upload index.html and info.php files
  template:
    src: index.php.j2
    dest: /var/www/{{ domain_name }}/index.php

Sauvegarde et ferme.

Nous allons maintenant configurer les gestionnaires pour redémarrer le service nginx et php-fpm. Modifie la configuration ‘handlers/main.yml’ à l’aide de l’éditeur vim.

vim handlers/main.yml

Colle les configurations ci-dessous.

- name: restart nginx
  service:
    name: nginx
    state: restarted
    enabled: yes

- name: restart php-fpm
  service:
    name: php{{ php_version }}-fpm
    state: restarted
    enabled: yes

Sauvegarde et ferme.

Rôles web Ansible

Ensuite, nous allons modifier la configuration ‘vars/main.yml’. En haut des configurations, tu remarqueras les configurations de variables ‘{{ php_version }}’ et ‘{{ domain_name }}’. Ces variables représentent notre configuration d’environnement pour la version de php et le nom de domaine qui sera utilisé. Les variables rendent ansible plus réutilisable car il suffit de modifier la configuration des variables ‘vars/main.yml’ et non la configuration de base.

Modifie la configuration des variables ‘vars/main.yml’ en utilisant l’éditeur vim.

vim vars/main.yml

Colle les configurations ci-dessous.

php_version: 7.2
domain_name: hakase-labs.io

Sauvegarde et ferme.

Nous allons maintenant créer les configurations de modèles jinja2 ‘index.php.j2’ et ‘vhost.j2’ dans le répertoire ‘templates/’.

vim templates/index.php.j2

Colle les configurations ci-dessous.

<html>
<body>

<h1><center>index.html for domain {{ domain_name }}</center></h1>

<p>
<p>

<?php
phpinfo();
?>

</body>
</html>

Sauvegarde et ferme.

Ensuite, crée le modèle pour la configuration de l’hôte virtuel nginx ‘vhost.j2’.

vim templates/vhost.j2

Colle la configuration ci-dessous.

server {
    listen 80;
    listen [::]:80;

    root /var/www/{{ domain_name }};
    index index.php index.html index.htm index.nginx-debian.html;

    server_name {{ domain_name }};

    location / {
        try_files $uri $uri/ =404;
    }

    # pass PHP scripts to FastCGI server
    #
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php{{ php_version }}-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

}

Sauvegarde et ferme la configuration, et nous avons terminé la configuration des rôles Web.

Étape 5 – Configurer les rôles ‘db’.

À cette étape, nous allons configurer les rôles ‘db’ pour l’installation et la configuration de la base de données MySQL.

Tu trouveras ci-dessous les détails des tâches à effectuer pour les rôles ‘db’.

  1. installer mysql
  2. Créer une base de données MySQL
  3. Crée un utilisateur MySQL
  4. Redémarre mysql

Va dans le répertoire ‘db’ et modifie la configuration ‘tasks/main.yml’.

cd db/
vim tasks/main.yml

Installe maintenant les paquets MySQL en utilisant le module ‘apt’ et le format python ‘list’ pour l’installation de plusieurs paquets.

- name: Install MySQL
  apt:
    name: ['mysql-server','mysql-client','python-mysqldb']
    state: latest
  notify: restart mysql

Crée ensuite de nouvelles tâches pour créer la base de données MySQL et l’utilisateur, puis accorde tous les privilèges de l’utilisateur à la base de données.

- name: Create database
  mysql_db:
    name: '{{ db_name }}'
    state: present

- name: Create user for the database
  mysql_user:
    name: '{{ db_user }}'
    password: '{{ db_pass }}'
    encrypted: yes
    priv: '{{ db_name }}.*:ALL'
    state: present

Sauvegarde et ferme.

Configurer les rôles de la base de données

Ensuite, modifie la configuration de ‘handlers/main.yml’.

vim handlers/main.yml

Colle la configuration de la tâche pour le redémarrage du service MySQL.

- name: restart mysql
  service:
    name: mysql
    state: restarted
    enabled: yes

Sauvegarde et ferme.

Ensuite, édite la configuration de la variable vars ‘vars/main.yml’.

vim vars/main.yml

Colle ces variables pour la base de données MySQL et la configuration de l’utilisateur ci-dessous.

db_name: hakase-db
db_user: hakase
db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'

Sauvegarde et ferme.

La variable ‘db_pass’ contient le mot de passe crypté MySQL. Tu peux générer un mot de passe crypté MySQL à l’aide d’outils en ligne.

Étape 6 – Exécute le Playbook Ansible

Va dans le répertoire du projet Ansible.

cd project-lemp/

Exécute la commande ansible-playbook ci-dessous.

ansible-playbook -i hosts site.yml

Maintenant, l’ansible va exécuter tous les rôles que nous attribuons à l’hôte. Lorsqu’il aura terminé, le résultat s’affichera comme ci-dessous.

Exécute le Playbook Ansible

Vérifie que tu n’obtiens aucune erreur.

Étape 7 – Test

Ouvre ton navigateur Web et tape le nom de domaine dans la barre d’adresse http://hakase-labs.io.

Tu verras la page d’index avec phpinfo comme ci-dessous.

Tester

Le PHP-FPM et Nginx fonctionnent.

Ensuite, retourne au terminal du serveur et connecte-toi au serveur MySQL en utilisant l’utilisateur et le mot de passe que nous avons créés dans la variable de rôle ‘mysql’.

mysql -u hakase -p
PASSWORD: hakasepass

Vérifie la liste des bases de données appartenant à l’utilisateur.

show databases;

Et tu seras connecté au shell MySQL et tu verras apparaître la base de données nommée ‘hakase-db’ dans la liste.

Test de la base de données

Enfin, le Playbook Ansible pour l’installation et la configuration de LEMP Stack a été créé et testé avec succès.

Référence

https://docs.ansible.com/ansible/latest/index.html

Vous aimerez aussi...