Blame
|
1 | # Traefik |
||||||
| 2 | ||||||||
| 3 | **traefik** est notre reverse-proxy et émetteur de certificats Let's Encrypt. |
|||||||
| 4 | ||||||||
| 5 | ## Etiquettes (`labels`) |
|||||||
| 6 | ||||||||
| 7 | Pour ajouter la gestion traefik à un container, il nous faut: |
|||||||
| 8 | ||||||||
| 9 | - créer un réseau pour le service |
|||||||
| 10 | - utiliser `expose` à la place de `ports` pour les ports ouverts du container. |
|||||||
| 11 | - on ajouter `labels` qui lie le réseau docker, |
|||||||
| 12 | ||||||||
| 13 | ```yaml |
|||||||
| 14 | networks: |
|||||||
| 15 | - service |
|||||||
| 16 | expose: |
|||||||
| 17 | - 3001 |
|||||||
| 18 | labels: |
|||||||
| 19 | - "traefik.enable=true" # Enable reverse-proxy for this service |
|||||||
| 20 | - "traefik.docker.network=service" # The external docker network |
|||||||
| 21 | - "traefik.http.routers.service.rule=Host(`service.happyngreen.fr`)" # The domain name. |
|||||||
| 22 | - "traefik.http.routers.service.entrypoints=web" |
|||||||
| 23 | - "traefik.http.routers.service.middlewares=redirect-to-https@docker" |
|||||||
| 24 | - "traefik.http.routers.service-secure.rule=Host(`service.happyngreen.fr`)" |
|||||||
| 25 | - "traefik.http.routers.service-secure.entrypoints=web-secure" |
|||||||
| 26 | - "traefik.http.routers.service-secure.tls=true" |
|||||||
| 27 | - "traefik.http.routers.service-secure.tls.certresolver=le" # The Let's Encrypt certificat type |
|||||||
| 28 | - "traefik.http.routers.service-secure.service=service_name-secure" |
|||||||
| 29 | - "traefik.http.services.service-secure.loadbalancer.server.port=3001" # The exposed port. |
|||||||
| 30 | ||||||||
| 31 | ``` |
|||||||
| 32 | ||||||||
| 33 | > [!IMPORTANT] |
|||||||
| 34 | > un router **traefik** peut avoir n'importe quel nom, y compris celui de service ou du réseau. `uptime-kuma`, `docker-uptime-kuma`, etc. |
|||||||
| 35 | ||||||||
| 36 | Une fois que votre `docker-compose.yml` est bon (volumes, port, network, container_name, etc), lancer le pour créer le network. |
|||||||
| 37 | Alternativement, vous pouvez utiliser: |
|||||||
| 38 | ||||||||
| 39 | ```bash |
|||||||
| 40 | docker network create service_name |
|||||||
| 41 | ``` |
|||||||
| 42 | ||||||||
| 43 | ## Réseau → Traefik |
|||||||
| 44 | ||||||||
| 45 | Pour chaque services docker compose, nous crééons un **réseau** (nommé d'après le service qui l'utilise) et nous l'ajoutons au `docker-compose.yml` de **traefik**, à deux endroits précis: |
|||||||
| 46 | ||||||||
| 47 | ```yaml |
|||||||
| 48 | networks: |
|||||||
| 49 | # → 1er endroit |
|||||||
| 50 | traefik: |
|||||||
| 51 | service: |
|||||||
| 52 | name: service # ← le nom du réseau |
|||||||
| 53 | external: true # externe car il est créer quand on lance le container |
|||||||
| 54 | # etc... |
|||||||
| 55 | ||||||||
| 56 | services: |
|||||||
| 57 | traefik: |
|||||||
| 58 | # (...) |
|||||||
| 59 | networks: |
|||||||
| 60 | # → 2eme endroit |
|||||||
| 61 | traefik: |
|||||||
| 62 | service: # ← le nom du réseau |
|||||||
| 63 | # etc... |
|||||||
| 64 | ``` |
|||||||
| 65 | ||||||||
| 66 | Ensuit, lancer la commandes suivantes pour relancer le container avec les nouveaux réseaus docker. |
|||||||
| 67 | ||||||||
| 68 | ```bash |
|||||||
| 69 | docker compose up -d |
|||||||
| 70 | ``` |
|||||||
| 71 | ||||||||
| 72 | ## Troubleshooting |
|||||||
| 73 | ||||||||
| 74 | ### Retirer un certificat `le-stg` |
|||||||
| 75 | ||||||||
| 76 | Les certificats Let's Encrypt sont stocker dans `$CONFIG/cert/acme.json`. Vous pouvez retirer les retirer en supprimant les lignes concerné dans la section `le-stg`. Il faut ensuite redémarrer traefik → `docker compose restart`. |
|||||||