L’automatisation des serveurs joue maintenant un rôle essentiel dans l’administration des systèmes, en raison de la nature disponible des environnements d’application modernes. Les outils de gestion de la configuration tels qu’Ansible sont généralement utilisés pour rationaliser le processus d’automatisation de la configuration des serveurs en établissant des procédures standard pour les nouveaux serveurs, tout en réduisant l’erreur humaine associée aux configurations manuelles.
Ansible offre une architecture simple qui ne nécessite pas l’installation de logiciels spéciaux sur les nœuds. Elle fournit également un ensemble robuste de caractéristiques et de modules intégrés qui facilitent l’écriture de scripts d’automatisation.
Ce guide explique comment utiliser Ansible pour automatiser les étapes contenues dans notre guide sur Comment installer WordPress avec LAMP sur Ubuntu 18.04. WordPress est le CMS (système de gestion de contenu) le plus populaire sur Internet, qui permet aux utilisateurs de créer des blogs et des sites web flexibles en plus d’un backend MySQL avec traitement PHP. Une fois WordPress configuré, presque toute l’administration peut se faire via l’interface Web.
Afin d’exécuter la configuration automatisée fournie par le playbook dont nous parlons dans ce guide, vous aurez besoin :
Avant de poursuivre, vous devez d’abord vous assurer que votre nœud de contrôle Ansible est capable de connecter et d’exécuter des commandes sur votre ou vos hôtes Ansible. Pour réaliser un test de connexion, veuillez vérifier l’étape 3 de Comment installer et configurer Ansible sur Ubuntu 18.04.
Ce playbook Ansible offre une alternative à la gestion manuelle via la procédure décrite dans notre guide sur Comment WordPress avec LAMP sur Ubuntu 18.04.
L’exécution de ce playbook exécutera les actions suivantes sur vos hôtes Ansible :
aptitude
, qui est préférée par Ansible comme une alternative au gestionnaire de paquets apt
.VirtualHost
Apache pour le site WordPress.mod_rewrite
).80
par défaut).wp-config.php
en utilisant le modèle fourni.Une fois le Playbook exécuté, vous aurez une installation WordPress fonctionnant au-dessus d’un environnement LAMP, basée sur les options que vous avez définies dans vos variables de configuration.
La première chose que nous devons faire est d’obtenir le playbook WordPress sur LAMP et ses dépendances à partir du répertoire do-community/ansible-playbooks Nous devons cloner ce répertoire vers un dossier local à l’intérieur du nœud de contrôle Ansible.
Si vous avez déjà cloné ce répertoire en suivant un autre guide, accédez à votre copie existante de ansible-playbooks
et lancez une commande git pull
pour vous assurer que vous disposez d’un contenu mis à jour :
- cd ~/ansible-playbooks
- git pull
Si c’est la première fois que vous utilisez le répertoire do-community/ansible-playbooks
, vous devez commencer par cloner le répertoire vers votre dossier d’accueil avec :
- cd ~
- git clone https://github.com/do-community/ansible-playbooks.git
- cd ansible-playbooks
Les fichiers qui nous intéressent sont situés à l’intérieur du dossier wordpress-lamp_ubuntu1804
, qui a la structure suivante :
wordpress-lamp_ubuntu1804
├── files
│ ├── apache.conf.j2
│ └── wp-config.php.j2
├── vars
│ └── default.yml
├── playbook.yml
└── readme.md
Voici ce à quoi correspondent chacun de ces fichiers :
files/apache.conf.j2
: fichier template pour la création du VirtualHost Apachefiles/wp-config.php.j2
: fichier template pour la création du fichier de configuration de WordPress.vars/default.yml
: fichier variable pour la personnalisation des paramètres playbookplaybook.yml
: le fichier playbook, contenant les tâches à exécuter sur le(s) serveur(s) distant(s)readme.md
: un fichier texte contenant des informations sur ce playbookNous allons modifier le fichier variable du playbook pour personnaliser ses options. Accédez au répertoire wordpress-lamp_ubuntu1804
et ouvrez le fichier vars/default.yml
en utilisant l’éditeur en ligne de commande de votre choix :
- cd wordpress-lamp_ubuntu1804
- nano vars/default.yml
Ce fichier contient quelques variables qui nécessitent votre attention :
---
#System Settings
php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ]
#MySQL Settings
mysql_root_password: "mysql_root_password"
mysql_db: "wordpress"
mysql_user: "sammy"
mysql_password: "password"
#HTTP Settings
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
La liste suivante contient une brève explication de chacune de ces variables et la façon dont vous pourriez vouloir les modifier :
php_modules
: un réseau contenant des extensions PHP qui doit être installé pour supporter votre configuration WordPress. Vous n’avez pas besoin de modifier cette variable, mais vous pourriez vouloir inclure de nouvelles extensions sur la liste si votre configuration spécifique l’exige.mysql_root_password
: le mot de passe souhaité pour le compte root MySQLmysql_db
: le nom de la base de données MySQL qui doit être créée pour WordPress.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
: votre nom de domainehttp_conf
:le nom du fichier de configuration qui sera créé au sein d’Apachehttp_port
: port HTTP pour cet hôte virtuel, où 80
est celui par défautUne fois que vous avez terminé la mise à jour des variables à l’intérieur de vars/default.yml
, enregistrez et fermez ce fichier Si vous avez utilisé nano
, faites-le en appuyant sur CTRL+X
, Y
, puis ENTER
.
Vous êtes maintenant prêt à exécuter ce playbook sur un ou plusieurs serveurs. La plupart des playbooks sont configurés pour être exécutés sur chaque serveur de votre répertoire, par défaut. Nous pouvons utiliser le drapeau -l
pour nous assurer qu’un seul sous-ensemble de serveurs, ou un seul serveur, est affecté par le playbook. Nous pouvons également utiliser le drapeau -u
pour spécifier quel utilisateur du serveur distant nous utilisons pour nous connecter et exécuter les commandes du playbook sur les hôtes distants.
Pour exécuter le playbook uniquement sur server1
, connecté en tant quesammy
, vous pouvez utiliser la commande suivante :
- ansible-playbook playbook.yml -l server1 -u sammy
Vous obtiendrez une sortie similaire à ceci :
OutputPLAY [all] *****************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************
ok: [server1]
TASK [Install prerequisites] ***********************************************************************************************************
ok: [server1]
…
TASK [Download and unpack latest WordPress] ********************************************************************************************
changed: [server1]
TASK [Set ownership] *******************************************************************************************************************
changed: [server1]
TASK [Set permissions for directories] *************************************************************************************************
changed: [server1]
TASK [Set permissions for files] *******************************************************************************************************
changed: [server1]
TASK [Set up wp-config] ****************************************************************************************************************
changed: [server1]
RUNNING HANDLER [Reload Apache] ********************************************************************************************************
changed: [server1]
RUNNING HANDLER [Restart Apache] *******************************************************************************************************
changed: [server1]
PLAY RECAP *****************************************************************************************************************************
server1 : ok=22 changed=18 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Remarque : pour plus d’informations sur la façon d’exécuter les playbooks Ansible, consultez notre Guide Ansible Cheat Sheet.
Lorsque le playbook a terminé de s’exécuter, vous pouvez vous rendre sur votre navigateur web pour terminer l’installation de WordPress à partir de là.
Naviguez vers le nom de domaine de votre serveur ou l’adresse IP publique :
http://server_host_or_IP
Vous verrez une page comme ceci :
Après avoir sélectionné la langue que vous souhaitez utiliser pour votre installation de WordPress, une dernière étape vous sera présentée pour configurer votre utilisateur et votre mot de passe WordPress afin que vous puissiez vous connecter à votre panneau de contrôle :
Lorsque vous cliquez, vous accédez à une page qui vous invite à vous connecter :
Une fois connecté, vous serez redirigé vers le tableau de bord d’administration de WordPress :
Quelques étapes courantes pour personnaliser votre installation WordPress comprennent le choix du paramètre des permaliens dans vos messages (se trouve dans Paramètres > Permaliens
) et la sélection d’un nouveau thème (dans Apparence > Thèmes
).
Vous pouvez trouver la configuration du serveur WordPress sur LAMP présentée dans ce tutoriel dans le dossier wordpress-lamp_ubuntu1804
à l’intérieur du répertoire DigitalOcean Community Playbooks. Pour copier ou télécharger directement le contenu du script, cliquez sur le bouton Raw dans la partie supérieure de chaque script.
Le contenu complet du playbook ainsi que ses fichiers associés sont également inclus ici pour votre commodité.
Le fichier variable default.yml
contient des valeurs qui seront utilisées dans les tâches du playbook, tels que les paramètres de la base de données et le nom du domaine à configurer au sein d’Apache.
#System Settings
php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ]
#MySQL Settings
mysql_root_password: "mysql_root_password"
mysql_db: "wordpress"
mysql_user: "sammy"
mysql_password: "password"
#HTTP Settings
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
Le fichier apache.conf.j2
est un fichier template Jinja 2 qui configure un nouveau VirtualHost Apache. Les variables utilisées dans ce modèle sont définies dans le fichier variable vars/default.yml
.
<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>
Le fichier wp-config.php.j2
est un autre modèle Jinja, utilisé pour paramétrer le fichier de configuration principal utilisé par WordPress. Les variables utilisées dans ce modèle sont définies dans le fichier variable vars/default.yml
. Des clés et des salts d’authentification uniques sont générés en utilisant une fonction de hachage.
<?php
/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the
* installation. You don't have to use the web site, you can
* copy this file to "wp-config.php" and fill in the values.
*
* This file contains the following configurations:
*
* * MySQL settings
* * Secret keys
* * Database table prefix
* * ABSPATH
*
* @link https://codex.wordpress.org/Editing_wp-config.php
*
* @package WordPress
*/
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', '{{ mysql_db }}' );
/** MySQL database username */
define( 'DB_USER', '{{ mysql_user }}' );
/** MySQL database password */
define( 'DB_PASSWORD', '{{ mysql_password }}' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
/** Filesystem access **/
define('FS_METHOD', 'direct');
/**#@+
* Authentication Unique Keys and Salts.
*
* Change these to different unique phrases!
* You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
* You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
*
* @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') }}' );
/**#@-*/
/**
* WordPress Database Table prefix.
*
* You can have multiple installations in one database if you give each
* a unique prefix. Only numbers, letters, and underscores please!
*/
$table_prefix = 'wp_';
/**
* For developers: WordPress debugging mode.
*
* Change this to true to enable the display of notices during development.
* It is strongly recommended that plugin and theme developers use WP_DEBUG
* in their development environments.
*
* For information on other constants that can be used for debugging,
* visit the Codex.
*
* @link https://codex.wordpress.org/Debugging_in_WordPress
*/
define( 'WP_DEBUG', false );
/* That's all, stop editing! Happy publishing. */
/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', dirname( __FILE__ ) . '/' );
}
/** Sets up WordPress vars and included files. */
require_once( ABSPATH . 'wp-settings.php' );
Le fichier playbook.yml
est l’endroit où toutes les tâches de cette configuration sont définies. Il commence par définir le groupe de serveurs qui doit être la cible de cette configuration (tous
), après quoi il utilise become: true
pour définir que les tâches doivent être exécutées avec une élévation des privilèges sudo
par défaut. Ensuite, il inclut le fichier variable vars/default.yml
pour charger les options de configuration.
---
- hosts: all
become: true
vars_files:
- vars/default.yml
tasks:
- name: Install prerequisites
apt: name=aptitude update_cache=yes state=latest force_apt_get=yes
tags: [ system ]
- name: Install LAMP Packages
apt: name={{ item }} update_cache=yes state=latest
loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ]
tags: [ system ]
- name: Install PHP Extensions
apt: name={{ item }} update_cache=yes state=latest
loop: "{{ php_modules }}"
tags: [ system ]
# Apache Configuration
- name: Create document root
file:
path: "/var/www/{{ http_host }}"
state: directory
owner: "www-data"
group: "www-data"
mode: '0755'
tags: [ apache ]
- name: Set up Apache VirtualHost
template:
src: "files/apache.conf.j2"
dest: "/etc/apache2/sites-available/{{ http_conf }}"
notify: Reload Apache
tags: [ apache ]
- name: Enable rewrite module
shell: /usr/sbin/a2enmod rewrite
notify: Reload Apache
tags: [ apache ]
- name: Enable new site
shell: /usr/sbin/a2ensite {{ http_conf }}
notify: Reload Apache
tags: [ apache ]
- name: Disable default Apache site
shell: /usr/sbin/a2dissite 000-default.conf
notify: Restart Apache
tags: [ apache ]
# MySQL Configuration
- name: Set the root password
mysql_user:
name: root
password: "{{ mysql_root_password }}"
login_unix_socket: /var/run/mysqld/mysqld.sock
tags: [ mysql, mysql-root ]
- name: Remove all anonymous user accounts
mysql_user:
name: ''
host_all: yes
state: absent
login_user: root
login_password: "{{ mysql_root_password }}"
tags: [ mysql ]
- name: Remove the MySQL test database
mysql_db:
name: test
state: absent
login_user: root
login_password: "{{ mysql_root_password }}"
tags: [ mysql ]
- name: Creates database for WordPress
mysql_db:
name: "{{ mysql_db }}"
state: present
login_user: root
login_password: "{{ mysql_root_password }}"
tags: [ mysql ]
- name: Create MySQL user for 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 ]
# UFW Configuration
- name: "UFW - Allow HTTP on port {{ http_port }}"
ufw:
rule: allow
port: "{{ http_port }}"
proto: tcp
tags: [ system ]
# WordPress Configuration
- name: Download and unpack latest 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: Set ownership
file:
path: "/var/www/{{ http_host }}"
state: directory
recurse: yes
owner: www-data
group: www-data
tags: [ wordpress ]
- name: Set permissions for directories
shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;"
tags: [ wordpress ]
- name: Set permissions for files
shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;"
tags: [ wordpress ]
- name: Set up wp-config
template:
src: "files/wp-config.php.j2"
dest: "/var/www/{{ http_host }}/wordpress/wp-config.php"
tags: [ wordpress ]
handlers:
- name: Reload Apache
service:
name: apache2
state: reloaded
- name: Restart Apache
service:
name: apache2
state: restarted
N’hésitez pas à modifier ces fichiers pour qu’ils répondent au mieux à vos besoins individuels dans votre propre flux de travail.
Dans ce guide, nous avons utilisé Ansible pour automatiser le processus d’installation et de création d’un site web WordPress avec LAMP sur un serveur Ubuntu 18.04.
Si vous souhaitez inclure d’autres tâches dans ce playbook pour personnaliser davantage la configuration de votre serveur, veuillez vous référer à notre guide d’introduction à Ansible, Gestion de la configuration 101 : L’écriture de Playbooks Ansible.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!