: migrate wordpress to app dir #8

Merged
clement.veret merged 1 commits from wordpress_data_dir into main 2025-04-11 11:39:06 +02:00
6 changed files with 218 additions and 1 deletions

View File

@@ -5,6 +5,7 @@ web_hostname:
- host: nintendojo.fr
acme_unmanaged: true
- host: www.nintendojo.fr
type: wordpress
- host: forum.nintendojo.fr
type: phpbb
- host: nintendojofr.com

View File

@@ -17,7 +17,7 @@ server {
ssl_certificate /etc/x509/www.nintendojo.fr/fullchain.cer;
ssl_certificate_key /etc/x509/www.nintendojo.fr/www.nintendojo.fr.key;
root /srv/http/www.nintendojo.fr/;
root /var/www/www.nintendojo.fr/;
index index.html index.htm index.php;
client_max_body_size 2G;

View File

@@ -2,3 +2,5 @@
- name: Init DB
ansible.builtin.include_tasks: db.yml
- name: Install wordpress
ansible.builtin.include_tasks: wordpress.yml

View File

@@ -0,0 +1,104 @@
---
## Remove the previous app & install the new version
- name: Remove wordpress previous version
ansible.builtin.file:
state: absent
dest: "{{ wordpress_app_home }}"
- name: Create app home
ansible.builtin.file:
state: directory
dest: "{{ wordpress_app_home }}"
owner: root
group: www-data
mode: "0o750"
- name: Install wordpress application
ansible.builtin.unarchive:
remote_src: true
src: "{{ wordpress_url }}"
dest: "{{ wordpress_app_home }}"
owner: root
group: www-data
mode: "a-rwx,u+rwX,g+rX"
extra_opts: ['--strip-components=1']
exclude: "{{ wordpress_userdata_app_dirs | map('regex_replace', '^', 'wordpress/') }}"
## Ensure the data dirs exist, populate them if not
- name: Create data home
ansible.builtin.file:
state: directory
path: "{{ wordpress_data_home }}"
owner: www-data
group: www-data
mode: "a-rwx,u+rwX,g+rX"
# If the first data dir exists, other should exist too
- name: Get data dir
ansible.builtin.stat:
path: "{{ wordpress_data_home }}/{{ wordpress_userdata_app_dirs[0] }}"
register: _wordpress_userdata_dir_stat
- name: Install wordpress data dir
when: not _wordpress_userdata_dir_stat.stat.exists
block:
- name: Unarchive wp-content
ansible.builtin.unarchive:
remote_src: true
src: "{{ wordpress_url }}"
dest: "{{ wordpress_data_home }}"
owner: www-data
group: www-data
mode: "a-rwx,u+rwX,g+rX"
extra_opts: ['--strip-components=1']
include: "{{ wordpress_userdata_app_dirs | map('regex_replace', '^', 'wordpress/') | first }}"
## no-wp doesnt exist by default, creating it
- name: Create no-wp
ansible.builtin.file:
state: directory
dest: "{{ wordpress_data_home }}/no-wp"
owner: www-data
group: www-data
mode: "0o750"
- name: Link wordpress userdata dirs
ansible.builtin.file:
state: link
src: "{{ wordpress_data_home }}/{{ item }}"
dest: "{{ wordpress_app_home }}/{{ item }}"
loop: "{{ wordpress_userdata_app_dirs }}"
# Put config file
- name: Get secret-key salt
ansible.builtin.uri:
url: "https://api.wordpress.org/secret-key/1.1/salt/"
return_content: true
register: _wordpress_secret_salt
- name: Put wordpress configuration file
ansible.builtin.template:
src: wp-config.php.j2
dest: "{{ wordpress_config_path }}"
owner: root
group: www-data
mode: "0o640"
vars:
salt_block: "{{ _wordpress_secret_salt.content }}"
# Handle languages
- name: Find & delete default language files inside wp-content
ansible.builtin.command:
cmd: "find {{ wordpress_data_home }}/wp-content/languages/ -type f -maxdepth 1 -delete"
changed_when: true
- name: Reextract language files
ansible.builtin.unarchive:
remote_src: true
src: "{{ wordpress_url }}"
dest: "{{ wordpress_data_home }}"
owner: www-data
group: www-data
mode: "a-rwx,u+rwX,g+rX"
extra_opts: ['--strip-components=1']
include: "wordpress/wp-content/languages/"

View File

@@ -0,0 +1,93 @@
<?php
/**
* La configuration de base de votre installation WordPress.
*
* Ce fichier contient les réglages de configuration suivants : réglages MySQL,
* préfixe de table, clefs secrètes, langue utilisée, et ABSPATH.
* Vous pouvez en savoir plus à leur sujet en allant sur
* {@link http://codex.wordpress.org/Editing_wp-config.php Modifier
* wp-config.php} (en anglais). C'est votre hébergeur qui doit vous donner vos
* codes MySQL.
*
* Ce fichier est utilisé par le script de création de wp-config.php pendant
* le processus d'installation. Vous n'avez pas à utiliser le site web, vous
* pouvez simplement renommer ce fichier en "wp-config.php" et remplir les
* valeurs.
*
* @package WordPress
*/
// ** Réglages MySQL - Votre hébergeur doit vous fournir ces informations. ** //
/** Nom de la base de données de WordPress. */
define('DB_NAME', '{{ wordpress_maria_database }}');
/** Utilisateur de la base de données MySQL. */
define('DB_USER', '{{ wordpress_maria_user }}');
/** Mot de passe de la base de données MySQL. */
define('DB_PASSWORD', '{{ wordpress_maria_password }}');
/** Adresse de l'hébergement MySQL. */
define('DB_HOST', 'localhost');
/** Jeu de caractères à utiliser par la base de données lors de la création des tables. */
define('DB_CHARSET', 'utf8');
/** Type de collation de la base de données.
* N'y touchez que si vous savez ce que vous faites.
*/
define('DB_COLLATE', '');
/**#@+
* Clefs uniques d'authentification et salage.
*
* Remplacez les valeurs par défaut par des phrases uniques !
* Vous pouvez générer des phrases aléatoires en utilisant
* {@link https://api.wordpress.org/secret-key/1.1/salt/ le service de clefs secrètes de WordPress.org}.
* Vous pouvez modifier ces phrases à n'importe quel moment, afin d'invalider tous les cookies existants.
* Cela forcera également tous les utilisateurs à se reconnecter.
*
* @since 2.6.0
*/
{{ salt_block }}
/**#@-*/
/**
* Préfixe de base de données pour les tables de WordPress.
*
* Vous pouvez installer plusieurs WordPress sur une seule base de données
* si vous leur donnez chacune un préfixe unique.
* N'utilisez que des chiffres, des lettres non-accentuées, et des caractères soulignés!
*/
$table_prefix = 'wp_';
/**
* Langue de localisation de WordPress, par défaut en Anglais.
*
* Modifiez cette valeur pour localiser WordPress. Un fichier MO correspondant
* au langage choisi doit être installé dans le dossier wp-content/languages.
* Par exemple, pour mettre en place une traduction française, mettez le fichier
* fr_FR.mo dans wp-content/languages, et réglez l'option ci-dessous à "fr_FR".
*/
define('WPLANG', 'fr_FR');
/**
* Pour les développeurs : le mode deboguage de WordPress.
*
* En passant la valeur suivante à "true", vous activez l'affichage des
* notifications d'erreurs pendant votre essais.
* Il est fortemment recommandé que les développeurs d'extensions et
* de thèmes se servent de WP_DEBUG dans leur environnement de
* développement.
*/
define('WP_DEBUG', false);
/* C'est tout, ne touchez pas à ce qui suit ! Bon blogging ! */
/** Chemin absolu vers le dossier de WordPress. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Réglage des variables de WordPress et de ses fichiers inclus. */
require_once(ABSPATH . 'wp-settings.php');

View File

@@ -0,0 +1,17 @@
---
wordpress_version: "6.7.2"
wordpress_url: "https://fr.wordpress.org/wordpress-{{ wordpress_version }}-fr_FR.tar.gz"
wordpress_access_url: "{{ web_hostname | selectattr('type', 'defined') | selectattr('type', '==', 'wordpress') | map(attribute='host') | first }}"
# Access path
wordpress_app_home: "/var/www/{{ wordpress_access_url }}"
wordpress_data_home: "/srv/www-data/{{ wordpress_access_url }}"
# App dirs
wordpress_userdata_app_dirs:
- wp-content
- no-wp
wordpress_config_path: "{{ wordpress_app_home }}/wp-config.php"