Background image: Matthieu's World Background image: Matthieu's World
Social Icons

Protéger ses apps auto-hébergées dans coolify avec un portail simple

2 min de lecture
Par Matthieu Cousin

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 ✌️