Introduction
Il y a toujours des moments où nous devons configurer de nouveaux serveurs. Cela peut être pour répartir la charge de travail ou si nous avons simplement besoin de plus de serveurs. Lors de la configuration de nouveaux serveurs, les utilisateurs doivent utiliser l'automatisation des serveurs pour les configurer. Cela est fait afin de minimiser l'intervention manuelle. Ansible est l'un des outils de gestion de configuration qui peut être utilisé pour configurer automatiquement un nouveau serveur, réduisant ainsi les risques d'erreur humaine lors de la configuration manuelle du serveur.
Ansible est un outil riche en fonctionnalités tout en ayant une architecture simple. Il facilite la configuration des serveurs via des scripts. En raison de son architecture concise, Ansible ne nécessite l'installation d'aucun autre logiciel sur les nœuds.
Dans ce tutoriel, nous allons vous montrer comment utiliser Ansible pour automatiser l'installation de WordPress avec la pile LAMP s'exécutant sur un serveur Ubuntu. WordPress est un CMS utilisé pour créer des blogs et des sites web en utilisant PHP comme langage de programmation et une base de données MySQL pour stocker les données. Une fois WordPress installé, les utilisateurs peuvent administrer le site à l'aide de l'interface web.
Prérequis
- Comme ce tutoriel est basé sur Ubuntu, vous devrez avoir installé la dernière version d'Ubuntu avec les permissions sudo. Si vous n'avez pas installé Ubuntu, vous pouvez suivre notre Comment configurer votre serveur Ubuntu.
- Nous aurons également besoin d'un nœud de contrôle Ansible. Il doit s'agir d'un nœud de contrôle avec des permissions sudo et un pare-feu activé. Installation et configuration d'Ansible sur Ubuntu 20.04 contient un guide détaillé sur la façon de configurer Ansible.
- Nous avons également besoin de hôtes Ansible distants exécutant la dernière version d'Ubuntu. Les hôtes sont essentiellement les nœuds gérés dans Ansible.
Résumé des actions du Playbook Ansible
Dans cette section, nous verrons ce que fait notre Playbook Ansible lorsque nous l'exécutons. Cette procédure est une alternative à la configuration manuelle fournie ici : Comment installer WordPress avec LAMP sur Ubuntu 20.04.
Lorsque nous exécutons le Playbook, Ansible va :
- Installer aptitude qui est un gestionnaire de paquets Ansible préféré.
- Installer et configurer les extensions PHP et les paquets LAMP.
- Créer un nouvel Apache VirtualHost pour le site web WordPress.
- Activer le module mod_rewrite et désactiver le site web par défaut proposé par Apache.
- Définir le mot de passe de l'utilisateur root MySQL.
- Supprimer les comptes MySQL anonymes et la base de données de test.
- Créer un nouvel utilisateur et une nouvelle base de données. Ceux-ci seront utilisés par le site web WordPress.
- Configurer UFW pour autoriser le trafic HTTP sur le port configuré ( 80 par défaut).
- Télécharger et décompresser WordPress.
- Configurer les permissions et les propriétaires des répertoires.
- Configurer un nouveau fichier wp-config.php en utilisant son modèle.
Guide du Playbook Ansible WordPress sur LAMP
Tout d'abord, nous devrons obtenir le playbook WordPress sur LAMP et ses dépendances à partir du dépôt do-community/ansible-playbooks. Nous allons cloner ce dépôt à l'intérieur du nœud de contrôle Ansible.
Vous pouvez exécuter la commande git pull comme mentionné ci-dessous :
|
1 2 3 4 5 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Assurez-vous d'avoir la version mise à jour du dépôt mentionné ci-dessus. C'est le cas si vous avez déjà cloné le dépôt auparavant. Voici comment obtenir la mise à jour :
|
1 2 3 |
cd ~/ansible-playbooks git pull |
Maintenant, nous devons localiser les fichiers à l'intérieur du dossier wordpress-lamp_ubuntu . Le nom de ce dossier peut être différent selon la version d'Ubuntu que vous utilisez. En un coup d'œil, vous verrez la structure suivante dans ce répertoire :

Résumons le but de ces fichiers ci-dessous :
- files/apache.conf.j2 : Apache utilise VirtualHost. Ce fichier est utilisé pour spécifier les paramètres de VirtualHost.
- files/wp-config.php.j2 : Ce fichier contient les paramètres de configuration de WordPress.
- vars/default.yml : Il configure les paramètres du playbook.
- playbook.yml : Si des tâches doivent être exécutées sur un serveur distant, ce fichier est utilisé pour les configurer.
- readme.md : Guide d'utilisation du playbook.
Nous devons modifier le fichier de variables du playbook afin de personnaliser l'installation. Tout d'abord, ouvrez le vars/default.yaml fichier qui se trouve dans le répertoire mentionné ci-dessus :
|
1 2 3 |
cd wordpress-lamp_ubuntu1804 nano vars/default.yml |
Ce fichier est assez long. Il contient un certain nombre de configurations pour nous aider dans notre installation :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- #Paramètres Système php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #Paramètres MySQL mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #Paramètres HTTP http_host: "votre_domaine" http_conf: "votre_domaine.conf" http_port: "80" |
Ici, nous nous intéressons aux variables suivantes :
- php_modules : Un tableau contenant les extensions PHP qui doivent être installées pour prendre en charge votre configuration WordPress. Si vous souhaitez installer plus de modules, vous pouvez les spécifier ici.
- mysql_root_password : Le mot de passe pour le compte root MySQL.
- mysql_db : Spécifie le nom de la base de données MySQL que WordPress utilisera.
- mysql_user : Le nom de l'utilisateur MySQL qui doit être créé pour WordPress.
- mysql_password : Le mot de passe pour le nouvel utilisateur MySQL.
- http_host : Nom de domaine ou IP du serveur.
- http_conf : Le nom du fichier de configuration qui sera créé dans Apache.
- http_port : Port HTTP pour cet hôte virtuel. Ce port est utilisé pour accéder au site web. La valeur par défaut est 80.
Ensuite, saisissez les valeurs dans le fichier ci-dessus, puis enregistrez et fermez. Pour les utilisateurs de l'éditeur nano, appuyez sur CTRL+X, Y, puis appuyez sur ENTRÉE.
Vous êtes maintenant prêt à exécuter ce playbook. Vous pouvez exécuter ce playbook sur un ou plusieurs serveurs. Si vous souhaitez exécuter ce playbook sur un serveur spécifique, vous pouvez utiliser l'option -l . De plus, si vous devez spécifier l'utilisateur pour vous connecter au serveur distant, spécifiez l'utilisateur à l'aide de l'option -u .
Supposons que nous voulions exécuter notre playbook sur un serveur, srvr1 en utilisant l'utilisateur u1, nous pouvons exécuter la commande ci-dessous :
|
1 |
ansible-playbook playbook.yml -l server1 -u cloudsigma |
Une fois que vous aurez exécuté la commande ci-dessus, vous obtiendrez une sortie semblable à celle-ci :
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ******************************************************************************** TASK [Gathering Facts] ******************************************************************************** ok: [server1] TASK [Install prerequisites] ******************************************************************************** ok: [server1] |
Attendez que l'exécution du playbook soit terminée. Ensuite, accédez à server_name dans votre navigateur web :
|
1 |
http://server_host_or_ip/ |
Vous verrez l'écran :

Ensuite, sélectionnez la langue de votre choix et appuyez sur Continuer. Vous accéderez à l'écran suivant vous demandant quelques détails pour terminer l'installation :

Après cela, saisissez les informations et appuyez sur Installer WordPress. Cela prendra un certain temps, puis vous verrez un écran comme celui-ci :

Sélectionnez Connexion pour vous connecter à votre site web et configurer les paramètres :

Contenu du Playbook Ansible
Rappelez-vous du dossier wordpress-lamp_ubuntu . Il contient quelques fichiers. Passons-les en revue un par un :
● vars/default.yml
Ce fichier contient des valeurs qui sont utilisées pour configurer les paramètres de votre site web WordPress :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#Paramètres système php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #Paramètres MySQL mysql_root_password: "mot_de_passe_root_mysql" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "mot_de_passe" #Paramètres HTTP http_host: "votre_domaine" http_conf: "votre_domaine.conf" http_port: "80" |
● files/apache.conf.j2
Ce fichier est utilisé pour configurer le VirtualHost Apache :
|
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/wp-config.php.j2
Ce fichier est utilisé pour configurer WordPress. Il contient des clés uniques et des sels générés par des fonctions de hachage :
|
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
<?php /** * La configuration de base de WordPress * * Le script de création de wp-config.php utilise ce fichier pendant * l'installation. Vous n'avez pas besoin d'utiliser le site web, vous pouvez * copier ce fichier sous le nom de "wp-config.php" et remplir les valeurs. * * Ce fichier contient les configurations suivantes : * * * Réglages MySQL * * Clés secrètes * * Préfixe des tables de la base de données * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */ // ** Réglages MySQL - Vous pouvez obtenir ces informations de votre hébergeur web ** // /** Le nom de la base de données pour WordPress */ define( 'DB_NAME', '{{ mysql_db }}' ); /** Nom d'utilisateur de la base de données MySQL */ define( 'DB_USER', '{{ mysql_user }}' ); /** Mot de passe de la base de données MySQL */ define( 'DB_PASSWORD', '{{ mysql_password }}' ); /** Adresse de l'hôte MySQL */ define( 'DB_HOST', 'localhost' ); /** Jeu de caractères de la base de données à utiliser lors de la création des tables. */ define( 'DB_CHARSET', 'utf8' ); /** Le type de collation de la base de données. Ne modifiez pas cela en cas de doute. */ define( 'DB_COLLATE', '' ); /** Accès au système de fichiers **/ define('FS_METHOD', 'direct'); /**#@+ * Clés uniques et sels d'authentification. * * Remplacez-les par des phrases uniques différentes ! * Vous pouvez les générer en utilisant le {@link https://api.wordpress.org/secret-key/1.1/salt/ service de clé secrète de WordPress.org} * Vous pouvez les modifier à tout moment pour invalider tous les cookies existants. Cela obligera tous les utilisateurs à se reconnecter. * * @since 2.6.0 */ define( 'AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); /**#@-*/ /** * Préfixe des tables de la base de données WordPress. * * Vous pouvez avoir plusieurs installations dans une seule base de données si vous donnez à chacune * un préfixe unique. Uniquement des chiffres, des lettres et des caractères de soulignement s'il vous plaît ! */ $table_prefix = 'wp_'; /** * Pour les développeurs : mode de débogage de WordPress. * * Remplacez cette valeur par true pour activer l'affichage des notifications pendant le développement. * Il est fortement recommandé aux développeurs de plugins et de thèmes d'utiliser WP_DEBUG * dans leurs environnements de développement. * * Pour plus d'informations sur les autres constantes qui peuvent être utilisées pour le débogage, * visitez le Codex. * * @link https://codex.wordpress.org/Debugging_in_WordPress */ define( 'WP_DEBUG', false ); /* C'est tout, ne modifiez plus rien ! Bonne publication. */ /** Chemin absolu vers le dossier de WordPress. */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', dirname( __FILE__ ) . '/' ); } /** Initialise les variables WordPress et les fichiers inclus. */ require_once( ABSPATH . 'wp-settings.php' ); |
● playbook.yml
Ce fichier contient toutes les tâches définies à partir de cette configuration. Il commence par lister un groupe de serveurs ciblés par cette configuration. Il inclut le vars/default.yml fichier de variables 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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Installer les prérequis apt: name=aptitude update_cache=yes state=latest force_apt_get=yes tags: [ system ] - name: Installer les paquets LAMP apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] tags: [ system ] - name: Installer les extensions PHP apt: name={{ item }} update_cache=yes state=latest loop: "{{ php_modules }}" tags: [ system ] # Configuration d'Apache - name: Créer la racine du document file: path: "/var/www/{{ http_host }}" state: directory owner: "www-data" group: "www-data" mode: '0755' tags: [ apache ] - name: Configurer le VirtualHost Apache template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Recharger Apache tags: [ apache ] - name: Activer le module de réécriture shell: /usr/sbin/a2enmod rewrite notify: Recharger Apache tags: [ apache ] - name: Activer le nouveau site shell: /usr/sbin/a2ensite {{ http_conf }} notify: Recharger Apache tags: [ apache ] - name: Désactiver le site Apache par défaut shell: /usr/sbin/a2dissite 000-default.conf notify: Redémarrer Apache tags: [ apache ] # Configuration MySQL - name: Définir le mot de passe root mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock tags: [ mysql, mysql-root ] - name: Supprimer tous les comptes utilisateurs anonymes mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Supprimer la base de données de test MySQL mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Créer la base de données pour WordPress mysql_db: name: "{{ mysql_db }}" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Créer l'utilisateur MySQL pour WordPress mysql_user: name: "{{ mysql_user }}" password: "{{ mysql_password }}" priv: "{{ mysql_db }}.*:ALL" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] # Configuration UFW - name: "UFW - Autoriser HTTP sur le port {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp tags: [ system ] # Configuration de WordPress - name: Télécharger et décompresser la dernière version de WordPress unarchive: src: https://wordpress.org/latest.tar.gz dest: "/var/www/{{ http_host }}" remote_src: yes creates: "/var/www/{{ http_host }}/wordpress" tags: [ wordpress ] - name: Définir la propriété file: path: "/var/www/{{ http_host }}" state: directory recurse: yes owner: www-data group: www-data tags: [ wordpress ] - name: Définir les permissions pour les répertoires shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;" tags: [ wordpress ] - name: Définir les permissions pour les fichiers shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;" tags: [ wordpress ] - name: Configurer la config -wp template: src: "files/wp-config.php.j2" dest: "/var/www/{{ http_host }}/wordpress/wp-config.php" tags: [ wordpress ] handlers: - name: Recharger Apache service: name: apache2 state: reloaded - name: Redémarrer Apache service: name: apache2 state: restarted |
Vous pouvez modifier ces fichiers selon vos besoins pour les adapter aux exigences spécifiques du site web que vous construisez.
Conclusion
Dans ce tutoriel, nous avons démontré comment vous pouvez automatiser l'installation et la configuration d'un site web WordPress fonctionnant sur la pile LAMP sur le dernier système d'exploitation Ubuntu avec Ansible.
Pour plus de guides sur l'utilisation d'Ansible, vous pouvez consulter les tutoriels suivants sur notre blog:
- Utiliser Ansible avec CloudSigma
- Automatiser la configuration du serveur à l'aide d'Ansible et d'Ubuntu 20.04
- Installer et configurer LAMP sur Ubuntu 20.04 avec Ansible
Bonne informatique !
Commentaires
Aucun commentaire pour l'instant. Soyez le premier.