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