Skip to content

Installer Wordpress avec docker-compose sur Debian 10 avec Nginx en reverse-proxy

1. Installer nginx

Nginx est un serveur web, comme Apache.
Nous allons l'utiliser comme reverse-proxy, c'est-à-dire qu'il renverra les requêtes d'un autre serveur, que nous installerons aux côtés de wordpress.

Ainsi nous pourrons utiliser le serveur de notre choix pour notre web-application Wordpress (Apache ou Nginx).

On installe Nginx à partir des dépôts Debian, de façon à avoir une version stable, avec l'apport des correctifs de sécurité, et qui ne sera jamais cassé par une modification du système.

sudo apt update
sudo apt upgrade
sudo apt install nginx

Dans votre navigateur, en tapant dabs la barre d'adresse http://IP_DU_SERVEUR, vous devriez accéder à la page d'accueil de nginx Welcome To Nginx!

2. Installation de docker

2.1 Installation des dépendances

sudo apt update
sudo apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common

2.2 Installation de la clé du dépôt Docker

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

2.3 Ajout du dépôt docker dans le sources.list

sudo add-apt-repository \
        "deb [arch=amd64] https://download.docker.com/linux/debian \
        $(lsb_release -cs) \
        stable"

2.4 Mise à jour de la liste des paquets et installation de docker

sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io

2.5 Ajout de l'utilisateur dans le groupe docker pour utiliser docker sans sudo

sudo usermod -aG docker $USER
newgrp docker

3. Installation de Docker-Compose

3.1 Téléchargement de Docker-Compose

curl -s https://api.github.com/repos/docker/compose/releases/latest \
  | grep browser_download_url \
  | grep docker-compose-linux-x86_64 \
  | cut -d '"' -f 4 \
  | wget -qi -

3.2 Mise en place de l'exécutable

chmod +x docker-compose-linux-x86_64 && sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
sudo systemctl restart docker

3.3 Auto-complétion pour Bash

sudo mkdir -p /etc/bash_completion.d
sudo curl -L https://raw.githubusercontent.com/docker/compose/master/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
source /etc/bash_completion.d/docker-compose

Docker et Docker-compose sont maintenant installés

4. Mise en place de Wordpress avec docker-compose

Créer un dossier pour accueillir le projet, et le fichier docker-compose.yml:

mkdir wordpress && cd wordpress
touch docker-compose.yml

Ce fichier de configuration va déployer une image docker de wordpress et de la base de données mysql.

docker-compose.yml

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
       VIRTUAL_HOST: wordpress.mondomaine.fr
volumes:
    db_data: {}

5. Installation de SSL pour Nginx avec Let's Encrypt

Let's encrypt est un service qui permet de générer gratuitement un certificat SSL pour le domaine de notre choix.

sudo apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface
sudo apt install python3-certbot-nginx
sudo certbot -d wordpress.mondomaine.fr 
Les certificats sont alors crés dans /etc/letsencrypt/wordpress.mondomaine.fr!

6. Configuration du **Server Bloc Nginx ** pour wordpress.mondomaine.fr

On peut maintenant créer le fichier de configuration nginx dans /etc/nginx/sites-available/wordpress.mondomaine.fr.conf:

wordpress.mondomaine.fr

upstream wpdocker {
    server 127.0.0.1:8000;
}

server {

    server_name wordpress.mondomaine.fr;


    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/wordpress.mondomaine.fr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/wordpress.mondomaine.fr/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    location / {
        proxy_pass         http://wpdocker;
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }

}

server {
    if ($host = wordpress.mondomaine.fr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

   location / {
    rewrite ^/(.*)$  https://$host/$1 permanent;
  }
        listen 80;
        listen [::]:80;

        server_name wordpress.mondomaine.fr;
    return 404; # managed by Certbot
}

Pour activer ce fichier de configuration, on créé un lien symbolique vers le dossier sites-enabled:

sudo ln -s /etc/nginx/sites-available/wordpress.mondomaine.fr.conf /etc/nginx/sites-enabled/

On recharge la configuration de Nginx:

sudo systemctl reload nginx.service

Et voilà, votre site est accessible à https://wordpress.mondomaine.fr !

Plus d'infos sur la configuration de Nginx

Plus d'infos sur le guide Nginx de Linode