
Traefik Manager est une interface web qui permet de créer, modifier et surveiller les routes, les middlewares et les certificats de votre reverse proxy Traefik, sans éditer manuellement de fichiers YAML. Cette solution open source facilite la configuration du reverse proxy Traefik.
Traefik s’est imposé comme l’un des reverse proxy les plus utilisés pour exposer des services conteneurisés, notamment grâce à sa découverte automatique via les labels Docker et à sa gestion des certificats TLS avec Let’s Encrypt. En contrepartie, toute la configuration repose sur des fichiers et des labels. Dans un homelab comme sur un serveur de production, on a parfois besoin d’exposer une application qui n’est pas un conteneur Docker, de suivre l’expiration de ses certificats, ou de visualiser d’un seul coup d’œil l’ensemble de ses routes : c’est précisément ce que propose Traefik Manager.
Dans ce tutoriel, nous allons installer Traefik Manager avec Docker Compose, d’abord dans une version minimale pour le découvrir, puis dans une configuration plus complète intégrant l’accès HTTPS, l’édition de la configuration statique et le redémarrage automatique de Traefik. Nous passerons aussi en revue ses principales fonctionnalités : tableau de bord, gestion des routes, suivi des certificats, cartographie des flux et sauvegardes.
Qu’est-ce que Traefik Manager ?
Traefik Manager est une application web open source qui se place à côté de votre instance Traefik existante. Elle ne remplace pas Traefik et ne s’y substitue pas : elle s’appuie sur l’API de Traefik pour lire l’état du proxy en temps réel, et elle lit et écrit directement dans vos fichiers de configuration dynamique pour gérer vos routes.
C’est ce point qui mérite d’être compris dès le départ, car il conditionne tout le reste. Traefik connaît plusieurs « providers » : le provider Docker (les routes définies par des labels sur vos conteneurs), le provider fichier (les routes écrites dans un fichier comme dynamic.yml), et quelques autres. Dans sa version actuelle, Traefik Manager gère le provider fichier.
Les routes que vous créez depuis son interface sont écrites dans votre fichier de configuration dynamique. À l’inverse, les routes déclarées par des labels Docker continuent de se gérer dans le docker-compose.yml de chaque service.
Traefik Manager prend tout son sens lorsque vous voulez exposer un service qui n’est pas un conteneur Docker (une machine virtuelle, un serveur bare-metal, un NAS, etc.), puisque les labels y sont impossibles. Pour un conteneur Docker classique, les labels restent souvent l’approche la plus directe.
Côté fonctionnalités, l’interface couvre la gestion des routes HTTP, TCP et UDP, des middlewares (avec un système de templates bien pratique), le suivi des certificats TLS générés par ACME, la liste des plugins Traefik, la lecture des journaux d’accès, une cartographie des flux (Route Map), un éditeur de la configuration statique traefik.yml, ainsi qu’un système de sauvegardes automatiques (avec une intégration à Git possible).
Prérequis
Avant de commencer, il faut disposer des éléments suivants :
Une instance Traefik déjà en place (la version 3 est utilisée dans ce tutoriel), avec son API activée. Traefik Manager interroge cette API, généralement joignable sur http://traefik:8080 lorsque les deux conteneurs partagent le même réseau Docker. Si vous débutez avec ce reverse proxy, notre guide complet pour prendre en main Traefik détaille cette mise en place.
Docker et Docker Compose installés sur l’hôte.
Un fichier de configuration dynamique pour Traefik, même vide au départ : c’est ce fichier que Traefik Manager va piloter.
Un nom de domaine et, idéalement, un resolver de certificats configuré dans Traefik (Let’s Encrypt via un challenge DNS chez OVHcloud, Cloudflare, etc.) si vous souhaitez exposer l’interface en HTTPS.
Préparez également l’arborescence de dossiers sous /opt/docker-compose/ (ou ailleurs selon vos préférences) :
mkdir -p /opt/docker-compose/traefik-manager/{backups,config}
Installer Traefik Manager avec Docker Compose (configuration minimale)
Pour découvrir l’outil sans rien casser, on commence par la configuration minimale fournie par la documentation. Elle expose Traefik Manager directement sur un port de l’hôte, en HTTP, sans passer par Traefik. C’est vraiment le strict minimum, pas adapté pour la production (regardez plutôt la seconde configuration).
Voici le contenu du fichier docker-compose.yml créé sous /opt/docker-compose/traefik-manager/ :
services:
traefik-manager:
image: ghcr.io/chr0nzz/traefik-manager:latest
container_name: traefik-manager
restart: unless-stopped
ports:
– “5000:5000”
environment:
– COOKIE_SECURE=false
volumes:
– /path/to/traefik/dynamic.yml:/app/config/dynamic.yml
– /path/to/traefik-manager/config:/app/config
– /path/to/traefik-manager/backups:/app/backups
L’occasion d’évoquer de premiers paramètres :
Le port 5000:5000 rend l’interface accessible sur http://:5000. C’est pratique pour du test en local.
COOKIE_SECURE=false indique à l’application qu’elle est servie en HTTP. Ce réglage devra passer à true dès lors que l’on placera l’interface derrière Traefik en HTTPS, sans quoi le cookie de session ne sera pas transmis.
Le premier volume monte votre fichier de configuration dynamique Traefik à l’emplacement /app/config/dynamic.yml. C’est le fichier que Traefik Manager va lire et modifier pour gérer vos routes. Comme il est monté à cet emplacement par défaut, vous n’avez pas besoin de préciser de variable supplémentaire pour le localiser.
Le deuxième volume (/app/config) stocke la configuration propre à Traefik Manager : son fichier manager.yml, le secret de session, les réglages de l’application.
Le troisième volume (/app/backups) conserve les sauvegardes générées automatiquement (pour les configs statiques et dynamiques).
Lancez l’installation via la commande habituelle :
docker compose up -d
Cette configuration suffit pour démarrer et explorer l’interface. En revanche, elle laisse de côté plusieurs fonctionnalités intéressantes : l’accès HTTPS via Traefik, l’édition de la configuration statique et le redémarrage de Traefik depuis l’interface. Nous allons donc construire une version plus aboutie.
Une configuration complète : HTTPS, configuration statique et redémarrage automatique
Voici la configuration que nous allons utiliser pour la suite. Elle place Traefik Manager derrière Traefik en HTTPS, lui donne accès à la configuration statique, et lui permet de redémarrer Traefik via un proxy de socket Docker dédié. Traefik Manager sera accessible via cette adresse : https://traefik-manager.it-connectlab.fr.
Voici le contenu du fichier docker-compose.yml créé sous /opt/docker-compose/traefik-manager/ :
services:
traefik-manager-socket-proxy:
image: ghcr.io/tecnativa/docker-socket-proxy:latest
container_name: traefik-manager-socket-proxy
restart: unless-stopped
environment:
– CONTAINERS=1
– POST=1
volumes:
– /var/run/docker.sock:/var/run/docker.sock:ro
networks:
– tm-socketproxy
traefik-manager:
image: ghcr.io/chr0nzz/traefik-manager:latest
container_name: traefik-manager
restart: unless-stopped
environment:
– COOKIE_SECURE=true
– STATIC_CONFIG_PATH=/app/traefik.yml
– RESTART_METHOD=proxy
– DOCKER_HOST=tcp://traefik-manager-socket-proxy:2375
– TRAEFIK_CONTAINER=traefik
volumes:
– /opt/docker-compose/traefik/config.yml:/app/config/dynamic.yml
– /opt/docker-compose/traefik-manager/config:/app/config
– /opt/docker-compose/traefik-manager/backups:/app/backups
– /opt/docker-compose/traefik/traefik.yml:/app/traefik.yml
– /opt/docker-compose/traefik/certs/ovh-acme.json:/app/acme.json:ro
– /opt/docker-compose/traefik/logs/traefik.log:/app/logs/access.log:ro
networks:
– frontend
– tm-socketproxy
labels:
– traefik.enable=true
– traefik.docker.network=frontend
– traefik.http.routers.traefik-manager-https.rule=Host(`traefik-manager.it-connectlab.fr`)
– traefik.http.routers.traefik-manager-https.entrypoints=websecure
– traefik.http.routers.traefik-manager-https.tls=true
– traefik.http.routers.traefik-manager-https.tls.certresolver=ovhcloud
– traefik.http.services.traefik-manager-https.loadbalancer.server.port=5000
networks:
frontend:
external: true
tm-socketproxy:
internal: true
Détaillons ce qui s’ajoute par rapport à la version minimale.
L’exposition en HTTPS via Traefik. On retire le port 5000:5000 au profit de labels Traefik. Le routeur écoute sur l’entrypoint websecure (port 443), avec un certificat délivré par le resolver ACME (ici ovhcloud, c’est-à-dire Let’s Encrypt via le challenge DNS d’OVH). Le service pointe vers le port interne 5000 du conteneur. Comme l’accès se fait désormais en HTTPS, COOKIE_SECURE passe à true.
L’accès à la configuration statique. Le volume qui monte traefik.yml dans le conteneur est accompagné de la variable STATIC_CONFIG_PATH=/app/traefik.yml. Ce point est à connaître : monter le fichier ne suffit pas. Sans cette variable, ces fonctionnalités ne seront pas accessibles sur l’interface web de Traefik. C’est elle qui indique à Traefik Manager où trouver votre configuration statique. Notez que traefik.yml est monté en lecture-écriture (pas de :ro), pour que l’on puisse éditer le fichier par la suite.
Le redémarrage de Traefik via un proxy de socket Docker. L’éditeur de configuration statique peut redémarrer Traefik après une modification, à condition de lui donner un moyen d’agir sur le conteneur. Plutôt que d’exposer le socket Docker directement à Traefik Manager, on intercale un docker-socket-proxy dédié. Ses variables CONTAINERS=1 et POST=1 n’autorisent que le strict nécessaire au niveau de l’API : lister les conteneurs et envoyer une requête de redémarrage. Il n’a accès ni aux images, ni à exec, ni aux volumes. Traefik Manager le joint via DOCKER_HOST=tcp://traefik-manager-socket-proxy:2375, et la variable RESTART_METHOD=proxy active cette méthode. Enfin, TRAEFIK_CONTAINER=traefik doit correspondre exactement au nom de votre conteneur Traefik, sinon la connexion ne sera pas bien établie entre les deux services.
Rappel important : cette approche par proxy limite l’exposition du socket Docker : même en cas de compromission de l’interface, l’attaquant ne pourrait pas prendre le contrôle complet du démon Docker. Le réseau tm-socketproxy est déclaré internal: true, ce qui le coupe d’Internet et le réserve aux échanges entre les deux conteneurs. Le principe d’un proxy de socket Docker et son intérêt pour la sécurité sont approfondis dans notre article Docker : améliorer la sécurité avec un Docker Socket Proxy.
Les volumes de supervision. Trois montages supplémentaires alimentent les onglets de monitoring : le fichier acme.json (en lecture seule) pour le suivi des certificats, et le journal d’accès (access.log) pour l’onglet Logs. Vérifiez que le fichier que vous montez en tant que access.log est bien le journal d’accès de Traefik (déclaré via accessLog: dans votre traefik.yml) et non le journal applicatif. Pour une analyse plus poussée de ces journaux d’accès, un outil open source dédié comme Traefik Log Dashboard peut compléter Traefik Manager (voir notre article Traefik Log Dashboard).
Cette architecture basée sur trois conteneurs (si on comptabilise aussi Traefik) s’articule de la façon suivante :
Enregistrez le fichier et lancez l’installation via la commande habituelle :
docker compose up -d
Connectez-vous à l’interface web de Traefik Manager (par exemple https://traefik-manager.it-connectlab.fr), vous devriez tomber là-dessus :
Premier démarrage et assistant de configuration
Une fois la stack lancée, Traefik Manager génère un mot de passe temporaire au premier démarrage. On le récupère dans les journaux du conteneur :
docker logs traefik-manager
Les journaux affichent le mot de passe temporaire à utiliser pour la première connexion. Voici un exemple :
Saisissez le mot de passe pour vous authentifier et ainsi accéder à l’assistant de mise en route.
La première étape, Connection & domains, demande les informations permettant à Traefik Manager de dialoguer avec Traefik : la liste des domaines de base (proposés ensuite dans le formulaire d’ajout de route), le ou les resolvers de certificats (ici ovhcloud), et l’URL interne de l’API Traefik (http://traefik:8080). Un bouton Test connection valide la communication et affiche la version de Traefik détectée.
La deuxième étape, Self route, est optionnelle. Elle propose de créer automatiquement une route pour exposer Traefik Manager lui-même, en renseignant le nom de domaine souhaité, l’URL interne du conteneur (http://traefik-manager:5000) et l’entrypoint à utiliser (websecure). Si vous avez déjà défini cette route via les labels Docker (comme dans notre configuration), vous pouvez sauter cette étape. Sinon, il sera déclaré aussi dans la configuration dynamique (ce n’est pas gênant en soi).
Le tableau de bord de Traefik Manager
Une fois l’assistant terminé, on arrive sur le tableau de bord. Il offre une vue synthétique de l’état du reverse proxy : quatre cartes résument la santé des routeurs HTTP, des routeurs TCP/UDP, des services et des middlewares, avec un pourcentage de succès, d’avertissements et d’erreurs. C’est similaire à ce que l’on peut retrouver sur le tableau de bord natif de Traefik.
Juste en dessous, une section liste les entrypoints détectés (par exemple traefik sur le port 8080, web sur le port 80 et websecure sur le port 443), tels que Traefik les expose. Plus bas, les routes sont présentées sous forme de cartes, regroupées par catégories, avec leur cible et leurs éventuels middlewares.
C’est aussi à cet endroit que l’on retrouve la distinction entre providers évoquée plus haut. Un filtre permet d’afficher toutes les routes, ou uniquement celles issues du provider docker, du provider file ou des routeurs internal. À partir des paramètres, vous pouvez activer la surveillance d’autres providers, dont Docker, afin que les routes déclarées via des labels Docker soient visibles dans Traefik Manager (pas possible de les éditer).
Créer et gérer des routes
L’ajout d’une route se fait via le bouton Add Route, qui ouvre un formulaire complet. C’est sans doute la fonctionnalité la plus utile au quotidien, en particulier pour exposer un service qui n’est pas un conteneur Docker.
Prenons un exemple concret : exposer une instance GLPI hébergée sur un serveur web séparé. On choisit le protocole HTTP, on nomme la route, puis on construit la règle avec le formulaire : un sous-domaine (support) associé à un domaine (it-connectlab.fr), ce qui génère automatiquement la règle Host() correspondante. D’ailleurs, via les options avancées, vous pouvez préciser des chemins spécifiques si besoin (requêtes à destination d’un endpoint spécifique, comme /api).
On renseigne ensuite l’adresse et le port du backend, l’entrypoint (websecure), et l’on peut attacher des middlewares : ici un middleware CrowdSec et une authentification Basic-Auth, par exemple pour protéger l’accès à l’application. Pour une authentification centralisée, plus complète qu’un simple Basic-Auth, on peut aussi s’appuyer sur une solution comme Tinyauth (voir notre tutoriel Traefik + Tinyauth).
Le formulaire propose également plusieurs options qui évitent d’écrire du YAML à la main :
Backend Scheme : indique si Traefik doit joindre le backend en HTTP ou en HTTPS (ici le serveur GLPI). À ajuster selon ce que sert réellement le serveur cible.
Pass Host Header : transmet ou non l’en-tête Host d’origine au backend.
Skip TLS Verification : à cocher lorsque le backend présente un certificat auto-signé (cas fréquent avec des interfaces d’administration internes). Cela ajoute un serversTransport avec insecureSkipVerify.
Cert Resolver : permet de demander un certificat ACME (ici ovhcloud), avec une option pour réclamer un certificat wildcard via un challenge DNS.
Ce qui donne :
Suite à la validation, la route est écrite dans votre fichier de configuration dynamique. Les routes définies par labels Docker, elles, ne sont pas modifiables ici : elles restent gérées dans le docker-compose.yml de chaque service.
Surveiller les certificats TLS
L’onglet Certs consulte Traefik et lit le fichier acme.json de Traefik afin de présenter, sous forme de cartes, l’ensemble des certificats gérés automatiquement par le resolver ACME. Pour chaque domaine, on retrouve le resolver utilisé, la date d’expiration et le nombre de jours restants avant renouvellement.
Cette vue est en lecture seule : les certificats restent gérés par le mécanisme ACME de Traefik, qui se charge du renouvellement.
Visualiser l’infrastructure avec la Route Map
L’onglet Route Map est vraiment très intéressant puisqu’il propose une cartographie des flux, sous forme de graphe : à gauche les entrypoints (web, traefik, websecure), au centre les routeurs et les middlewares traversés, à droite les services de destination. Des filtres permettent de se limiter à un protocole, un provider ou un entrypoint.
Cette représentation aide à comprendre comment une requête chemine de l’entrypoint jusqu’au backend, et à vérifier qu’un middleware est bien appliqué là où on l’attend. On voit par exemple immédiatement qu’un middleware CrowdSec est partagé par plusieurs routeurs, ou qu’une redirection HTTP vers HTTPS est en place. Sur une infrastructure qui compte de nombreux services, c’est un moyen rapide de repérer une route mal raccordée.
Éditer la configuration statique de Traefik
L’éditeur de configuration statique permet de modifier traefik.yml directement depuis l’interface web. Les réglages sont organisés en onglets, ce qui évite de manipuler le fichier brut, même si un bouton Raw YAML reste disponible pour les utilisateurs avancés.
Attention tout de même avec la modification de la configuration statique. D’une part, l’interface affiche un avertissement clair : une configuration statique mal formée peut empêcher Traefik de démarrer, il convient donc de ne modifier que ce que l’on maîtrise. D’autre part, une sauvegarde est créée automatiquement avant chaque enregistrement, ce qui offre un filet de sécurité.
Après une modification, un bandeau apparaît avec un bouton Restart Traefik. C’est ici que la configuration vue précédemment entre en jeu : grâce à RESTART_METHOD=proxy et au proxy de socket Docker, Traefik Manager peut redémarrer le conteneur Traefik pour appliquer les changements, sans intervention en ligne de commande. Rappelons que cette fonctionnalité n’est disponible que si la variable STATIC_CONFIG_PATH est définie et que traefik.yml est monté en lecture-écriture. À l’inverse, la configuration dynamique est prise en charge sans redémarrage du service.
Sauvegardes automatiques et restauration
Traefik Manager génère une sauvegarde de la configuration dynamique avant chaque opération de création, modification, suppression ou activation/désactivation de route. Ces sauvegardes, horodatées, sont accessibles depuis Settings > Backups et peuvent être restaurées en un clic.
En pratique, une restauration écrasera la configuration en cours, mais une sauvegarde est également créée juste avant l’opération de restauration. On peut donc revenir en arrière même après s’être trompé de point de restauration. Pour une infrastructure en production, cette gestion des versions de la configuration apporte un confort réel lorsqu’on teste des modifications. Pour aller plus loin, une intégration avec Git est aussi envisageable !
D’autres fonctionnalités à connaître
Ce tutoriel se concentre sur l’installation et l’usage courant de Traefik Manager, mais l’outil embarque d’autres fonctionnalités qui peuvent compléter votre déploiement :
Double authentification (MFA) : l’accès à l’interface peut être protégé par un second facteur basé sur TOTP, en plus du mot de passe.
Connexion OIDC / SSO : Traefik Manager s’intègre à un fournisseur d’identité compatible OpenID Connect, ce qui permet de centraliser l’authentification et de réutiliser un SSO existant plutôt qu’un mot de passe local. Cela peut être utile avec une solution IAM comme Keycloack.
Notifications : l’outil peut envoyer des alertes sur différents canaux (Discord, Ntfy, webhooks…), par exemple pour être prévenu lors d’un changement de configuration ou d’un autre événement.
Gestion multi-serveurs via des agents : un agent léger installé à côté d’une instance Traefik distante permet de la piloter depuis une seule interface Traefik Manager, et donc d’administrer plusieurs serveurs Traefik au même endroit.
Sauvegarde Git de la configuration : en complément des sauvegardes locales, la configuration peut être versionnée et poussée automatiquement vers un dépôt Git, avec un historique des commits.
Application mobile : une application Android compagnon permet de consulter et de gérer ses routes et ses middlewares depuis un smartphone.
Conclusion
Traefik Manager apporte une couche d’administration web par-dessus Traefik, sans remettre en cause son fonctionnement. Il s’adresse autant à celles et ceux qui débutent avec Traefik et préfèrent un formulaire à l’édition de YAML, qu’aux administrateurs qui souhaitent centraliser la gestion de leurs routes fichier, suivre leurs certificats ou visualiser leurs flux.
L’outil montre surtout son intérêt dès lors que l’on sort du cadre des seuls conteneurs Docker : exposer un service bare-metal, une machine virtuelle ou une interface d’administration interne se fait alors en quelques clics, là où les labels ne sont d’aucune aide.
FAQ
Traefik Manager remplace-t-il le tableau de bord natif de Traefik ?
Non. Le tableau de bord natif de Traefik reste en lecture seule et sert à observer l’état du proxy. Traefik Manager s’appuie sur la même API pour les informations en temps réel, mais y ajoute la création et la modification des routes du provider fichier, l’édition de la configuration statique et plusieurs vues de supervision. Les deux peuvent cohabiter.
Faut-il exposer le socket Docker à Traefik Manager ?
Pas directement. Le socket Docker n’est nécessaire que pour redémarrer Traefik après une modification de la configuration statique. La méthode recommandée consiste à passer par un proxy de socket Docker dédié, configuré avec le minimum de permissions (CONTAINERS=1 et POST=1), plutôt que de monter /var/run/docker.sock directement dans le conteneur. L’utilisation directe du socket Docker est possible, mais déconseillée.
Traefik Manager est-il compatible avec CrowdSec ?
Oui. Les middlewares CrowdSec (via le bouncer plugin de Traefik) apparaissent dans la liste des middlewares et peuvent être attachés aux routes que vous créez. L’onglet Plugins liste par ailleurs les plugins déclarés dans votre configuration statique, à condition que STATIC_CONFIG_PATH soit défini. La mise en place du bouncer CrowdSec côté Traefik est détaillée dans notre tutoriel Traefik + CrowdSec. Une intégration directe entre Traefik Manager et CrowdSec est aussi possible.
L’onglet Plugins reste vide, pourquoi ?
C’est le symptôme le plus courant d’une variable STATIC_CONFIG_PATH non définie. Monter traefik.yml dans le conteneur ne suffit pas : il faut indiquer son chemin via cette variable pour que les onglets Plugins et Static Config lisent la configuration statique.
Cofondateur d’IT-Connect et Microsoft MVP “Cloud and Datacenter Management”. Mon obsession depuis près de 15 ans ? Rendre l’administration système et la cybersécurité accessibles, que vous soyez junior ou confirmé. Plus qu’un métier, l’IT est pour moi une véritable passion. J’accompagne au quotidien les sysadmins et les professionnels de l’IT dans leur montée en compétences et leur veille technique.
