Wordpress a besoin de plusieurs choses pour fonctionner, dont PHP.
Nous allons ici télécharger tous les paquets PHP dont wordpress a besoin.
# install needed PHP packages for wordpress.
- name: install PHP
apt:
pkg:
- php
- php-mysql
- php-common
- php-mysql
- php-tidy
- php-xml
- php-xmlrpc
- php-mbstring
- php-memcached
- php-curl
- php-zip
state: present
update_cache: true
En plus de PHP, wordpress a besoin de plusieurs paquets mysql.
---
# install needed SQL packages for wordpress
- name: Install MySQL Python
apt:
name: python3-mysqldb
state: present
- name: install MySQL Server
apt:
name: mariadb-server
state: present
- name: install MySQL Client
apt:
name: mariadb-client
state: present
- name: install MySQL Common
apt:
name: mysql-common
state: present
# start sql service.
- name: ensure MySQL always starts
service:
name: mysql
state: started
enabled: yes
Nous allons ajouter notre blog wordpress au bon endroit pour voir si nous pouvons y accéder.
--
# we create a variable named 'local_path' which is the concatenation of the path and the directory of the wordpress. We will frequently use this variable in this file
- name: Concantenate the install and directory into the local site directory
set_fact:
local_path: "{{wp_install_path}}/{{wp_directory_local_name}}"
# we create the direcotry for wordpress.
- name: Create dir
file:
path: "{{local_path}}"
state: directory
# we copy the tar.gz from a previously installed blank wordpress. we could have installed it via ansible directly to be sure to have the latest version every time, but this way we could be limited by wordpress site, so we choose to download it before running the script.
- name: Copy wordpress directory
copy:
src: wordpress.tar.gz
dest: /tmp/wordpress.tar.gz
# we extract the wordpress directory from the archive
- name: Extract archive
unarchive: src=/tmp/wordpress.tar.gz dest=/tmp copy=no
# we move the wordpress directory in the directory we previously created
- name: Move extracted directory to {{local_path}}
shell: cp -r -n /tmp/wordpress/* {{local_path}}
# we remove the archive
- name: Remove wordpress.tar.gz
file: path=/tmp/wordpress.tar.gz state=absent
# change the owner of the wordpress directory so that it can be handled by ansible
- name: Change ownership of installation local directory
file: path={{local_path}} owner=www-data group=www-data state=directory recurse=yes setype=httpd_sys_content_t
# same for wp-content containg some wordpress usefull files
- name: Change ownership of wp-content local directory
file: path={{local_path}}/wp-content/ owner=www-data group=www-data mode=755 state=directory recurse=yes
Bien que nous puissions visiblement accéder à notre wordpress, nous obtenons une erreur
.png)
.png)
En effet, wordpress essaie d’accéder à une base de donnée qui n’existe pas.
Nous allons donc la créer.
# we create a SQL database that will be used by wordpress
- name: Create a our WordPress database
mysql_db:
config_file: "/etc/mysql/my.cnf"
name: "{{wp_db_name}}"
state: present
# we create a user that will be the admin of the database and that wordpress will use
- name: Create a new database user and password
mysql_user:
config_file: "/etc/mysql/my.cnf"
name: "{{wp_db_username}}"
password: "{{wp_db_password}}"
priv: '{{wp_db_name}}.*:ALL'
state: present
Avec la requête précédante, nous arrivons bien sur une page de configuration wordpress.
.png)
.png)
Pour se configurer, wordpress nous demande de faire une installation graphique, ce qui semble difficilement réalisable via ansible.
Pour automatiser cette étape, nous allons la faire manuellement, puis récupérer le fichier de configuration généré par wordpress ainsi que la base de donnée rempli lors de la configuration.
Choisir votre langue (1).
Cliquer sur “Continuer” (2).
.png)
Nous allons renseigner les informations de la base de donnée destinée à wordpress afin qu’il puisse y accéder.
Cliquer sur “C’est parti!”
.png)
Renseigner les informations de votre base de donnée.
.png)
Cliquer sur “Lancer l’installation”.
.png)
Remplir les différents champs avec vos informations personnelles.
Les deux premiers champs sont destinés aux identifiants de l’admin du blog wordpress.
Cliquer “Installer wordpress”.
.png)
Cliquer sur “Se connecter”.
.png)
Se connecter.
.png)
Vous êtes désormais connecté en tant qu’admin sur votre site wordpress !
.png)
Il faut ensuite récupérer le fichier wp-config.php présent dans la racine du dossier wordpress.
Ce fichier contient les informations de connexion à notre base de donnée.
Lorsque wordpress détectera la présence de ce fichier il fera l’installation tout seul.
.png)
Enfin, pour automatiser l’étape de la création de l’admin du wordpress, nous allons récupérer l’état de la base de donnée actuelle afin de la restaurer grace à ansible.
Wordpress, pourra ainsi automatiser 100% de son installation.
Pour récuperer la base de donnée nous utilisons la commande mysqldump.
DM4 est notre base de donnée ici.
Cela nous donne un fichier que nous pourrons restaurer sur une machine vierge.
.png)
# we copy the wordpress config file to skip the first part of the graphical install. we generated it previously with the graphical install.
- name: Copy WordPress config file to local site
template: src=wp-config.php dest={{local_path}}
# we fill the previous database with some wordpress information. To do this we previously generated it with the second part of the graphic install
- name: copy database dump
copy:
src: ./DM4.sql
dest: .
# we use a mysql_db command to restore the database from a sql file. This step permit to skip the second and last graphical install
- name: Restore database
community.mysql.mysql_db:
name: DM4
state: import
target: ./DM4.sql
Avec ces nouvelles lignes, nous relançons ansible et le blog est déjà correctement configuré.
.png)
Malheureusement pour nous, lorsque nous essayons d’accéder au port 10000, nous sommes redirigé vers le port 8000…
.png)
Pour régler cela, nous allons dans un premier temps, implémenter le https.
Voir https
Ensuite, nous gererons la redirection
Voir redirection wordpress