Exercice : Reverse proxy Traefik
Nous allons maintenant utiliser Traefik qui est un reverse proxy capable de se connecter à Docker pour rediriger nos clients vers notre application en se basant sur un nom de domaine.
Traefik est un reverse proxy capable de se connecter au démon Docker et de lire des informations sur les conteneurs qui sont lancés. Cela permet de générer la configuration du reverse proxy de manière automatique en se basant sur des labels ajoutés sur les conteneurs.
Pour fonctionner, Traefik nécessite un accès à la socket du démon Docker mais aussi nécessite un fichier de configuration personnalisé qui peut être monté par le biais d'un volume.
Ci-dessous un exemple de fichier docker-compose permettant de lancer Traefik
services:
...
traefik:
image: traefik:maroilles
container_name: traefik
networks:
- applicationports:
- "80:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock - /DATA/traefik/traefik.toml:/traefik.toml restart: always....
Ci-dessous le fichier de configuration traefik.toml
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "docker.localhost"
watch = true
exposedByDefault = false
usebindportip = true
network = "application"
Les conteneurs applicatifs nécessitent également l'ajout d'un label personnalisé afin de permettre à Traefik de générer sa configuration. Par exemple, pour notre conteneur Nginx PHP-FPM, on peut utiliser la configuration suivante.
Elle permet de rediriger les clients vers le conteneur Nginx lorsque ceux-ci arrivent sur le serveur web en ayant appelés mon-application.mondomaine.fr
...
services:
nginx:
container_name: nginx
image: mon-nginx
networks:
- applicationvolumes:
- /DATA/mon-application/:/var/www/html/labels:
- "traefik.frontend.rule=Host:mon-application.mondomaine.fr"
- "traefik.port=80"
- "traefik.enable=true"
...
Question
Utilisez Traefik en tant que reverse proxy pour votre application PHP à partir d'un fichier docker-compose
Solution
version: "3"networks:
application:
services:
traefik:
image: traefik:maroilles
container_name: traefik
networks:
- applicationports:
- "80:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock - /DATA/traefik/traefik.toml:/traefik.tomlpostgresql:
image: postgres:12
container_name: postgresql
networks:
- applicationvolumes:
- /DATA/postgresql:/var/lib/postgresql/datanginx:
container_name: nginx
image: mon-nginx
networks:
- applicationvolumes:
- /DATA/mon-application/:/var/www/html/labels:
- "traefik.frontend.rule=Host:mon-application.mondomaine.fr"
- "traefik.port=80"
- "traefik.enable=true"