Wordpress

Installation de PHP

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

Installation de mysql

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

Installation de wordpress

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

DM4

DM4

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.

DM4

DM4

Configuration wordpress via Ansible

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

DM4

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!”

DM4

Renseigner les informations de votre base de donnée.

DM4

Cliquer sur “Lancer l’installation”.

DM4

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

DM4

Cliquer sur “Se connecter”.

DM4

Se connecter.
DM4

Vous êtes désormais connecté en tant qu’admin sur votre site wordpress ! DM4

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.

DM4

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.

DM4


# 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é.

DM4

Malheureusement pour nous, lorsque nous essayons d’accéder au port 10000, nous sommes redirigé vers le port 8000…

DM4

Pour régler cela, nous allons dans un premier temps, implémenter le https.
Voir https Ensuite, nous gererons la redirection Voir redirection wordpress