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

1
services:
2
  ...
3
  traefik:
4
      image: traefik:maroilles
5
      container_name: traefik
6
      networks:
7
        - application
8
      ports:
9
        - "80:80"
10
      volumes:
11
        - /var/run/docker.sock:/var/run/docker.sock
12
        - /DATA/traefik/traefik.toml:/traefik.toml
13
      restart: always
14
    ....

Ci-dessous le fichier de configuration traefik.toml

1
[docker]
2
endpoint = "unix:///var/run/docker.sock"
3
domain = "docker.localhost"
4
watch = true
5
exposedByDefault = false
6
usebindportip = true
7
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

1
...
2
services:
3
   nginx:
4
      container_name: nginx
5
      image: mon-nginx
6
      networks:
7
        - application
8
      volumes:
9
          - /DATA/mon-application/:/var/www/html/
10
      labels:
11
          - "traefik.frontend.rule=Host:mon-application.mondomaine.fr"
12
          - "traefik.port=80"
13
          - "traefik.enable=true"
14
...

Question

Utilisez Traefik en tant que reverse proxy pour votre application PHP à partir d'un fichier docker-compose

Solution

1
version: "3"
2
networks:
3
  application:
4
services:
5
  traefik:
6
      image: traefik:maroilles
7
      container_name: traefik
8
      networks:
9
        - application
10
      ports:
11
        - "80:80"
12
      volumes:
13
        - /var/run/docker.sock:/var/run/docker.sock
14
        - /DATA/traefik/traefik.toml:/traefik.toml
15
16
  postgresql:
17
      image: postgres:12
18
      container_name: postgresql
19
      networks:
20
        - application
21
      volumes:
22
          - /DATA/postgresql:/var/lib/postgresql/data
23
24
  nginx:
25
      container_name: nginx
26
      image: mon-nginx
27
      networks:
28
        - application
29
      volumes:
30
          - /DATA/mon-application/:/var/www/html/
31
      labels:
32
          - "traefik.frontend.rule=Host:mon-application.mondomaine.fr"
33
          - "traefik.port=80"
34
          - "traefik.enable=true"

Question

Ajoutez un second site web de votre choix et configurez Traefik pour permettre l'accès aux deux sites en parallèle via deux noms de domaines distincts.

Vous pouvez par exemple héberger un blog Ghost, ou encore un instance Nextcloud si vous le souhaitez