L'automatisation des serveurs est un processus sécurisé et fiable de gestion et de surveillance des serveurs de manière efficace et technologique. Contrairement au style traditionnel de gestion des serveurs dans des centres de données contrôlés par une équipe d'experts dédiée, tous les serveurs sont gérés à l'aide de l'automatisation. Par conséquent, les erreurs humaines sont minimisées.
Les outils de gestion de configuration comme Ansible, Puppet, Terraform, pour n'en citer que quelques-uns, sont généralement utilisés pour automatiser les serveurs. Ces outils configurent les serveurs à l'aide de l'automatisation en établissant des procédures standard pour les nouveaux serveurs tout en éliminant les erreurs potentielles liées à une exécution manuelle.
Ansible est un projet open-source robuste. Il est flexible, facile à utiliser et possède l'architecture la plus simplifiée. Aucune compétence en programmation n'est requise pour utiliser les playbooks Ansible et il ne nécessite pas l'installation de logiciels sur les nœuds. Surtout, il regorge d'excellentes fonctionnalités qui lui permettent d'écrire des scripts et de rationaliser l'automatisation.
Dans ce guide, nous allons vous guider à travers les étapes d'installation et de configuration de LAMP sur Ubuntu 20.04 avec Ansible.
Prérequis
Pour suivre ce tutoriel, vous aurez besoin de :
- Ubuntu installé sur votre système.
- Un ou plusieurs hôtes Ansible : Un ou plusieurs hôtes Ansible distants exécutant la dernière version d'Ubuntu doivent être configurés initialement. Suivez le tutoriel Automatisation de la configuration des serveurs à l'aide d'Ansible et d'Ubuntu 20.04 pour la configuration.
- Un nœud de contrôle Ansible : Une machine Ubuntu avec Ansible installé, configuré et connecté à vos hôtes Ansible à l'aide de clés SSH:
-
- Le nœud de contrôle doit disposer d'un utilisateur avec des privilèges sudo et d'un pare-feu activé.
- Si vous avez besoin d'aide pour configurer Ansible, consultez le tutoriel sur l'installation et la configuration d'Ansible sur Ubuntu 20.04.
Quel est le but du playbook Ansible ?
Ce playbook Ansible est une méthode alternative pour suivre la procédure décrite dans notre guide Configuration de la pile LAMP – Linux Apache MySQL PHP.
L'exécution du playbook Ansible entraînera les actions suivantes sur vos hôtes Ansible :
-
Installer aptitude, une alternative au gestionnaire de paquets apt tel que privilégié par Ansible.
-
Installer tous les paquets LAMP nécessaires.
-
Créer un nouvel Apache VirtualHost et configurer une racine de document dédiée.
-
Mettre sur ON le nouveau VirtualHost.
-
Mettre sur OFF le site web Apache par défaut, c'est-à-dire définir la variable disable_default sur true.
-
Choisir un mot de passe pour l'utilisateur MySQL root .
-
Supprimer les comptes MySQL anonymes et la base de données de test.
-
Configurer UFW pour autoriser le trafic HTTP sur le port configuré, la valeur par défaut étant 80.
-
Configurer un script de test PHP.
Une fois l'exécution du playbook Ansible terminée, vous verrez un environnement PHP web s'exécuter par-dessus Apache conformément aux configurations que nous avons définies.
Utilisation du playbook Ansible
Tout d'abord, récupérez le playbook LAMP et ses dépendances depuis le dépôt do-community/ansible-playbooks . Ensuite, clonez le dépôt avec le playbook LAMP dans un dossier local à l'intérieur du nœud de contrôle Ansible.
Exécutez la commande git pull pour vous assurer que vous avez accès au bon contenu que nous allons utiliser dans ce tutoriel :
|
1 2 |
cd ~/ansible-playbooks git pull |
Si vous utilisez le dépôt do-community/ansible-playbooks pour la première fois, envisagez de cloner le dépôt dans votre dossier personnel :
|
1 2 3 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Allez dans le dossier lamp_ubuntu2004 et vous verrez la structure suivante :
|
1 2 3 4 5 6 7 8 |
lamp_ubuntu2004 ├── files │ ├── apache.conf.j2 │ └── info.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md |
Voici un aperçu de la signification de ces fichiers :
-
files/info.php.j2 : Il s'agit d'un fichier modèle dans lequel vous pouvez configurer une page de test PHP à la racine du serveur web.
-
files/apache.conf.j2 : Un autre fichier modèle utilisé pour configurer le VirtualHost Apache.
-
vars/default.yml : Il s’agit d'un fichier de variables pour personnaliser les paramètres du playbook.
-
playbook.yml : Ce fichier contient tout le contenu des tâches à exécuter sur le ou les serveurs distants.
-
readme.md: Un fichier lisez-moi contenant les informations sur ce playbook.
Personnalisons les configurations MySQL et Apache en apportant des modifications au fichier de variables du playbook. Naviguez vers le répertoire lamp_ubuntu2004 et ouvrez le fichier vars/default.yml à l'aide de l'éditeur nano :
|
1 2 |
cd lamp_ubuntu2004 nano vars/default.yml |
En ouvrant le fichier vars/default.yml , vous y trouverez une liste de variables à modifier :
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
Comprenons chacune de ces variables en détail :
-
mysql_root_password: Stocke le mot de passe pour le compte root MySQL.
-
app_user: Il s'agit d'un utilisateur distant non-root sur l'hôte Ansible qui agit en tant que propriétaire des fichiers de l'application.
-
http_host: Affiche votre nom de domaine.
-
http_conf: Affiche le nom du fichier de configuration créé dans Apache.
-
http_port: C'est le port HTTP pour cet hôte virtuel, et 80 est la valeur par défaut.
-
disable_default: Utilisé pour annuler les options par défaut fournies avec Apache.
Ensuite, sauvegardez et fermez le fichier vars/default.yml .
Une fois la configuration terminée, nous sommes prêts à exécuter ce playbook sur les serveurs. Par défaut, la plupart des serveurs dans les playbooks sont configurés pour être exécutés sur chaque serveur des inventaires. Utilisons l'option -l pour n'impacter qu'un seul serveur ou un sous-ensemble de groupe sélectionné. Alternativement, nous pouvons utiliser l'option -u pour obtenir une vue détaillée de quel serveur distant se connecte et s'exécute sur les hôtes distants.
Exécutons le playbook sur un serveur server1 et connectons-le avec un utilisateur comme justin:
|
1 |
ansible-playbook playbook.yml -l server1 -u justin |
Vous obtiendrez une sortie similaire à ceci :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PLAY [all] ********************************************************************************************************* TASK [Collecte des faits] *********************************************************************************************************ok: [server1] TASK [Installer les prérequis] *********************************************************************************************************ok: [server1] => (élément=aptitude) ... TASK [UFW - Autoriser HTTP sur port 80] ********************************************************************************************************* modifié: [server1] TASK [Configure la PHP Info Page] ********************************************************************************************************* modifié: [server1] EXÉCUTION DU GESTIONNAIRE [Recharger Apache] ********************************************************************************************************* modifié: [server1] EXÉCUTION DU GESTIONNAIRE [Redémarrer Apache] ********************************************************************************************************* modifié: [server1] PLAY RECAP ********************************************************************************************************* server1 : ok=15 modifié=11 inaccessible=0 échoué=0 ignoré=0 récupéré=0 ignoré=0 |
Une fois que vous voyez que le playbook a fini de s'exécuter, ouvrez votre navigateur web et accédez à l'hôte du serveur. N'oubliez pas d'ajouter /info.php à la fin de l'adresse IP :
|
1 |
http://server_host_or_IP/info.php |
En cliquant sur cette URL, vous verrez une page comme celle-ci :
|
Avertissement : La page affichée contient des informations sensibles sur votre environnement PHP. Par conséquent, il est recommandé de supprimer vos informations personnelles du serveur à l'aide de la commande suivante : rm -f /var/www/info.php |
Que contient le Playbook ?
Ensuite, comprenons la signification et l'importance des fichiers utilisés dans le ansible-playbook contenu :
-
vars/default.yml
Le default.yml fichier de variables contient le nom de domaine et le mot de passe du compte MySQL root . Ce sont des valeurs par défaut utilisées dans les tâches ansible-playbook :
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
- files/apache.conf.j2
Le fichier apache.conf.j2 est un fichier de modèle Jinja 2 utilisé pour configurer un nouveau VirtualHost Apache. Les variables utilisées dans ce modèle doivent être définies dans le fichier de variables vars/default.yml :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
- files/info.php.j2
Semblable à files/apache.conf.j2, le fichier info.php.j2 est également un modèle Jinja. Nous utilisons ce fichier pour configurer un script PHP de test dans la racine des documents d'un serveur LAMP nouvellement configuré :
|
1 2 |
<?php phpinfo(); |
-
playbook.yml
Le fichier playbook.yml est l'endroit où toutes les tâches de cette configuration sont définies. Dans ce fichier, toutes les piles LAMP sont configurées. Il commence par définir le groupe de serveurs ciblés et est défini sur all. De plus, il prend la valeur become comme true ( become: true), et définit toutes les tâches qui doivent être exécutées. Ensuite, le fichier yaml contient le fichier par défaut, qui est le fichier de variables vars/default.yml, pour charger les options de configuration :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Installer les prérequis apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes loop: [ 'aptitude' ] # Configuration Apache - name: Installer les LAMP paquets apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] - name: Créer le document root file: path: "/var/www/{{ http_host }}" state: directory owner: "{{ app_user }}" mode: '0755' - name: Configurer le virtualhost Apache template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Recharger Apache - name: Activer le nouveau site shell: /usr/sbin/a2ensite {{ http_conf }} notify: Recharger Apache - name: Désactiver le site Apache par défaut shell: /usr/sbin/a2dissite 000-default.conf when: disable_default notify: Recharger Apache # Configuration MySQL - name: Définit le mot de passe root mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock - name: Supprime tous les comptes d'utilisateurs anonymes mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" - name: Supprime la base de données de test MySQL mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" # Configuration UFW - name: "UFW - Autoriser HTTP sur le port {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp # Page PHP Info - name: Configure la page PHP Info template: src: "files/info.php.j2" dest: "/var/www/{{ http_host }}/info.php" handlers: - name: Recharger Apache service: name: apache2 state: reloaded - name: Redémarrer Apache service: name: apache2 state: restarted |
Vous pouvez modifier ces fichiers en fonction des besoins et des exigences de votre projet.
Conclusion
Dans ce tutoriel, nous avons passé en revue les étapes d'installation et de configuration de LAMP sur un serveur distant avec Ansible. Il existe de nombreuses autres options de personnalisation que vous pouvez expérimenter. Par exemple, en utilisant la documentation officielle d'Ansible et en utilisant les cas du mysql_user du module Ansible est un excellent moyen de vous perfectionner. De plus, suivez les étapes décrites dans ce guide pour vous entraîner à l'automatisation en utilisant d'autres outils de gestion de configuration et systèmes d'exploitation afin d'augmenter le niveau de difficulté.
Vous débutez avec la pile LAMP et souhaitez approfondir ce sujet ? Explorez les tutoriels suivants sur notre blog:
- Comment installer WordPress avec LAMP sur Ubuntu 20.04
- Comment installer la pile Linux, Apache, MySQL, PHP (LAMP) sur Centos-7
- Comment installer la pile LEMP Linux Nginx MySQL PHP sur Ubuntu 20.04
Bonne informatique !

Commentaires
Aucun commentaire pour l'instant. Soyez le premier.