Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
technique:tech_team:traefik_usage [2021/11/16 01:02] – qduchemi | technique:tech_team:traefik_usage [2023/11/24 23:52] (Version actuelle) – qduchemi | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{indexmenu_n> | ||
+ | ## Comment on utilise Traefik ? | ||
+ | On va reprendre là où on en était resté avec notre [[technique: | ||
+ | |||
+ | - Une URL qui claque un peu plus, genre `quentin.test.picasoft.net` | ||
+ | - Une sécurisation via HTTPS | ||
+ | |||
+ | On a vu dans la [[technique: | ||
+ | |||
+ | ### Labels Docker | ||
+ | |||
+ | Les labels sont des simples éléments clé-valeur attaché à un conteneur. Il en existe pas mal de base, même sans avoir à en rajouter. La commande `docker inspect` me permet de les voir : | ||
+ | |||
+ | ``` | ||
+ | docker inspect quentin | ||
+ | [...] | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | [...] | ||
+ | ``` | ||
+ | |||
+ | On voit que Compose a déjà ajouté plein de labels sans qu'on ne s'en rende compte. | ||
+ | |||
+ | Traefik surveille en permanence les nouveaux conteneurs et se sert de leurs labels pour savoir s'il doit les prendre en compte, et que faire d'eux. En particulier, | ||
+ | |||
+ | - À quelle URL répond le conteneur ? | ||
+ | - Quel est le port du conteneur sur lequel envoyer les requêtes qui lui sont destinées ? | ||
+ | - Faut-il activer le HTTPS sur le conteneur (_i.e._ déclencher automatiquement la procédure de certification...) ? | ||
+ | |||
+ | On voit ça juste après. | ||
+ | |||
+ | ### Réseaux Docker | ||
+ | |||
+ | Les réseaux Docker ne sont pas très différents des réseaux classiques : ils permettent à des conteneurs de communiquer entre eux (ou au contraire, d' | ||
+ | |||
+ | Prenons cet exemple : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Mattermost et sa base de données sont isolés au sein d'un même réseau, comme Etherpad et sa base de données. Chaque application peut communiquer avec sa base de données, mais il est impossible de communiquer entre la base de données de Mattermost et celle d' | ||
+ | |||
+ | < | ||
+ | |||
+ | Traefik agit comme un reverse proxy pour les services web ; il a donc besoin d' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Or par défaut, tous les conteneurs d'un fichier Compose sont dans leur propre réseau. Il faut donc les rajouter au réseau de Traefik. | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | S' | ||
+ | |||
+ | ``` | ||
+ | cd / | ||
+ | docker-compose up -d | ||
+ | ``` | ||
+ | |||
+ | Ici, on commence à toucher à la manière dont Picasoft gère ses services, on ne rentre pas dans les détails, il y a une [[technique: | ||
+ | |||
+ | Au niveau de notre dernier fichier Compose, ça se traduit par ceci : | ||
+ | |||
+ | ```yaml | ||
+ | networks: | ||
+ | proxy: | ||
+ | external: true | ||
+ | |||
+ | services: | ||
+ | quentin: | ||
+ | [...] | ||
+ | networks: | ||
+ | - proxy | ||
+ | ``` | ||
+ | |||
+ | On indique qu'on veut utiliser un réseau Docker qui existe par ailleurs (d'où le `external: true`), et on indique que notre service participe à ce réseau. | ||
+ | |||
+ | ### Alors, comment on fait ? | ||
+ | |||
+ | < | ||
+ | |||
+ | Le point noir, c'est que les labels sont compliqués à comprendre, et qu'on ne peut pas les expliquer sans rentrer profondément dans les [détails de Traefik](https:// | ||
+ | |||
+ | Et on reprend notre exemple. Pour rappel, on avait un serveur web qui tournait sur `pica01-test.picasoft.net: | ||
+ | |||
+ | ```yaml | ||
+ | version: " | ||
+ | |||
+ | services: | ||
+ | quentin: | ||
+ | image: nginx: | ||
+ | container_name: | ||
+ | ports: | ||
+ | - 8081:80 | ||
+ | volumes: | ||
+ | - ./ | ||
+ | ``` | ||
+ | |||
+ | On va donc ajouter `quentin` dans le réseau `proxy`, lui indiquer qu'on veut répondre à l' | ||
+ | |||
+ | ```yaml | ||
+ | version: " | ||
+ | |||
+ | networks: | ||
+ | proxy: | ||
+ | external: true | ||
+ | | ||
+ | services: | ||
+ | quentin: | ||
+ | image: nginx: | ||
+ | container_name: | ||
+ | networks: | ||
+ | - proxy | ||
+ | labels: | ||
+ | traefik.enable: | ||
+ | traefik.http.routers.quentin.entrypoints: | ||
+ | traefik.http.routers.quentin.rule: | ||
+ | traefik.http.services.quentin.loadbalancer.server.port: | ||
+ | volumes: | ||
+ | - ./ | ||
+ | ``` | ||
+ | |||
+ | < | ||
+ | |||
+ | ### Let's go ! | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | On constate deux choses : | ||
+ | |||
+ | - Le conteneur est accessible via sa propre URL, qui donne beaucoup plus envie que celle composée du nom de la machine et du port. | ||
+ | - Cette fois ci, un `curl` simple renvoie un code HTTP 302 (`Moved Permanently`). Si on demande à `curl` de suivre les redirections (`-L`), on arrive à la bonne page. | ||
+ | |||
+ | < | ||
+ | |||
+ | C'est lié à la ligne : | ||
+ | |||
+ | ``` | ||
+ | traefik.http.routers.quentin.entrypoints: | ||
+ | ``` | ||
+ | |||
+ | Qui indique à Traefik que tout ce qui arrive à destination de ce conteneur doit passer par le point d' | ||
+ | Or quand on fait un `curl quentin.test.picasoft.net`, | ||
+ | |||
+ | < | ||
+ | |||
+ | ### Pour la curiosité... | ||
+ | |||
+ | < | ||
+ | |||
+ | ### Et maintenant ? | ||
+ | |||
+ | Bon, et bien à ce stade, tu as absolument toutes les bases pour lancer un service Picasoft ! Construire une image Docker, comprendre les réseaux, les ports et les volumes, utiliser Compose et enfin mettre le service sur internet grâce à Traefik. ^_^ | ||
+ | |||
+ | Alors peut-être qu'on peut rentrer dans le bain en [[technique: |