GNU/Linux >> Tutoriels Linux >  >> Linux

Guide Ansible :créer un playbook Ansible pour la pile LEMP

Ansible est un outil d'automatisation simple qui automatise le déploiement d'applications logicielles, le provisionnement du cloud et la gestion de la configuration. Il s'agit d'un outil d'orchestration de serveur qui vous aide à gérer et à contrôler un grand nombre de nœuds de serveur à partir d'emplacements 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 vous montrer comment créer un Playbook Ansible de base pour provisionner la pile LEMP sur le serveur Ubuntu 18.04. Vous apprendrez à créer un Playbook Ansible de base qui peut être mis à l'échelle pour d'autres applications de projet PHP telles que WordPress, Nextcloud, etc.

Prérequis

  • 2 système d'exploitation Ubuntu.
    • 10.5.5.20   ansible
    • 10.5.5.26  disposition
  • Connaissance de l'utilisation de base d'Ansible
  • Privilèges root

Ce que nous allons faire :

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

Étape 1 - Configurer le projet Ansible Playbook

Ansible Playbook est un ensemble d'instructions que vous envoyez pour s'exécuter sur un seul ou un groupe d'hôtes de serveur. Il représente le provisionnement ansible, où l'automatisation est définie comme des tâches, et tous les travaux comme l'installation de packages, l'édition de fichiers, seront effectués par des modules ansible.

Le Playbook Ansible contient une configuration de base, notamment des informations sur les hôtes et les utilisateurs des serveurs de provisionnement, une liste de tâches qui seront implémentées sur les serveurs de provisionnement, des modèles et des configurations personnalisées, ainsi qu'un groupe de variables faisant partie des modèles et des tâches.

Tout d'abord, créez le répertoire principal du projet sur la machine 'ansible-control'. Le répertoire principal du projet contiendra tous nos répertoires, fichiers et configurations de playbook.

Créez le répertoire du projet Ansible appelé 'project-lemp' et allez-y.

mkdir project-lemp/
cd project-lemp

Créez maintenant un nouveau fichier de configuration 'hosts' et 'site.yml', puis créez un nouveau répertoire appelé 'roles'.

touch hosts site.yml
mkdir -p roles/

Détails sur les configurations :

hôtes - C'est un fichier d'inventaire qui contient des informations sur les serveurs gérés par ansible. Il vous permet de créer un groupe de serveurs qui facilitent 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, y compris 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épertoires, chaque rôle contiendra des répertoires tels que des tâches, des gestionnaires, des variables, 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', allez dans le répertoire 'roles'.

cd roles/

Générez un répertoire de structure de rôles et des fichiers 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

Après cela, vérifiez toutes les structures de répertoires de rôles ansible disponibles à l'aide de la commande suivante.

tree .

Vous verrez le résultat comme ci-dessous.

Étape 3 - Configurer les hôtes et site.yml

Le fichier 'hosts' contiendra 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.

Modifiez le fichier 'hosts' à l'aide de l'éditeur vim.

vim hosts

Collez la configuration ci-dessous.

[lemp]
server01 ansible_host=10.5.5.26

Enregistrez et fermez.

Ensuite, modifiez le fichier de configuration site.yml.

vim site.yml

Collez les configurations ci-dessous.

---

- hosts: lemp
  remote_user: hakase
  become: yes

  roles:
    - common
    - web
    - db

Enregistrez et fermez.

É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.

Ci-dessous la liste des tâches que nous allons faire sur les rôles "communs".

  1. Changer de référentiel
  2. Mettre à jour le dépôt
  3. Mettre à niveau les packages vers la dernière version
  4. Configurer le fuseau horaire du serveur

Allez maintenant dans le répertoire 'common' et éditez la configuration 'tasks/main.yml'.

cd common/
vim tasks/main.yml

Créez une tâche pour changer 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éez une tâche pour mettre à jour le référentiel et mettez à niveau tous les packages vers la dernière version à l'aide du module 'apt'.

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

Créez maintenant la tâche de configuration du fuseau horaire du système à l'aide du module ansible timezone.

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

Enregistrez et fermez.

Après cela, créez une nouvelle configuration de référentiel 'sources.list' dans le répertoire 'files'.

vim files/sources.list

Choisissez le référentiel le plus proche de l'emplacement de votre serveur, ci-dessous est 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

Enregistrez et fermez.

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'. Il effectuera certaines tâches, notamment l'installation du serveur Web Nginx, PHP-FPM avec quelques extensions de base et la configuration de PHP-FPM avec Nginx.

Vous trouverez ci-dessous des détails sur les tâches que nous effectuerons sur les rôles « Web » :

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

Allez dans le répertoire 'web' et éditez le fichier 'tasks/main.yml'.

cd web/
vim tasks/main.yml

Créez la première tâche pour l'installation de nginx à l'aide du module apt.

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

Créez maintenant la tâche d'installation de PHP-FPM avec quelques extensions de base. Et pour l'installation de plusieurs packages, 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 ajouterons de nouvelles lignes à la configuration de php.ini en utilisant le module 'blockinfile'. Et à la fin de la ligne, nous aviserons 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

Nous allons maintenant copier la configuration de l'hôte virtuel nginx à l'aide du module 'template'. Le module template copiera la configuration du répertoire 'templates' vers 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 le dernier nous notifierons à l'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

Après cela, nous allons créer de nouvelles tâches pour créer le répertoire racine Web à l'aide du module 'file' et y copier 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

Enregistrez et fermez.

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

gestionnaires vim/main.yml

Collez 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

Enregistrez et fermez.

Ensuite, nous allons modifier la configuration 'vars/main.yml'. En haut des configurations, vous remarquerez les configurations variables '{{ php_version }}' et '{{ domain_name }}'. Ces variables représentent la configuration de notre environnement pour la version php et le nom de domaine qui sera utilisé. La variable rend ansible plus réutilisable car il nous suffit de modifier la configuration de la variable 'vars/main.yml' et non de modifier la configuration de base.

Modifiez la configuration des variables 'vars/main.yml' à l'aide de l'éditeur vim.

vim vars/main.yml

Collez les configurations ci-dessous.

php_version: 7.2
domain_name: hakase-labs.io

Enregistrez et fermez.

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

Collez la configuration ci-dessous.

<html>
<body>

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

<p>
<p>

<?php
phpinfo();
?>

</body>
</html>

Enregistrez et fermez.

Après cela, créez le modèle pour la configuration de l'hôte virtuel nginx 'vhost.j2'.

vim templates/vhost.j2

Collez les configurations 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;
        }

}

Enregistrez et fermez 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.

Vous trouverez ci-dessous les détails des tâches qui seront effectuées sur les rôles 'db'.

  1. installer mysql
  2. Créer une base de données MySQL
  3. Créer un utilisateur MySQL
  4. redémarrer mysql

Allez dans le répertoire 'db' et modifiez la configuration 'tasks/main.yml'.

cd db/
vim tasks/main.yml

Installez maintenant les packages MySQL en utilisant le module 'apt' et le format python 'list' pour l'installation de plusieurs packages.

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

Créez ensuite de nouvelles tâches pour créer la base de données et l'utilisateur MySQL, puis accordez 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

Enregistrez et fermez.

Ensuite, modifiez la configuration 'handlers/main.yml'.

vim handlers/main.yml

Collez la configuration de la tâche de redémarrage du service MySQL.

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

Enregistrez et fermez.

Après cela, modifiez la configuration de la variable vars 'vars/main.yml'.

vim vars/main.yml

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

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

Enregistrez et fermez.

La variable 'db_pass' contient le mot de passe crypté MySQL, et vous pouvez générer un mot de passe MySQL crypté à l'aide d'outils en ligne.

Étape 6 - Exécuter le Playbook Ansible

Allez dans le répertoire du projet Ansible.

cd project-lemp/

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

ansible-playbook -i hosts site.yml

Maintenant, l'ansible exécutera tous les rôles que nous attribuons à l'hôte. Une fois terminé, le résultat s'affichera comme ci-dessous.

Assurez-vous de ne recevoir aucune erreur.

Étape 7 - Tester

Ouvrez votre navigateur Web et tapez le nom de domaine dans la barre d'adresse http://hakase-labs.io.

Et vous verrez la page d'index avec phpinfo comme ci-dessous.

Le PHP-FPM et Nginx fonctionnent.

Ensuite, revenez au terminal du serveur et connectez-vous au serveur MySQL en utilisant l'utilisateur et le mot de passe que nous avons créés sur la variable de rôles 'mysql'.

mysql -u hakase -p
PASSWORD: hakasepass

vérifier la liste des bases de données appartenant à l'utilisateur.

show databases;

Et vous serez connecté au shell MySQL et la base de données nommée 'hakase-db' apparaîtra dans la liste.

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


Linux
  1. Déconstruire un playbook Ansible

  2. Comprendre YAML pour Ansible

  3. Une brève introduction aux rôles Ansible pour l'administration système Linux

  4. 6 compétences de dépannage pour les playbooks Ansible

  5. comment créer un playbook Ansible pour obtenir les versions du système d'exploitation des hôtes distants ?

Guide Ansible :la commande ad hoc

Comment créer des playbooks Ansible pour l'automatisation informatique

Webinoly - Configurez facilement la pile LEMP optimisée pour WordPress dans Ubuntu

Comment créer et exécuter un fichier Playbook Ansible

Guide de démarrage rapide d'Ansible pour les administrateurs système Linux

Créer une partition sous Linux - Un guide étape par étape