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:
- application
ports:
- "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:
- application
volumes:
- /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:
- application
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /DATA/traefik/traefik.toml:/traefik.toml
postgresql:
image: postgres:12
container_name: postgresql
networks:
- application
volumes:
- /DATA/postgresql:/var/lib/postgresql/data
nginx:
container_name: nginx
image: mon-nginx
networks:
- application
volumes:
- /DATA/mon-application/:/var/www/html/
labels:
- "traefik.frontend.rule=Host:mon-application.mondomaine.fr"
- "traefik.port=80"
- "traefik.enable=true"