GNU/Linux >> Tutoriels Linux >  >> Linux

Installez WordPress avec Docker Compose, Nginx, Apache avec SSL

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

  1. Installer Docker sur Ubuntu 22.04
  2. 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 , nginx et certbot .
  • 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.


Linux
  1. Comment installer WordPress avec Nginx sur Ubuntu 18.04

  2. Comment installer WordPress avec Docker sur Ubuntu

  3. Installer ModSecurity avec Apache dans un conteneur Docker

  4. Installer WordPress sur Linux avec Apache

  5. Comment installer Apache 2.4.2 à partir de la source sur CentOS 6.2 avec SSL

Installer WordPress avec Nginx sur Ubuntu 18.04

Comment installer WordPress sur CentOS 7.1 avec Apache

Installer WordPress avec Docker sur Ubuntu 20.04

Comment installer Apache Tomcat 10 sur Ubuntu 20.04 avec Nginx

Installer et utiliser Docker Compose avec Docker sur Ubuntu 22.04

Comment installer Apache Tomcat 10 sur Ubuntu 22.04 avec Nginx