Introduction
Pour votre déploiement d’infrastructure, vous aurez sûrement besoin de définir un nom de domaine et des certificats SSL pour l’accès et la sécurité sur votre système. Pour cela, nous allons utiliser un système de proxy Nginx couplé à Let’s Encrypt, pour la génération automatique de certificats SSL.
Pré-requis : Avoir installé et configuré correctement Docker – Posséder un nom de domaine valable
Création du docker-compose
Pour pouvoir utiliser ce système sur n’importe quelle machine rapidement, il faut créer un fichier docker-compose que Docker pourra exécuter pour mettre en place et faire fonctionner les machines. Voici un exemple pour Nginx et Let’s Encrypt :
# Nginx
nginx-reverse-proxy:
image: jwilder/nginx-proxy
container_name: nginx-reverse-proxy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /docker/ssl:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
- /docker/nginx/conf.d:/etc/nginx/conf.d
- /etc/nginx/vhost.d
- /usr/share/nginx/html
labels:
- com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy
# Let's Encrypt
letsencrypt-nginx-proxy-companion:
image: jrcs/letsencrypt-nginx-proxy-companion
restart: always
volumes_from:
- nginx-reverse-proxy
container_name: letsencrypt
volumes:
- /docker/ssl:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
Lancez ensuite la commande docker-compose up -d pour lancer l’installation des deux conteneurs. Dans cet exemple, nous pouvons voir que tous les volumes sont mappés sur la machine (chemin absolu situé à gauche dans les sections “volumes”) et notamment celui des certificats SSL partagé sur les deux conteneurs. Seul Nginx possède des ports à ouvrir, qui sont le 80 pour le protocole HTTP et 443 pour le protocole HTTPS.
A présent que les deux conteneurs sont en marche, nous allons tester le bon fonctionnement en ajoutant (ou en modifiant) une 3ème machine qui nécessite de se connecter à une interface web : Portainer. Cette machine est un peu particulière car elle utilise un port non standard pour y accéder.
portainer:
image: portainer/portainer
restart: always
container_name: portainer
command: -H unix:///var/run/docker.sock
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /server/portainer/portainer_data:/data
environment:
- LETSENCRYPT_HOST=supervision.votre_domaine.com
- LETSENCRYPT_EMAIL=votre_email@votre_domaine.com
- VIRTUAL_HOST=supervision.votre_domaine.com
- VIRTUAL_PORT=9000
hostname: supervision.votre_domaine.com
Les champs LETSENCRYPT_HOST et LETSENCRYPT_EMAIL sont obligatoires pour la génération de certificats. Les champs VIRTUAL_HOST et hostname quant à eux, sont nécessaires au bon fonctionnement de notre proxy Nginx. Enfin, le virtual port est utilisé pour rediriger le port 9000 non-standard vers les ports 443 et 80.
Pour aller plus vite, exécutez les commandes suivante pour redémarrer les machines existantes et installer (ou réinstaller) Portainer :
portainer:
image: portainer/portainer
restart: always
container_name: portainer
command: -H unix:///var/run/docker.sock
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /server/portainer/portainer_data:/data
environment:
- LETSENCRYPT_HOST=supervision.votre_domaine.com
- LETSENCRYPT_EMAIL=votre_email@votre_domaine.com
- VIRTUAL_HOST=supervision.votre_domaine.com
- VIRTUAL_PORT=9000
hostname: supervision.votre_domaine.com
Accédez ensuite à l’adresse que vous avez défini (https://supervision.votre_domaine.com) et vous allez tomber sur votre nouveau système de supervision déployé et sécurisé par un certificat SSL signé.