Docker / Nginx, Swarm, Reverse Proxy

Je ne pencherais pas sur les différentes options des fichiers YML mais juste créer un cas concret qui fonctionne. À vous ensuite de le customiser afin de répondre à vos besoins

Pré-requis

Vous aurez besoins avant de commencer

Étapes préparatoires

On utilise le domaine example.fr qui point de base sur votre machine. Donc normalement un ping vers example.fr remonte 127.0.0.1.

Si ce n'est pas le cas ou si vous souhaitez tester avec votre domaine, éditer votre fichier /etc/hosts afin que le domaine point vers votre machine.

Résumé de l'architecture Docker

Architecture stack docker

Configuration du Docker

Nous allons déployer un Swarm qui va nous permettre de regrouper les services sur une ou plusieurs machines.

docker swarm init
# on crée le réseau que vont partager les 3 containers, l'option attachable est indispensable.
docker network create -d overlay my-network --attachable

Récupération du repo git exemple

#clone du repo
cd ~/
git clone https://git1.sneo.fr/sneo/nginx-docker-reverseproxy.git

Dans ce repo vous retrouverez un certificat auto signée (je vous conseille d'en générer un avec Lets Encrypt, là c'est juste pour le test), 2 dossier site "PHP " et 1 dossier reverse Nginx.

 

Dossier Reverse

  • Le dossier certs contient un certificat self signed pour example.fr. Si vous voulez régénérer un certificat, utilisez gen-cert.sh (conf de base pour la génération du cert localhost.conf )
  • Le fichier conf/ngxin.conf va contenir la conf de votre reverse proxy nginx, donc c'est ici que seront configurés les certificats SSL pour le HTTPS et la conf spécifique de vos sites.
  • Le fichier docker-compose.yml, et bien juste la config de votre container.

 

Dossier Site1 et Site2

  • Le fichier conf/ngxin.conf va contenir la conf de votre site. Donc à vous de le modifier en fonction.
  • Le fichier conf/dev.env est juste le fichier qui regroupe les variables pour le MYSQL.
  • Le dossier db ... bin toute la base de donnée de votre site ;)
  • Le dossier html, le code pour votre site. Toute modification sur ce dossier sera effective sans modifier le stack, ce qui n'est pas le cas pour les fichiers de conf et docker-compose.yml
  • Le fichier docker-compose.yml, la config de votre container, celui ci est un peu plus développé car on y retrouve un container PHP, nginx et la base mariaDB.

 

Déploiement des stacks

cd ~/nginx-docker-reverseproxy
#rendre le script deploy_stack.sh executable
chmod +x deploy_stack.sh
#déploiement des stacks 
./deploy_stack.sh

Cela peut prendre un peu de temps à se déployer pour suivre l'avancement du déploiement un simple docker ps nous permettra de voir les containers créés

docker ps -a

 

Une fois tous les containers déployés, vous devriez avoir un tableau dans ce style

liste des containers - docker ps -a

 

Et voilà

Vous pouvez désormais accéder aux sites en https -> https://site1.example.fr ou https://site2.example.fr

 

Problèmes

Si vous rencontrez des problèmes essayez d'abord de bien supprimer tous vos containers arrêtés

docker container prune

Redémarrez votre docker ... normalement tout devrait fonctionner ;) et sinon ...

Essayez de regarder les logs de votre container

docker logs -f <idcontainer>