This content is not available in your language yet.
Prêt à faire de la mise en prod avec du HTTPS ? 😄
Avant de commencer dans le vif du sujet, je voulais vous remercier pour l’engouement autour des tutoriels, je ne m’y attendais pas du tout ! 🤩🤩🤩
Donc aujourd’hui nous allons apprendre les reverse proxy ! Une notion très importante dans la conteneurisation et aussi pour vos futures tâches cloud ! Ça va vous apporter pas mal de notion.
Jusqu’a présent, avec nos docker compose dans les précédents tutoriel, nous ouvrions différents port sur notre machine hôte pour accéder au différents services. Sympa mais pas pratique pour une mise en prod.
Dans le plus beau des mondes, nous aurions juste le port 443/80 d’ouvert pour tout nos sites et chaque site pourrais avoir un nom de domaine différents, et bah du coup, bonjour le reverses proxy !
Petit explication en schéma :
Comme vous l’avez compris, le reverse proxy va nous permettre de rediriger les requêtes de différents noms de domaines vers les bon conteneurs ! Il y a d’autre fonctionnalité que nous allons découvrir petit à petit !
Maintenant que vous avez compris le concept, voici une liste de solution remplissant ce rôles :
NGINX: C’est un serveur web très populaire qui peut également être utilisé comme reverse proxy, load balancer, et cache HTTP. Il est connu pour sa performance et sa faible utilisation des ressources.
Caddy: C’est un serveur web moderne qui inclut le support automatique de HTTPS. Il est apprécié pour sa simplicité et sa configuration automatique.
Traefik: C’est un reverse proxy et un load balancer spécialement conçu pour les conteneurs. Il se distingue par sa facilité d’intégration avec les plateformes d’orchestration de conteneurs comme Docker et Kubernetes.
NGINX Proxy Manager: Il s’agit d’une interface graphique pour gérer facilement vos proxy NGINX. Elle est souvent utilisée pour simplifier la configuration de NGINX pour ceux qui préfèrent une interface utilisateur à une ligne de commande.
Apache HTTP Server (Apache2): Bien qu’Apache ne soit pas principalement reconnu comme un reverse proxy, il est capable de fonctionner en tant que tel grâce à ses modules mod_proxy et mod_ssl.
Chaque solutions à des documentations complètes, pour ma part je travaille principalement avec Traefik.
Pour ce tutoriel je vais vous montrer un exemple avec Nginx Proxy Manager, avec une interface d’administration assez sympathique. Puis en second partie, on verra Traefik.
Nginx Proxy Manager
Alors, je vais partir d’un docker compose sans nginx, ici j’intègre jenkins en plus qui est une solution de CI/CD pour nos amis développeur !
Voici le docker compose par défaut que je vais déjà exécuter pour vérifier le fonctionnement.
Tout roule !
Ok maintenant passons à l’intégration du reverse proxy nginx, à partir de ce moment je vais passer sur un vps ovh à quelques euros, vous pouvez toujours ouvrir les ports 443 de votre box mais je ne vous conseille pas pour votre sécurité 🙂
Allez hop petit vps connexion par clé ssh, fail2ban d’activé, on est bien là !
Je vous laisse faire l’installation de docker, voici un petit script qui peut vous aider :
Maintenant, je vais rajouter le reverse proxy au docker compose, direction la doc ! 😝
Voici le bout de code que je vais rajouter, tout en supprimant les ports des autres conteneurs :
Voici le nouveau docker-compose :
Et là ce qui est trop cool, comme nous n’avons pas encore de data persistante et que nos services sont dans un fichier, on va pouvoir copier coller le code dans notre vps sans problème.
Je vais donc faire un nano docker-compose.yaml et copier le code.
Rendez-vous sur http://ip_public:81
Identifiant par défaut :
email: admin@example.com
mot de passe: changeme
Au démarrage vous serez invité à changer le mail ainsi que le mot de passe, je vous conseilles de mettre des identifiants fort même si plus tard nous fermerons le port 81.
Super ! Avant de découvrir quelques fonctionnalités, je vais allez faire 3 entrées de type A de mon nom de domaine sur l’ip publique du VPS OVH.
Maintenant que c’est fait nous allons créer des certificats SSL pour sécuriser les connexions à nos sites.
Nous allons utiliser le challenge HTTP01
En gros du gros, Let’s encrypt va demander de mettre à disposition une url, nginx va s’en occuper et ensuite signer avec clé un fichier pour que let’s encrypt délivre le certificat.
Maintenant que vous avez un aperçu du mécanisme on peut retourner dans notre console de nginx proxy manager.
Dans la partie SSL certificates, nous allons créer 3 certificats.
Et voila nos 3 certificats !
Maintenant que nous avons nos certificats de stockés, on va allez faire les redirection vers les conteneurs. Allez dans la partie Hosts et Proxy Hosts
Dans domain name, nous indiquons le nom de domaine qui sera affilié au conteneur, ensuite on choisis sur quelle conteneur on redirige et sur quel port.
Ensuite dans la partie SSL on va choisir notre certificat.
Une fois les redirection configurer, on test ? 😋
Sur Jenkins :
Petit problème sur uptime, on va regarder si on a une option websocket dans Nginx manager ?
On modifie notre configuration :
Et voilà le résultat :
C’est simple non ?
Vous pouvez bien sur allez plus loins, je vous laisse découvrir par vous mêmes.
Si vous souhaitez héberger un WordPress, un vps chez ovh, un nom de domaine et pour 7€ par mois vous avez votre site en ligne. Personnellement, je trouve ça raisonnable mais pour les personnes qui font juste des sites vitrines, regardez cotée serverless 👀
Bon, on va passer à une partie qui me hype un peu plus je vous avoue, Traefik.
Traefik peut être un peu plus compliqué, mais il est très très puissant, de plus si vous avez besoin pendant votre phase de développement, vous pouvez générer un certificat ssl en local, incroyable.
Avec Traefik nous allons ajouter des routes, pour accéder au conteneur, nous pouvons le configurer via des fichier YAML, TOML ou en cli directement dans le docker compose.
Personnellement j’utilise beaucoup la méthode cli, car je trouve ça rapide et tout est dans mon docker compose.
Fini le bla-bla on va créer notre conteneur Traefik, j’enlève donc nginx proxy manager dans le docker compose.
Voici un exemple de conteneur simple Traefik :
Ici nous indiquons les points d’entrée à utiliser, le port 80 va servir à let’s encrypt. L’accès au service docker permet de vérifier les conteneurs en fonctionnement.
Ensuite, je vais ajouter un resolver pour résoudre les challenges let’s encrypt.
Maintenant pour les conteneurs en frontend je vais ajouter une route et utiliser le resolver pour avoir un certificat SSL.
Nous allons ajouter les indications de traefik avec une section label, ce qui corresponds à des étiquettes, voici pourquoi traefik doit avoir accès à docker.
Bien, ça m’a l’air pas mal, je vais juste ajouter une ligne pour avoir tout les logs info et voir ce qui ce passe.
Voici le docker compose final :
Go test !
Petit docker logs sur le service traefik, on vois que le ACME est chargé pour les certificats SSL.
On a sur chaque site pour vérifier.
(sur un site j’ai eu une error 504 Gateway, un restart du conteneur Traefik a suffit)
Tada !
Et là pas de soucis de websocket avec Uptime ! 😀
Petit tips, avec Uptime Kuma, vous pouvez surveiller vos certificats et vérifier que le renouvellement se fait bien sans problèmes.
Si vous avez compris les mécanismes et pratiquer en même temps, je pense que vous avez pas mal de connaissance pour commencer à mettre en ligne des projets dans des conteneurs.
Si besoin voici le github avec les trois docker compose : https://github.com/Ninapepite/medium-reverse-proxy