Leny Bernard, 09/04/2019

[TUTO] Reverse Proxy Apache vers Docker (et docker-compose) avec SSL

4 minutes de lecture

Problématique

Aujourd'hui, un petit tutoriel pour un besoin qui nous arrive souvent ici mais sur lequel on bute finalement assez souvent sur des petits soucis : orchestrer un site internet par docker-compose et l'héberger sur un mutualisé.

C'est une procédure assez simple avec quelques petits points à garder en tête. Voici les étapes :

  1. Avoir une configuration docker-compose pour le projet que l'on souhaite héberger et la lancer
  2. Créer un vhost pour faire la redirection vers le container
  3. Activer le SSL

Etape 1 : docker-compose

Pour faire simple (ou pas), on va prendre un site wordpress. À la racine de votre projet (testé avec un wordpress 5.1), ajoutez un dossier .docker et un fichier docker-compose avec ce contenu :

Virtualhost / Proxy Apache2

Le but de ce vhost est de faire proxy, c'est à dire rediriger toutes les requêtes arrivant chez apache2 vers le container Docker:

Il faut activer le vhost bien sur, sur un petit debian / ubuntu, ça donne ça: sudo a2ensite mywebsite.conf (si le fichier s'appelle mywebsite.conf bien sur)

Assurez-vous que le module apache mod_proxy soit bien activé

SSL

Pour de multiples raisons de sécurité, utiliser le protocole SSL est désormais une pratique obligatoire c'est pourquoi il faut le maitriser.

Pour le faire simplement, on utilise letsencrypt qui nous permet de générer des certificats gratuitement et de les renouveler automatiquement.

Assurez-vous de bien avoir Letsencrypt (certbot) sur votre serveur et votre nom de domaine qui pointe sur votre serveur. Ensuite lancez la commande pour générer le certificat :

sudo certbot --apache -d mywebsite.com

Avec l'option --apache, Certbot va faire une partie du travail de redirection des requêtes arrivant sur http vers https, il faudra donc, au moment où il va nous le demander, bien sélectionner Redirection.

Si tout se passe bien, certbot aura ajouté quelques lignes pour faire cette fameuse redirection dans le vhost précédent:

Il aura aussi créé un autre vhost (suffixé avec -le comme LetsEncrypt) auquel il faudra faire les modifications ci-dessous :

Assurez-vous que le module apache mod_ssl soit bien activé

Créez et ajoutez en volume le vhost HTTPS

Par défaut, dans l'image docker de wordpress, il n'y a que le vhost http (port 80) qui est activé, il va donc falloir créer un vhost pour gérer ce cas. Pour ce faire, on va créer un fichier dans le dossier .docker/config/vhost.conf avec ce contenu:

Vous aurez peut-être remarqué qu'on fait réference aux certificats letsencrypt, pour que cela fonctionne, il va falloir ajouter ces certificats aux volumes du container.

Voici donc la version finale:

Voilà

Le site est désormais accessible sur https://website.com, le service apache2 de la machine hôte n'est utilisé qu'en proxy (passe-plat) et c'est bien le service apache2 du container qui est utilisé. On peut alors bien isoler notre site vitrine wordpress de ses petits camarades réalisés en Symfony etc ;)

comments powered by Disqus

Nos derniers articles