Table des matières
J’ai galéré à trouver une solution simple pour protéger mes services auto-hébergés sans changer mes DNS, sans bouffer toute ma RAM et sans installer une usine à gaz. Je voulais donc partager avec toi ma trouvaille pour que tu perdes moins de temps que moi.
🎯 Mes besoins
- Ne pas changer mes DNS (je gère tout sur O2switch)
- Une solution légère pour mes petits VPS
- Rapide à déployer sur plusieurs apps
- Intégrée dans Coolify si possible
👉 Ma solution finale : Traefik + Basic Auth
Un middleware (c’est un petit portail intermédiaire que Traefik applique avant d’atteindre ton app) vérifie ton login. Si tu es validé, tu passes. Sinon, tu es bloqué.
✅ Pourquoi Basic Auth ?
- Zéro conteneur en plus
- Réutilisable partout
- 1 seul hash (mot de passe crypté) pour tout
- Compatible avec Coolify
⚙️ Mise en place
1️⃣ Générer le hash (c’est quoi ?)
Un hash, c’est un mot de passe transformé en formule illisible. On stocke le hash pour éviter d’exposer le vrai mot de passe.
Dans ton terminal, tape ceci en remplaçant mon "monuser" par un nom qui te correspond mieux et ton propre mot de passe. Stocker ces informations dans ton gestionnaire de mot de passe.
htpasswd -nb MONUSER MONMOTDEPASSE
Tu obtiens un hash : MONUSER:$apr1$...
que tu vas réutiliser après.
2️⃣ Ajouter dans ton docker-compose.yml
Dans coolify, dans le Docker compose, rajoute ceci à la fin :
services:
monapp:
image: ...
labels:
- "traefik.enable=true"
- "traefik.http.routers.auth-global.rule=Host(`sousdomaine.mondomaine.com`)"
- "traefik.http.routers.auth-global.entrypoints=websecure"
- "traefik.http.routers.auth-global.tls.certresolver=letsencrypt"
- "traefik.http.middlewares.auth-global.basicauth.users=MONUSER:$apr1$..."
- "traefik.http.routers.auth-global.middlewares=auth-global@docker"
👉 Pro tip :
- Donne un nom clair au middleware (
auth-global
par ex ici). - Réutilise-le sur toutes tes apps pour un seul login.
3️⃣ Redéployer
Déploie via Coolify → ton app est désormais protégée par un login popup.
👉 Teste ton sous-domaine → un joli popup “Login” apparaît.
Et pour les autres apps ?
Tu n'auras par la suite qu'à copier-coller tout ce qui vient après label dans le docker-compose de toute app que tu veux protéger. La seule chose à changer, c'est le nom de domaine (ici monapp.mondomaine.com) que tu dois adapter à chaque fois.
✅ Bonnes pratiques
- Un seul hash pour toutes tes apps ? Facile à gérer.
- Changer de mot de passe ? Recrée le hash, mets à jour et redeploie.
- Un mot de passe par app ? Crée un
middleware
par app. C'est à dire que tu créer un nouveau middleware en utilisant un nom différent (pas auth-global mais auth-global2 par exemple) ce qui créera un portail différent avec son propre user et mot de passe.
❌ Ce que j’ai testé et rejeté
- Authentik : trop lourd et bugué.
- Authelia : surdimensionné.
- OAuth2-Proxy : Difficile a installé avec coolify
- Cloudflare Access : oblige à migrer mes DNS.
✅ Résumé
Simple, efficace, auto-hébergé, pas de conteneur supplémentaire.
🗂️ Checklist
- [✔] Générer le hash
- [✔] Ajouter le middleware dans les labels
- [✔] Changer le nom de domaine
- [✔] Redéployer
Besoin d’un coup de main pour cette partie technique ?
Je sais que parfois, même bien expliqué, un workflow reste intimidant.
Si tu préfères qu’on le mette en place ensemble, contacte-moi : je suis freelance en automatisation, et je peux t’aider à passer de “je devrais le faire” à “c’est déjà en place”.
Sinon, continue de piocher dans les ressources du site, elles sont faites pour ça ✌️