Simplifiez le déploiement de votre site WordPress avec notre guide facile à suivre. Utilisez Docker Compose, Nginx, Apache et SSL pour un processus d’installation transparent.
Nous créerons également des volumes pour que les modifications ou mises à jour soient conservées lorsque le conteneur redémarre.
Cette configuration a été testée sur Google Cloud avec une instance exécutant Ubuntu 22.04 OS. Vous pouvez également mettre en place cette configuration sur n’importe quel service cloud comme AWS, Azure, DigitalOcean, ou sur des serveurs dédiés ou VPS.
Prérequis
Veuillez vous assurer d’avoir effectué toutes les étapes mentionnées ci-dessus.
- Domaine dirigé vers l’adresse IP de votre serveur.
- Docker installé et configuré.
- Docker Compose installé et configuré.
Une fois tous les prérequis effectués, vous pouvez procéder à la configuration et au paramétrage de WordPress.
Créer le répertoire du projet
Connectez-vous en SSH à votre serveur et commencez par créer un nouveau répertoire de projet nommé wp-project
. Vous pouvez également le nommer comme vous le souhaitez.
mkdir wp-project
Créer le fichier Docker Compose YML
Maintenant, naviguez à l’intérieur du répertoire du projet et créez un nouveau fichier docker-compose.yml avec la configuration suivante.
cd wp-project
Créez un nouveau fichier docker-compose.yml
.
nano docker-compose.yml
Copiez tout le contenu ci-dessous et collez-le dans le fichier.
Configurer Docker Compose
Assurez-vous de remplacer les variables d’environnement mentionnées ci-dessous.
docker-compose.ymlversion: "3.9"
services:
wordpress:
container_name: wordpress
image: wordpress:php8.2-apache
restart: always
stdin_open: true
tty: true
environment:
WORDPRESS_DB_HOST: mariadb
WORDPRESS_DB_USER: db_user
WORDPRESS_DB_PASSWORD: db_user_pass
WORDPRESS_DB_NAME: db_name
volumes:
- wordpress_data:/var/www/html
mariadb:
container_name: mariadb
image: mariadb
restart: always
environment:
MYSQL_DATABASE: db_name
MYSQL_USER: db_user
MYSQL_PASSWORD: db_user_pass
MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
volumes:
- db_data:/var/lib/mysql
nginx:
container_name: nginx
image: nginx:latest
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./certbot/conf:/etc/nginx/ssl
- ./certbot/data:/var/www/html
certbot:
container_name: certbot
image: certbot/certbot:latest
command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email -d domain.com -d www.domain.com
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/logs:/var/log/letsencrypt
- ./certbot/data:/var/www/html
volumes:
db_data:
wordpress_data:
Appuyez sur CTRL-X
suivi de Y
et ENTER
pour enregistrer et quitter le fichier.
Configuration Docker Compose : Explication
Voici les détails de configuration :
- Version: Composer une version de fichier compatible avec le Docker Engine. Vous pouvez vérifier la compatibilité ici.
- Services: Ici, nous avons quatre services nommés
WordPress
,MariaDB
,nginx
, etcertbot
. - Image: Nous utilisons la dernière version de WordPress avec PHP 8.2, Apache, Mariadb, Nginx, et Certbot images disponibles sur le Docker hub.
- Volumes:
wordpress_data
: Nous avons configuré ce répertoire pour qu’il soit synchronisé avec le répertoire que nous souhaitons utiliser comme racine web à l’intérieur du conteneur.conf
: Ici, nous placerons le fichier de configuration Nginx pour qu’il soit synchronisé avec le dossier conf.d Nginx par défaut à l’intérieur du conteneur.cedtbot/conf
: C’est ici que nous recevrons le certificat SSL, et cela sera synchronisé avec le dossier que nous voulons à l’intérieur du conteneur.ports
: Configurer le conteneur pour qu’il écoute les ports listés.command
: La commande utilisée pour recevoir le certificat SSL.
- Environnement: Ici, nous listons tous les variables d’environnement disponibles pour l’image WordPress.
WORDPRESS_DB_HOST
: Ici, nous utilisons le nom de service du conteneur MariaDB.WORDPRESS_DB_USER
: Identique à celui que nous avons configuré dans le service mariadb.WORDPRESS_DB_PASSWORD
: Identique à celui que nous avons configuré dans le service mariadb.WORDPRESS_DB_NAME
: Identique à celui que nous avons configuré dans le service mariadb.
Configurer Nginx
Selon la configuration du docker-compose.yml, nous devons créer le fichier default.conf
à l’intérieur du répertoire nginx/conf
.
Créez le répertoire à côté de votre fichier docker-compose.yml
pour contenir le fichier de configuration.
mkdir -p nginx/conf
Créez un fichier nommé default.conf
.
nano nginx/conf/default.conf
Placez les configurations suivantes ; ici, nous utilisons une configuration de proxy inverse vers le conteneur WordPress exécutant Apache.
nginx/conf/default.conf server {
listen [::]:80;
listen 80;
server_name domain.com www.domain.com;
root /var/www/html;
index index.php;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}
location / {
try_files $uri @apache;
}
location ~ ^/.user.ini {
deny all;
}
location ~* .(svg|svgz)$ {
types {}
default_type image/svg+xml;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @apache {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~[^?]*/$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~ .php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
}
Appuyez sur CTRL-X
suivi de Y
et ENTER
pour enregistrer et quitter le fichier.
Maintenant que vous avez votre configuration docker-compose et votre configuration Nginx.
Déployer WordPress avec Docker Compose
Démarrez les conteneurs en utilisant la commande suivante ; vous recevrez les certificats SSL une fois que les conteneurs seront démarrés.
docker-compose up -d
Une fois que tous les conteneurs sont démarrés, vous verrez deux dossiers supplémentaires, certbot
et WordPress,
créés à côté de votre fichier docker-compose.yml
.
Le répertoire wordpress
contient tout le code source de votre site WordPress.
Le répertoire certbot
contient tous les fichiers liés à vos certificats SSL.
Pour voir les conteneurs, vous pouvez exécuter la commande suivante.
docker-compose ps
Configurer le certificat SSL Let’s Encrypt avec Nginx
Comme vous avez reçu le certificat SSL Let’s Encrypt, vous pouvez configurer HTTPS et mettre en place une redirection vers HTTPS.
Modifiez le default.conf
et apportez les modifications suivantes.
nano nginx/conf/default.conf
nginx/conf/default.confserver {
listen [::]:80;
listen 80;
server_name domain.com www.domain;
return 301 https://www.domain.com$request_uri;
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name domain.com;
ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;
return 301 https://www.domain.com$request_uri;
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name www.domain.com;
ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;
root /var/www/html;
index index.php;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}
location / {
try_files $uri @apache;
}
location ~ ^/.user.ini {
deny all;
}
location ~* .(svg|svgz)$ {
types {}
default_type image/svg+xml;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @apache {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~[^?]*/$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~ .php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
}
Appuyez sur CTRL-X
suivi de Y
et ENTER
pour enregistrer et quitter le fichier.
Maintenant, vous pouvez redémarrer le service Nginx pour charger les nouvelles configurations.
docker-compose restart nginx
Maintenant, vous pouvez vérifier votre nom de domaine à partir de votre navigateur. Vous serez redirigé vers HTTPS, et vous verrez la page d’installation WordPress pour terminer l’installation.
Dépannage
Voici quelques conseils pour SSH vers les conteneurs ; consultez les journaux d’erreurs.
SSH vers le conteneur Docker
Pour SSH dans le conteneur wordpress
, vous pouvez utiliser la commande ci-dessous.
docker-compose exec wordpress /bin/bash
Pour vous connecter en SSH au conteneur nginx
, vous pouvez utiliser la commande ci-dessous.
docker-compose exec nginx /bin/bash
Vérifier les journaux des conteneurs
Vous pouvez utiliser la commande ci-dessous pour vérifier les journaux des conteneurs à l’aide de docker-compose
docker-compose logs -f
Redémarrer les conteneurs
Vous pouvez redémarrer les conteneurs en utilisant facilement la commande restart
.
docker-compose restart container_name
Remplacer container_name
par le nom de votre conteneur (wordpress, nginx, certbot)
Arrêter tous les conteneurs Docker
Vous pouvez arrêter tous les conteneurs Docker à l’aide de la commande ci-dessous.
docker-compose down
Supprimer tous les conteneurs et les volumes
Vous pouvez utiliser docker-compose pour supprimer tous les conteneurs et leurs volumes avec la commande ci-dessous.
docker compose rm -fv
Supprimer tous les conteneurs Docker
Supprimez tous les conteneurs à l’aide de la commande suivante.
docker rm -f $(docker ps -a -q)
Supprimer tous les volumes
Vous pouvez également supprimer tous les volumes à l’aide de la commande ci-dessous.
docker volume rm $(docker volume ls -q)
Démarrer tous les conteneurs
Avec une seule commande Docker compose, vous pouvez démarrer tous les conteneurs.
docker-compose up -d
Conclusion
Vous avez maintenant appris à installer et configurer WordPress avec Nginx, Apache, PHP 8.2, MariaDB et Let’s Encrypt avec Docker et Docker Compose sur Ubuntu 22.04.
Merci de votre temps.
Source:
https://dzone.com/articles/wordpress-deployment-docker-nginx-apache-ssl