Déployer WordPress et MariaDB sur Podman

Déployer WordPress et MariaDB sur Podman

Overview

Comment déployer WordPress / MariaDB en conteneur sur Podman

Bienvenue dans ce guide étape par étape qui vous révèlera tous les secrets pour faire fonctionner WordPress dans un conteneur Podman. Préparez-vous à plonger dans l'univers captivant de WordPress, le leader incontesté des blogs, et à explorer les incroyables possibilités offertes par Podman, le maestro des conteneurs sous Linux.

WordPress est l'outil de blog le plus populaire au monde, doté d'une grande flexibilité et d'une richesse de fonctionnalités. En tant que système de gestion de contenu (CMS) basé sur PHP et les bases de données MariaDB, il offre une plateforme solide pour créer et gérer des sites web de manière intuitive. Et devinez quoi ? Il est tout à fait possible de l'exécuter en tant que conteneur Podman !

Alors, préparez-vous à embarquer dans une aventure passionnante où nous vous guiderons pas à pas dans le déploiement de WordPress sur un conteneur Podman. Que vous soyez un expert en technologie ou un néophyte intrépide, ce guide vous permettra de maîtriser cet assemblage magique et de découvrir comment tirer pleinement parti de la combinaison gagnante entre WordPress et Podman. Attachez vos ceintures, nous partons à la conquête du monde des conteneurs avec style et professionnalisme !

Prêt à mettre WordPress en boîte et à lui donner des ailes avec Podman ? Attachez votre ceinture, car nous allons vous montrer comment donner à votre cher CMS une nouvelle dimension en le conteneurisant façon Podman ! Alors, enfilez vos chaussures de danse virtuelles et préparez-vous à faire tourner votre site web comme jamais auparavant !

si vous avez des questions, je vous réponds en direct sur ce lien discord et twitter @vCenter_net

Installation Podman

Vous avez besoin d'installer Podman sur votre machine avant de pouvoir déployer des containers

vous pouvez suivre les étapes dans l'article précédent Comment installer Podman sur Rocku Linux 9

1podman version
  • résultat de la commande :
1[bkalem@SRV-ROCKY-01 ~]$ podman version 
2Client:       Podman Engine
3Version:      4.4.1
4API Version:  4.4.1
5Go Version:   go1.19.6
6Built:        Tue May  9 12:43:57 2023
7OS/Arch:      linux/amd64

Construire ou utiliser l'image officielle de WordPress / MariaDB

Prêt à embarquer dans une quête épique pour obtenir les images depuis le registry public Docker qui feront briller votre déploiement de WordPress et MariaDB ? Eh bien, à ce stade, vous avez deux options : construire votre propre image WordPress (pour les aventuriers intrépides) ou opter pour l'image officielle de WordPress et MariaDB (pour ceux qui préfèrent l'efficacité).

Dans ce guide truffé de bonnes astuces, nous avons décidé d'emprunter la voie de l'image officielle, qui est un vrai paquet cadeau avec Apache, PHP et tous les fichiers WordPress nécessaires. Alors, sans plus attendre, préparez-vous à dégainer votre souris et à télécharger la dernière image Docker de WordPress, car votre déploiement est sur le point de passer à la vitesse supérieure :

1podman pull docker.io/library/wordpress

vous remarquerez que je n'ai pas préciser de tag afin de telecharger la version latest mais vous pouvez prendre une version différente si vous le désirez.

Évidemment, vous aurez besoin d'une base de données pour stocker toutes les données précieuses de votre site WordPress. La solution la plus courante et recommandée pour accompagner WordPress est MariaDB, une base de données évolutive et performante.

Si vous souhaitez utiliser l'image officielle de MariaDB, voici comment la télécharger en toute simplicité :

1podman pull docker.io/library/mariadb

Cette fois-ci, j'ai également téléchargé la version latest, mais vous êtes libre de choisir une autre balise tag selon vos préférences.

Vous pouvez lister les images télécharger avec cette commande :

1podman image ls
  • résultat de la commande :
1[bkalem@SRV-ROCKY-01 ~]$ podman image ls
2REPOSITORY                   TAG         IMAGE ID      CREATED     SIZE
3docker.io/library/mariadb    latest      99833200524a  2 days ago  410 MB
4docker.io/library/wordpress  latest      32bbab3b1946  4 days ago  629 MB

Création d'un réseau Podman

Il existe différentes méthodes pour connecter des conteneurs Podman. L'une de ces méthodes consiste à les relier au même réseau Podman. Ainsi, tous les conteneurs connectés au même réseau peuvent communiquer entre eux sans problème. Imaginez-les comme une joyeuse bande de conteneurs qui se serrent les coudes et échangent des informations sans la moindre hésitation.

la commande suivante va nous permettre de créer un réseau Podman nommer wordpress-network :

1podman network create wordpress-network

Vous pouvez lister les réseau disponible avec cette commande :

1podman network ls
  • résultat de la commande :
1[bkalem@SRV-ROCKY-01 ~]$ podman network create wordpress-network
2wordpress-network
3
4[bkalem@SRV-ROCKY-01 ~]$ podman network ls
5NETWORK ID    NAME               DRIVER
62f259bab93aa  podman             bridge
7f6ad3ac3c77d  wordpress-network  bridge
8

Préparez-vous à connecter notre application WordPress et notre base de données en utilisant le réseau wordpress-network.

Création du container MariaDB

Étant donné que nous avons déjà téléchargé une image MariaDB, vous pouvez simplement créer et démarrer un conteneur en utilisant cette même image.

Variable d'environement MariaDB

L'image MariaDB utilise les variables d'environement suivante afin de configurer les paramatres nécessaires lors de la création du container :

MARIADB_ROOT_PASSWORD : mot de passe de l'utilisateur root de mariadb
MARIADB_DATABASE : le nom de la base de donnée qui sera créer automatiquement
MARIADB_USER : le nom d'utilisateur qui recevera tous les privilèges sur la base de donnée créer précedement
MARIADB_PASSWORD : le mot de passe de l'utilisateur précedent dont il a reçu les privileges sur la base de donnée

Création du dossier persistant pour le volume MariaDB

Imaginez un conteneur Podman éphémère, comme une bulle de savon qui flotte dans l'air. À sa disparition, toutes les données qu'il contient s'envolent avec lui, comme des souvenirs fugaces. Pour éviter ce triste sort, nous devons mettre en place un plan solide pour assurer la survie de ces données précieuses. nous utiliserons un volume pour garantir la persistance de la base de donnée, même apres destruction du container :

1mkdir -p $HOME/wordpress/data/

Création et démarrage du container MariaDB

Maintenant, nous sommes prêt à créer et démarrer le conteneur MariaDB, dans cet example :

  • le container MariaDB sera connecter au réseau wordpress-network
  • le mot de passe de l'utilisateur root est: formini_root_pw
  • le nom de la base de donnée : wordpressdb
  • l'utilisateur de la base de donnée : bilal
  • le mot de passe de l'utilisateur de la base de donnée : formini_db_pw
  • le volume locale $HOME/wordpress/data sera monter sue le repertoire interne /var/lib/mysql
  • l'option Z (majuscule) permet de garantir le bon fonctionnement de SELinux
  • le nom du container sera formini-mariadb
  • l'image utiliser sera mariadb:latest
 1podman run -d \
 2--network="wordpress-network" \
 3--env MARIADB_ROOT_PASSWORD="formini_root_pw" \
 4--env MARIADB_DATABASE="wordpressdb" \
 5--env MARIADB_USER="bilal" \
 6--env MARIADB_PASSWORD="formini_db_pw" \
 7--restart unless-stopped \
 8--volume "$HOME/wordpress/data:/var/lib/mysql:Z" \
 9--name="formini-mariadb" \
10mariadb:latest

Vérification du bon fonctionnement du container MariaDB

Bravo, nous venons de créer notre premier container et pour s'en assurer voici quelques commandes utiles avec leurs résultats :

Lister les containers en cours d'exécution

1[bkalem@SRV-ROCKY-01 ~]$ podman container ls
2CONTAINER ID  IMAGE                             COMMAND     CREATED        STATUS        PORTS       NAMES
38b27e59cb972  docker.io/library/mariadb:latest  mariadbd    2 minutes ago  Up 2 minutes              formini-mariadb

Verifier le log du container MariaDB

1[bkalem@SRV-ROCKY-01 ~]$ podman container logs formini-mariadb
2...
32023-06-19 23:11:50+00:00 [Note] [Entrypoint]: Creating database wordpressdb
42023-06-19 23:11:50+00:00 [Note] [Entrypoint]: Creating user bilal
52023-06-19 23:11:50+00:00 [Note] [Entrypoint]: Giving user bilal access to schema wordpress_db
62023-06-19 23:11:50+00:00 [Note] [Entrypoint]: Securing system users (equivalent to running mysql_secure_installation)
7...
82023-06-19 23:11:50 0 [Note] mariadbd: ready for connections.
9...

Se connecter à MariaDB

1[bkalem@SRV-ROCKY-01 ~]$ podman exec -it formini-mariadb mariadb -uroot -pformini_root_pw
2Welcome to the MariaDB monitor.  Commands end with ; or \g.
3Your MariaDB connection id is 4
4Server version: 11.0.2-MariaDB-1:11.0.2+maria~ubu2204 mariadb.org binary distribution
5
6Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
7
8Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

à noter qu'il n'y a pas d'espace entre -uroot et -pformini_root_pw

Quelque requette sur MariaDB

 1MariaDB [(none)]> SHOW databases;
 2+--------------------+
 3| Database           |
 4+--------------------+
 5| information_schema |
 6| mysql              |
 7| performance_schema |
 8| sys                |
 9| wordpressdb       |
10+--------------------+
115 rows in set (0.001 sec)
12
13MariaDB [(none)]> SELECT user FROM mysql.user;
14+-------------+
15| User        |
16+-------------+
17| bilal       |
18| root        |
19| mariadb.sys |
20| root        |
21+-------------+
224 rows in set (0.001 sec)
23
24MariaDB [(none)]> SHOW GRANTS FOR 'bilal';
25+------------------------------------------------------------------------------------------------------+
26| Grants for bilal@%                                                                                   |
27+------------------------------------------------------------------------------------------------------+
28| GRANT USAGE ON *.* TO `bilal`@`%` IDENTIFIED BY PASSWORD '*D73BF27D9BA9C25065049B50831487C65D4E6DF7' |
29| GRANT ALL PRIVILEGES ON `wordpressdb`.* TO `bilal`@`%`                                             |
30+------------------------------------------------------------------------------------------------------+
312 rows in set (0.000 sec)
32
33MariaDB [(none)]>
34

Lister le contenu du volume $HOME/wordpress/data

 1[bkalem@SRV-ROCKY-01 ~]$ ls -l $HOME/wordpress/data/
 2total 170112
 3-rw-rw----. 1 100998 100998  16875520 Jun 20 00:33 aria_log.00000001
 4-rw-rw----. 1 100998 100998        52 Jun 20 00:33 aria_log_control
 5-rw-rw----. 1 100998 100998         9 Jun 20 00:33 ddl_recovery.log
 6-rw-rw----. 1 100998 100998       719 Jun 20 00:33 ib_buffer_pool
 7-rw-rw----. 1 100998 100998  12582912 Jun 20 00:33 ibdata1
 8-rw-rw----. 1 100998 100998 100663296 Jun 20 00:35 ib_logfile0
 9-rw-rw----. 1 100998 100998  12582912 Jun 20 00:33 ibtmp1
10-rw-r--r--. 1 100998 100998        14 Jun 20 00:33 mariadb_upgrade_info
11-rw-rw----. 1 100998 100998         0 Jun 20 00:33 multi-master.info
12drwx------. 2 100998 100998      4096 Jun 20 00:33 mysql
13drwx------. 2 100998 100998        20 Jun 20 00:33 performance_schema
14drwx------. 2 100998 100998      8192 Jun 20 00:33 sys
15-rw-rw----. 1 100998 100998  10485760 Jun 20 00:33 undo001
16-rw-rw----. 1 100998 100998  10485760 Jun 20 00:33 undo002
17-rw-rw----. 1 100998 100998  10485760 Jun 20 00:33 undo003
18drwx------. 2 100998 100998        20 Jun 20 00:33 wordpressdb
19[bkalem@SRV-ROCKY-01 ~]$
20[bkalem@SRV-ROCKY-01 ~]$ ps aux | grep 100998
21100998      5512  0.1  2.7 1480772 215184 ?      Ssl  00:33   0:00 mariadbd

Création du container WordPress

Maintenant, il est temps de déployer WordPress en tant que conteneur Podman et de le connecter au conteneur de base de données formini-mariadb déjà prêt à l'emploi. C'est comme si nous préparions une danse en duo époustouflante, où WordPress et MariaDB se tiennent la main virtuellement sur la piste technologique. Préparez-vous à créer une harmonie parfaite entre ces deux acteurs clés, donnant naissance à un site WordPress spectaculaire et parfaitement prêt.

Variable d'environement WordPress

Afin de configurer les paramatres nécessaires lors de la création du container WordPress, l'image WordPress utilise les variables d'environement suivante :

WORDPRESS_DB_HOST : adresse IP/fqdn du serveur base de donnée (MariaDB)
WORDPRESS_DB_NAME : nom de la base de donnée déjà créer sur MariaDB
WORDPRESS_DB_USER : nom d'utilisateur dont les privilèges ont été assigner à la base de donnée
WORDPRESS_DB_PASSWORD : mot de passe du nom d'utilisateur dont les privilèges ont été assigner à la base de donnée

Création du dossier persistant pour le volume WordPress

En utilisant un volume persistant, nous créons un espace de stockage sûr et permanent pour notre conteneur. Ainsi, même si le conteneur WordPress est détruit ou redémarré, les données qu'il contient restent intactes. Cela garantit la continuité de notre application WordPress, en préservant les fichiers, les médias et toutes les informations précieuses que vous avez créées.

1mkdir -p $HOME/wordpress/html/

Création et démarrage du container WordPress

Maintenant, nous sommes prêt à créer et démarrer le conteneur WordPress, dans cet example :

  • le container WordPress sera connecter au réseau wordpress-network
  • le nom de la base de donnée : wordpressdb
  • l'utilisateur de la base de donnée : bilal
  • le mot de passe de l'utilisateur de la base de donnée : formini_db_pw
  • le port public exposer est 8080/tcp qui pointe vers le port interne du container 80/tcp
  • le volume locale $HOME/wordpress/html sera monter sue le repertoire interne /var/www/html
  • l'option Z (majuscule) permet de garantir le bon fonctionnement de SELinux
  • le nom du container sera formini-mariadb
  • l'image utiliser sera mariadb:latest
 1podman run -d \
 2--network="wordpress-network" \
 3-e WORDPRESS_DB_NAME="wordpressdb" \
 4-e WORDPRESS_DB_USER="bilal" \
 5-e WORDPRESS_DB_PASSWORD="formini_db_pw" \
 6-e WORDPRESS_DB_HOST="formini-mariadb" \
 7--restart unless-stopped \
 8--publish 8080:80 \
 9--volume "$HOME/wordpress/html:/var/www/html:Z" \
10--name="formini-wordpress" \
11wordpress:latest

Vérification du bon fonctionnement du container WordPress

Bravo, nous venons de créer notre deuxieme container et pour s'en assurer voici quelques commandes utiles avec leurs résultats :

Lister les containers en cours d'exécution

1[bkalem@SRV-ROCKY-01 ~]$ podman container ls
2CONTAINER ID  IMAGE                               COMMAND               CREATED         STATUS         PORTS                 NAMES
3049b2f8a0b6b  docker.io/library/mariadb:latest    mariadbd              15 minutes ago  Up 15 minutes                        formini-mariadb
46a0454211a63  docker.io/library/wordpress:latest  apache2-foregroun...  4 minutes ago   Up 4 minutes   0.0.0.0:8080->80/tcp  formini-wordpress

Verifier le log du container WordPress

1[bkalem@SRV-ROCKY-01 ~]$ podman container logs formini-wordpress
2WordPress not found in /var/www/html - copying now...
3Complete! WordPress has been successfully copied to /var/www/html
4No 'wp-config.php' found in /var/www/html, but 'WORDPRESS_...' variables supplied; copying 'wp-config-docker.php' (WORDPRESS_DB_HOST WORDPRESS_DB_NAME WORDPRESS_DB_PASSWORD WORDPRESS_DB_USER)
5AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.89.0.5. Set the 'ServerName' directive globally to suppress this message
6AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.89.0.5. Set the 'ServerName' directive globally to suppress this message
7[Thu Jun 22 22:28:45.729009 2023] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.56 (Debian) PHP/8.0.29 configured -- resuming normal operations
8[Thu Jun 22 22:28:45.729077 2023] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

Lister le contenu du volume $HOME/wordpress/html/

 1[bkalem@SRV-ROCKY-01 ~]$ ls -l $HOME/wordpress/html/
 2total 244
 3-rw-r--r--.  1 100032 100032   405 Feb  6  2020 index.php
 4-rw-r--r--.  1 100032 100032 19915 Jan  1 01:06 license.txt
 5-rw-r--r--.  1 100032 100032  7402 Mar  5 01:52 readme.html
 6-rw-r--r--.  1 100032 100032  7205 Sep 17  2022 wp-activate.php
 7drwxr-xr-x.  9 100032 100032  4096 May 20 05:30 wp-admin
 8-rw-r--r--.  1 100032 100032   351 Feb  6  2020 wp-blog-header.php
 9-rw-r--r--.  1 100032 100032  2338 Nov 10  2021 wp-comments-post.php
10-rw-rw-r--.  1 100032 100032  5492 Jun 22 01:37 wp-config-docker.php
11-rw-r--r--.  1 100032 100032  5596 Jun 22 23:28 wp-config.php
12-rw-r--r--.  1 100032 100032  3013 Feb 23 11:38 wp-config-sample.php
13drwxr-xr-x.  4 100032 100032    52 May 20 05:30 wp-content
14-rw-r--r--.  1 100032 100032  5536 Nov 23  2022 wp-cron.php
15drwxr-xr-x. 28 100032 100032 12288 May 20 05:30 wp-includes
16-rw-r--r--.  1 100032 100032  2502 Nov 26  2022 wp-links-opml.php
17-rw-r--r--.  1 100032 100032  3792 Feb 23 11:38 wp-load.php
18-rw-r--r--.  1 100032 100032 49330 Feb 23 11:38 wp-login.php
19-rw-r--r--.  1 100032 100032  8541 Feb  3 14:35 wp-mail.php
20-rw-r--r--.  1 100032 100032 24993 Mar  1 16:05 wp-settings.php
21-rw-r--r--.  1 100032 100032 34350 Sep 17  2022 wp-signup.php
22-rw-r--r--.  1 100032 100032  4889 Nov 23  2022 wp-trackback.php
23-rw-r--r--.  1 100032 100032  3238 Nov 29  2022 xmlrpc.php
24[bkalem@SRV-ROCKY-01 ~]$
25[bkalem@SRV-ROCKY-01 ~]$ ps aux | grep 100032
26100032      2600  0.1  0.6 236692 47872 ?        S    23:28   0:00 apache2 -DFOREGROUND
27100032      2601  0.0  0.5 236468 42636 ?        S    23:28   0:00 apache2 -DFOREGROUND
28100032      2602  0.0  0.5 236468 42636 ?        S    23:28   0:00 apache2 -DFOREGROUND
29100032      2603  0.0  0.5 236468 42636 ?        S    23:28   0:00 apache2 -DFOREGROUND
30100032      2604  0.0  0.5 236468 42636 ?        S    23:28   0:00 apache2 -DFOREGROUND
31100032      2605  0.0  0.5 236468 42636 ?        S    23:28   0:00 apache2 -DFOREGROUND

Lister le port public en ecoute sur la machine hote

1
2[bkalem@SRV-ROCKY-01 ~]$ ss -tulnp
3Netid          State           Recv-Q           Send-Q                     Local Address:Port                     Peer Address:Port          Process
4udp            UNCONN          0                0                              127.0.0.1:323                           0.0.0.0:*
5udp            UNCONN          0                0                                  [::1]:323                              [::]:*
6tcp            LISTEN          0                128                              0.0.0.0:22                            0.0.0.0:*
7tcp            LISTEN          0                4096                                   *:8080                                *:*              users:(("rootlessport",pid=2528,fd=5))
8tcp            LISTEN          0                128                                 [::]:22                               [::]:*

ouverture du port public sur le firewalld

Vous remarquez dans la commande précendante que le port 8080/tcp a était exposer avec succès. Par conséquent, nous devons s'assurer que ce port est ouvert sur le firewalld de la machine hôte avec les (02) deux commandes suivantes :

1sudo firewall-cmd --add-port=8080/tcp --zone=public --permanent
1sudo firewall-cmd --reload

et pour s'assurer que le port public 8080/tcp a bien était ouvert sur le firewalld

 1[bkalem@SRV-ROCKY-01 ~]$ sudo firewall-cmd --list-all
 2public (active)
 3  target: default
 4  icmp-block-inversion: no
 5  interfaces: ens160
 6  sources:
 7  services: cockpit dhcpv6-client ssh
 8  ports: 8080/tcp
 9  protocols:
10  forward: yes
11  masquerade: no
12  forward-ports:
13  source-ports:
14  icmp-blocks:
15  rich rules:

Un déploiement réussi : Testez votre site WordPress et émerveillez-vous

Après avoir accompli avec succès la création des conteneurs MariaDB et WordPress, il ne nous reste plus qu'à tester notre configuration. C'est le moment de faire briller notre travail en ouvrant un navigateur web et en utilisant l'adresse IP de notre machine hôte, ainsi que le port public 8080/tcp que nous avons judicieusement choisi lors de la création du conteneur. Dans mon example, l'adresse IP est : 192.168.14.129 Par conséquent, l'url du site est http://192.168.14.129:8080

Step 1 - Choix de la langue d'installation

En un simple clic, nous allons plonger dans l'univers de notre site WordPress fraîchement déployé, prêt à accueillir le monde avec ses fonctionnalités puissantes et son apparence captivante. C'est l'aboutissement d'un processus minutieux, où chaque étape a été soigneusement orchestrée pour offrir une expérience utilisateur exceptionnelle.

Step 2 - information nécessaires y comprit le mot de passe admin

Nous tenons entre nos mains le fruit de notre travail acharné : un site web dynamique, vivant et prêt à conquérir le cœur de ses visiteurs. Alors allons-y, saisissons cette opportunité de montrer au monde ce que nous avons réalisé. Ouvrons le navigateur, saisissons l'adresse et lançons notre site dans l'arène virtuelle.

Step 3 - c'est déjà prêt Yupiii

Direct Live Online sur Twitch et YouTube

Le moment est venu de constater les fruits de notre travail, de voir notre création prendre vie et de célébrer notre réussite. Préparez-vous à être captivé par cette formation gratuite direct live online, fruit de notre persévérance, notre expertise et notre passion pour le cloud et virtualisation :

suivez aussi notre : Twitch