Installez WordPress avec Docker, Nginx, Apache avec SSL . Dans ce guide, vous allez apprendre à faire une meilleure configuration de performance avec Docker, Docker Compose, Nginx, Apache, PHP 8.1, MariaDB et Let's Encrypt pour exécuter WordPress sur Ubuntu 22.04.
Nous créerons également des volumes afin que les modifications ou les mises à jour soient conservées lors du redémarrage du conteneur.
Cette configuration est testée sur Google Cloud avec une instance exécutant le système d'exploitation Ubuntu 22.04. Vous pouvez également effectuer cette configuration dans n'importe quel service cloud comme AWS ou Azure ou DigitalOcean ou n'importe quel serveur dédié ou VPS.
Prérequis
- Installer Docker sur Ubuntu 22.04
- Installez Docker Compose sur Ubuntu 22.04.
Veuillez vous assurer que vous avez terminé toutes les étapes mentionnées ci-dessus
- Le domaine pointe vers l'adresse IP de votre serveur.
- Docker installé et configuré.
- Docker Compose installé et configuré.
Une fois que vous avez rempli toutes les conditions préalables, vous pouvez procéder à l'installation et à la configuration de WordPress.
Étape 1 :Créer un répertoire de projet
Connectez-vous en SSH à votre serveur et commencez par créer un nouveau répertoire de projet nommé wp-project . Vous pouvez également lui donner le nom dont vous avez besoin.
mkdir wp-project
Étape 2 :Créer un fichier Docker Compose YML
Naviguez maintenant dans le répertoire du projet et créez un nouveau fichier docker-compose.yml avec la configuration suivante.
cd wp-project
Créer un nouveau docker-compose.yml fichier.
nano docker-compose.yml
Copiez tout le contenu ci-dessous et collez-le dans le fichier.
Assurez-vous de remplacer les variables d'environnement mentionnées ci-dessous.
version: "3.9"
services:
wordpress:
container_name: wordpress
image: wordpress:php8.1-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
- ./wordpress:/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:
Tapez CTRL-X suivi de Y et ENTER pour enregistrer et quitter le fichier.
Voici les détails de configuration.
- version :version du fichier Compose compatible avec le moteur Docker. Vous pouvez vérifier la compatibilité ici.
- services :ici nous avons 4 services nommés
wordpress,mariadb,nginxetcertbot. - image :Nous utilisons la dernière version de WordPress avec les images PHP 8.1, Apache, Mariadb, Nginx et Certbot disponibles dans le hub Docker.
- volumes :
wordpress:nous avons configuré ce répertoire pour qu'il soit synchronisé avec le répertoire que nous souhaitons utiliser comme racine Web dans le conteneur.conf:ici, nous allons placer le fichier de configuration Nginx à synchroniser avec le dossier Nginx conf.d par défaut à l'intérieur du conteneur.cedtbot/conf:c'est là que nous recevrons le certificat SSL et celui-ci sera synchronisé avec le dossier que nous souhaitons à l'intérieur du conteneur.ports:configurez le conteneur pour qu'il écoute les ports répertoriés.command:la commande utilisée pour recevoir le certificat SSL.
- environnement :nous listons ici toutes 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.
Étape 3 :Configurer Nginx
Selon le docker-compose.yml configuration dont nous avons besoin pour créer le default.conf fichier à l'intérieur du nginx/conf répertoire.
Créez le répertoire en plus de votre docker-compose.yml fichier 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 la configuration du proxy inverse pour le conteneur wordpress exécutant Apache.
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;
}
location ~/. {
deny all;
access_log off;
log_not_found off;
}
}
Tapez CTRL-X suivi de Y et ENTER pour enregistrer et quitter le fichier.
Vous avez maintenant votre configuration docker compose et votre configuration Nginx.
Étape 4 :Déployez WordPress avec Docker Compose
Démarrez les conteneurs à l'aide de la commande suivante, vous recevrez les certificats SSL une fois les conteneurs démarrés.
docker-compose up -d
Une fois tous les conteneurs démarrés, vous verrez deux répertoires supplémentaires certbot et wordpress créé avec votre docker-compose.yml fichier.
Le répertoire wordpress contient tout le code source de votre site Web WordPress.
Le répertoire certbot contient tous les fichiers liés à vos certificats SSL.
Pour afficher les conteneurs, vous pouvez exécuter la commande suivante.
docker-compose ps
Étape 5 :Configurer Let's Encrypt SSL avec Nginx
Comme vous avez reçu le certificat SSL Let's Encrypt, vous pouvez configurer HTTPS et configurer la redirection vers HTTPS.
Modifiez le default.conf et apportez les modifications suivantes.
nano nginx/conf/default.conf
server {
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;
}
location ~/. {
deny all;
access_log off;
log_not_found off;
}
}
Tapez CTRL-X suivi de Y et ENTER pour enregistrer et quitter le fichier.
Redémarrez maintenant le service Nginx pour charger les nouvelles configurations.
docker-compose restart nginx
Vous pouvez maintenant vérifier votre nom de domaine depuis votre navigateur. Vous obtiendrez une redirection vers HTTPS et vous verrez la page d'installation de WordPress pour terminer l'installation.
Apprenez les techniques avancées de WordPress avec ce cours facile à apprendre maintenant.
Conclusion
Vous avez maintenant appris à installer et à configurer WordPress avec Nginx, Apache, PHP 8.1, MariaDB et Let's Encrypt avec Docker et Docker Compose sur Ubuntu 22.04.
Merci pour votre temps. Si vous rencontrez un problème ou des commentaires, veuillez laisser un commentaire ci-dessous.