Mise en place d'un serveur Traefik (Reverse Proxy)
Prérequits :
Premièrement, à des fins de tests, nous allons générer l'image docker suivante :
Dockefile:
# Docker Who display him name
#
# Created by : Néhémie Barkia
# Last Update : 26/12/2023
#
# PRÉREQUITS
FROM debian:latest
RUN apt-get update -y
RUN apt-get install apache2 php php-pdo php-mbstring php-mysql php-json php-common git -y
RUN apt-get clean
# INSTALLATION WEB
RUN rm /var/www/html/* -r
# Insertion des informations de connexion dans les fichiers de Fix
RUN echo "<?php" >> /var/www/html/index.php
RUN echo "\$h = getenv('HOSTNAME');" >> /var/www/html/index.php
RUN echo "echo \$h" >> /var/www/html/index.php
RUN echo "?>" >> /var/www/html/index.php
#
WORKDIR /app
VOLUME /app/logs
EXPOSE 80
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
Création de l'image :
docker build -t web_name .
Nous venons de créer une image nommée web_name. C'est un serveur web qui renvoie simplement le nom du conteneur qui l'execute.
Modification du fichier HOSTS de linux :
127.0.1.1 traefik.localhost web.traefik.localhost
Installation et configuration de traefik :
/srv/traefik.toml :
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.https]
address = ":443"
[api]
[providers.docker]
endpoint = "unix:///var/run/docker.sock"
docker-compose.yml :
version: '3'
services:
reverse-proxy:
image: traefik:v2.9
command: --api.insecure=true --providers.docker
ports:
- "80:80"
- "8080:8080"
volumes:
- /srv/traefik.toml:/etc/traefik/traefik.toml
- /var/run/docker.sock:/var/run/docker.sock
labels:
- "traefik.http.routers.api.rule=Host(`traefik.localhost`)"
- "traefik.http.routers.api.service=api@internal"
- "traefik.http.routers.api.entrypoints=http"
web:
image: web_name
ports:
- "8081-8181:80"
labels:
- "traefik.enable=true"
- "traefik.http.routers.web.rule=Host(`web.traefik.localhost`)"
- "traefik.http.routers.web.entrypoints=http"
Création de l'infrastructure :
docker-compose up
Augmentation du nombre de serveurs :
docker-compose scale web=10
Ici nous dupliquon neuf fois le serveur web. Vu que leurs ports sont compris dans le fichier de config du service. Ceux-ci vont être intégré dans le cluster et ainsi répondre aux requêttes envoyées à web.traefik.localhost (au travers du proxy traefik evidement).
Résultat coté utilisateur :
Dans l'interface d'administration :
On peut afficher la liste des serveurs ratachés à un service :
On constate qu'il y a cent serveur rataché à mon cluster (si vous voulez scaler + de cent serveurs, modifier la pool de port dans le docker-compose).