Contenu

Utilisation d'un conteneur Nginx avec Traefik

Pré-requis

Avant de continuer, assurez-vous d’avoir installé Docker et Docker-compose et d’avoir configuré votre conteneur Traefik. Pour cela vous pouvez suivre les docs suivantes :

Création du Docker-compose pour Nginx

Nous allons créer les répertoires nécessaires au conteneur Nginx et le fichier docker-compose.yml via les commandes suivantes :

1
2
# mkdir -p /srv/docker/nginx/conf/
# vi /srv/docker/nginx/docker-compose.yml

On y copie le contenu suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
---
# Version du format du fichier docker-compose.yml
version: '3.7'
services:
  # On défini le nom du service
  Nginx:
    # On défini le nom du conteneur
    container_name: nginx
    # On défini l'image à utiliser
    image: nginx:latest
    # On défini la politique de redémarrage du conteneur
    restart: unless-stopped
    # On désactive l'entrypoint défini dans l'image, afin de pouvoir définir notre propre configuration
    entrypoint: ''
    # On défini les dossiers et fichiers qui seront accessibles depuis le conteneur
    volumes:
      # On défini que le fichier de configuration du vhost "www.mon-domaine.fr.conf" à utiliser dans le container correspondant au fichier /srv/docker/nginx/conf.d/www.mon-domaine.fr.conf de notre hôte. Il sera accessible en lecture seule
      - ./conf/www.mon-domaine.fr.conf:/etc/nginx/conf.d/www.mon-domaine.fr:ro
    # On défini les réseaux. J'en ai volontairement créé deux. Afin de pouvoir isoler les futurs conteneurs dans un réseau à part
    networks:
      nginx_lan:
      traefik_lan:
    # On défini les paramètres spécifiques à Traefik
    labels:
      # On active Traefik pour ce conteneur
      traefik.enable: True
      # On indique à Traefik que les ports accessibles depuis l'hôte, le seront sur le réseau "wan"
      traefik.docker.network: traefik_lan
      # On indique le nom de l'entrypoints à utiliser. On l'a configuré dans le fochier /srv/docker/traefik/conf/traefik.yml
      traefik.http.routers.nginx.entrypoints: web
      # On indique l'URL à partir de laquelle l'interface web de Nginx sera accessible
      traefik.http.routers.nginx.rule: Host(`www.mon-domaine.fr`)
      # On indique à Traefik le port d'écoute du conteneur Nginx
      traefik.http.services.nginx.loadbalancer.server.port: 80

# On défini les réseaux liés au conteneur
networks:
  nginx_lan:
    # On indique que le réseau sera externe. C'est à dire qu'il ne sera pas supprimé lors de la suppression du conteneur
    external: True
  traefik_lan:
    # On indique que le réseau sera externe. C'est à dire qu'il ne sera pas supprimé lors de la suppression du conteneur
    external: True

Il nous reste une dernière chose à faire, créer les réseaux qui seront utilisés par notre conteneur (nginx_lan). Pour cela, on tape la commande suivante :

1
# docker network create nginx_lan

Nous devons créer le fichier de configuration du vhost de Nginx. Pour cela, on tape la commande suivante :

1
# vi /srv/docker/nginx/conf/www.mon-domaine.fr.conf

On y copie le contenu suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
server {
    # On defini le port d'écoute de Nginx dans le conteneur
    listen 80;
    # On défini l'URL à laquelle Nginx devra répondre
    server_name www.mon-domaine.fr;

    location / {
        # On indique le répertoire contenant les fichiers à afficher
        root /usr/share/nginx/html/;
        index index.html index.htm;
    }
}

Maintenant que l’ensemble des fichiers sont créés, nous pouvons lancer notre conteneur. Pour cela, on tape la commande suivante :

1
# docker-compose -f /srv/docker/nginx/docker-compose.yml up -d

Via l’option “-d” on indique à docker de lancer le conteneur en mode daemon.
Vous pouvez vérifier le bon fonctionnement de votre conteneur en vous connectant sur l’interface web :
https://www.mon-domaine.fr/

https://www.lecoindesdocs.fr/images/2022/01/22/Nginx-work-page.png