Docker Compose & Traefik, répondre sur une URL et ses sous-domaines

Posté le Mercredi 13 novembre 2019 - 09:19

J'utilise maintenant docker-compose pour l'ensemble de mes projets, principalement avec la formidable pile « docker4drupal ».

Cette pile utilise Traefik pour comme router, qui n'écoute par défaut que sur une URL.

Dans un contexte d'usine à site ou de multi-sites, on a parfois besoin d'écouter sur une URL ainsi que ses sous-domaines. Par exemple :

  • monsite.test
  • fr.monsite.test
  • ...

Attention la syntaxe est différente entre la version 1 et la version 2 de traefik.

Dans mon cas, je définis la variable PROJECT_BASE_URL dans mon fichier .env, mais vous pouvez la substituer avec le nom de domaine en direct.

Traefik 1.*, dans la section labels de votre service « web » (nginx, apache...) :

  1. labels:
  2. - 'traefik.frontend.rule=HostRegexp:{subdomain:[a-z-]+}.${PROJECT_BASE_URL}'

Traefik 2.*, dans la section labels de votre service « web » (nginx, apache...) :

  1. labels:
  2. - "traefik.http.routers.${PROJECT_NAME}_nginx.rule=HostRegexp(`${PROJECT_BASE_URL}`, `{subdomain:[a-z]+}.${PROJECT_BASE_URL}`)"
 

Commentaires

Posté le Mercredi 13 novembre 2019 - 09:50

J'ajouterais qu'il est oportun d'utiliser les priorités au risque que ton container nginx prenne la main même sur les autres sous-domaines (genre adminer ou portainer)

- "traefik.http.routers.${PROJECT_NAME}_nginx.priority=1"

Et en plus tu peux utiliser mon super hosts updater qui met à jour ton fichier hosts quand tu fais un make up ;)
https://hub.docker.com/r/dankastudio/docker-hosts-updater

Posté le Mercredi 13 novembre 2019 - 09:51

La suite pour adminer par exemple...

labels:
- "traefik.http.routers.${PROJECT_NAME}_adminer.rule=Host(`adminer.${PROJECT_BASE_URL}`)"
- "traefik.http.routers.${PROJECT_NAME}_adminer.priority=2"

Posté le Mercredi 13 novembre 2019 - 10:26

pas mal, mais perso, je mets tous les autres services transverses (adminer, mailhog, portainer...) sur le même sous-domaine pour tous mes projets (ex : mailhog.localhost) comme ça j'ai des marques-pages qui fonctionnent pour tous mes sites. Dans la théorie ça m’empêche de lancer deux projets en simultané mais ça ne m'a jamais gêné. Et on est de toute façon bloqué par le port écouté par traefik (8000 pour moi).

Pour ce qui est des hosts, j'utilise dnsmasq pour rediriger tous les *.test et *.localhost sur ma machine locale, donc pas besoin d'un fichier hosts de 4km de long ! cf : https://kgaut.net/blog/2013/rediriger-automatiquement-un-tld-sur-sa-mac…

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...