[Partie 1] Mettre en place Traefik v2
Dans ce premier article d'une longue série dédié à la mise en place d'un serveur "AtouFair" (Traefik, VPN, Seedbox, git, webserver ...), je vais commencer par mettre en place ce que je vais appeler la colonne vertébrale de mon serveur.
Le contexte
Je loue un serveur Kimsufi : 4 To de disque SATA, 32 Go de RAM, et 8 CPU (#/proc/cpuinfo : CPU E5-1620 v2 @ 3.70GHz). Belle machine pour s'amuser.
Je n'ai pas envie d'héberger mon serveur chez moi. Pourquoi ? plusieurs raison. En fait j'ai la fibre depuis peu, et surtout j'ai l'avantage d'avoir un serveur dédié que je paye ~15€ / mois, qui est hébergé ailleurs, avec une autre IP, et du coup je n'expose pas mon propre réseau (alors oui tu vas me dire DMZ, firewall ... etc etc) et tu n'as pas tord public, mais ce n'est pas le sujet 😁
J'héberge sur ce serveur plusieurs applications (ce site web, différents outils de type prometheus, grafana, git, des apps seedbox, etc ...). Tous ces services sont en réalité des conteneur Docker. Comment afficher tous ces sites avec une seule IP publique ? Et facilement avec mon installation Docker ? Et le HTTPS avec tout ça ?
Je vais avoir besoin pour cela de ce qu'on appelle un "reverse-proxy". Il existe de multiples solutions, Nginx ou Apache en mode proxy par exemple. Mais j'utilise depuis maintenant plusieurs années Traefik.
Les services sont divisés entre la prod et le dev, et j'utilise pour mes services web dont j'ai besoin d'accéder depuis l'extérieur une url. J'ai fait le choix d'utiliser des sous nom de domaine pour pleins de services (et parfois j'utilise aussi des PathPrefix pour simplifier le management).
Par exemple :
- my-app.domain.com
- service.domain.com
- dev.domain.com/app1
- dev.domain.com/app2
Qu'est ce qu'un reverse-proxy ?
Un reverse proxy est un service, placé à l'entrée du serveur, qui va rediriger le trafic en fonction de règle établie.

Comme le montre l'image ci-dessus, depuis internet, on tape des URL dans le navigateur, elle sont envoyée vers ton adresse IP, de là un reverse-proxy (traefik dans notre cas) intercepte les connexions, et il le reroute vers les différents containers qui tournent sur ton site web. So easy :)
Pour imager, il faut voir tout ça comme un gros carrefour routier. Si vous ne mettez pas un policier au centre ou des feux tricolores ou un rond point ... Les voitures se rentrent les unes dans les autres, et c'est la catastrophe !

Et Traefik dans cette histoire ?
Traefi est un outil écrit en Golang par Emile Vauge et c’est français cocorico 🐓. C'est est un “modern reverse proxy”, un reverse proxy designé pour répondre aux besoins du cloud.
Traefik permet de faire de la "configuration discovery" via plusieurs fournisseurs de services et load balancer pour HTTP et TCP. Il offre également d’autres fonctionnalités comme le support de Let’s Encrypt, des middlewares et la possibilité de monitorer facilement des services.
Pourquoi utiliser Traefik ?
Depuis plusieurs années, les architectures en microservices se sont démocratisées tout comme les outils d’orchestration comme kubernetes. Dans ce type d’organisation, des services sont lancés et stoppés à la volée.
Il devient donc difficile de mettre à jour manuellement la configuration du reverse-proxy pour changer les routes et transférer correctement les requêtes reçues.
C’est dans ce cas de figure que Traefik démontre son savoir-faire, même s’il est possible de l’utiliser dans des cas plus traditionnels (c'est ce que nous allons d'ailleurs utiliser pour nos besoin).
Grâce au “service discovery”, Traefik détecte automatiquement un nouveau service ainsi que sa configuration associée (nom de domaine, path d’url, gestion du SSL etc). Il est donc plus facile pour chaque application d’ajuster sa façon d’être accessible via le reverse-proxy.
Il est vrai que Nginx et d’autres outils proposent des fonctionnalités similaires en ajoutant une surcouche à l’existant mais ils n’ont pas été conçu pour faire du rechargement dynamique de leurs configurations.
La suite de l'article dans la partie 2