{{ :informatique:docker:traefik:traefik.png?nolink&80x100}} ====== Traefic Reverse Proxy ====== ===== Objectifs ===== Utiliser un reverse proxy moderne afin d'assurer l'hébergement de plusieurs sites adressés par plusieurs sous domaines (chez OVH).\\ Jouer avec [[https://docs.docker.com/compose/|Docker Compose]] et passer au https (enfin!) avec [[https://letsencrypt.org/|Let's Encrypt]]. ===== Architecture ===== {{:informatique:docker:traefik:architecture_web_traefik.png?direct&650x423}} ===== Les règles de routage ===== Configuration du FrontEnd (Mise en place des rules) :[[https://docs.traefik.io/basics/#frontends|https://docs.traefik.io/basics/#frontends]] Exemple de quelques règles de routage : - "traefik.frontend.rule=Host:floriantales.fr,floriantales.hd.free.fr" - "traefik.frontend.rule=Host:floriantales.fr,floriantales.hd.free.fr;PathPrefixStrip:/wiki" - "traefik.frontend.rule=PathPrefixStrip:/www" - "traefik.frontend.rule=Host:floriantales.hd.free.fr" ===== Traefik et compose ===== Difficile de se passer de compose lorsque l'on commence à jouer avec Traefik. ==== Exemple de configuration ==== Exemple de yaml pour compose : version: '2' services: ProxyReverse_Traefik: image: traefik:1.5 restart: always command: --web --docker --logLevel=DEBUG ports: - "8081:80" - "8080:8080" volumes: - "/var/run/docker.sock:/var/run/docker.sock" - "$PWD/traefik.toml:/traefik.toml" Nginx_WWW: image: richarvey/nginx-php-fpm restart: always labels: - "traefik.port=80" - "traefik.backend=Nginx_WWW" - "traefik.frontend.rule=PathPrefixStrip:/www" volumes: - "/mnt/Raid/Documents_de_Florian/Documents_NAS/Dockers/Docker_Data/Nginx_WWW/:/var/www/html" Nginx_Dokuwiki: image: richarvey/nginx-php-fpm restart: always environment: - PUID=1000 - PGID=1000 labels: - "traefik.port=80" - "traefik.backend=Nginx_Dokuwiki" - "traefik.frontend.rule=Host:doku.floriantales.fr" volumes: - "/mnt/Raid/Documents_de_Florian/Documents_NAS/Dockers/Docker_Data/Nginx_Dokuwiki/:/var/www/html" ==== Toute la puissance de traefik et compose ==== Augmentation d'un cluster (nombre de backends pour traefik) Nginx_Dokuwiki : {{:informatique:docker:traefik:selection_550.png?nolink&789x102}} {{:informatique:docker:traefik:selection_551.png?nolink&552x480}} ===== Metrics - Influxdb et Grafana ===== ==== Configuration Traefik ==== Pour mettre en oeuvre des métriques on peut utiliser le paramétrage suivant (pour alimenter du [[:informatique:docker:influxdata_stack|Influxdb]]) : ​​​​​​​[metrics] [metrics.influxdb] address = "Influxdb:8086" protocol = "http" pushinterval = "60s" database = "traefik_metrics" retentionpolicy = "" ==== Configuration Docker ==== L'adresse renseignée est un alias "dns" déclaré par un "links" dans la configuration docker compose : version: '3.3' services: Influxdb: image: influxdb container_name: compose_influxdb [...] ProxyReverse_Traefik: image: traefik container_name: compose_traefik [...] links: - Influxdb [...] ==== Decouverte des métriques ==== Au bout de quelques temps de vie on se retrouve avec les mesures suivantes dans influxdb : > use traefik_metrics Using database traefik_metrics> show measurements name: measurements name ---- traefik.backend.connections.open traefik.backend.request.duration traefik.backend.requests.total traefik.backend.server.up traefik.config.reload.lastSuccessTimestamp traefik.config.reload.total traefik.entrypoint.connections.open traefik.entrypoint.request.duration traefik.entrypoint.requests.total Exemple avec les mesures **traefik.backend.requests.total **: > select * from "traefik.backend.requests.total" name: traefik.backend.requests.total time backend code count method protocol ---- ------- ---- ----- ------ -------- 1562103501196457183 backend-compose-nginx-dokuwiki 200 19 GET http 1562103501196457183 backend-compose-nginx-dokuwiki 302 3 GET http 1562103501196457183 backend-compose-nginx-dokuwiki 304 3 GET http 1562103561196627361 backend-compose-nginx-dokuwiki 200 63 GET http 1562103561196627361 backend-compose-nginx-dokuwiki 302 3 GET http 1562103681196635183 backend-compose-nginx-dokuwiki 200 18 GET http 1562103681196635183 backend-compose-nginx-dokuwiki 302 8 GET http 1562103681196635183 backend-compose-nginx-dokuwiki 304 71 GET http 1562152339968503514 backend-compose-nginx-dokuwiki 200 4 GET http 1562152399968521229 backend-compose-nginx-webcv 200 1 GET http 1562152399968521229 backend-compose-nginx-webcv 404 1 GET http 1562152999968483889 backend-compose-nginx-dokuwiki 200 25 GET http 1562152999968483889 backend-compose-nginx-dokuwiki 200 4 POST http ==== Grafana Dashboard ==== J'ai publié mon dashboard sur grafana.com : [[https://grafana.com/dashboards/10479|https://grafana.com/dashboards/10479]]\\ {{:informatique:docker:traefik:selection_347.png?direct&800x471}} ===== HTTPS avec Let's Encrypt ===== Exemple de passage en https2: [[https://www.it-wars.com/posts/performance/docker-traefik-letsencrypt/|https://www.it-wars.com/posts/performance/docker-traefik-letsencrypt/]] ===== Ressources ===== Point de départ : [[https://blog.osones.com/traefik-un-reverse-proxy-pour-vos-conteneurs.html|https://blog.osones.com/traefik-un-reverse-proxy-pour-vos-conteneurs.html]] GitHub du Projet : [[https://github.com/containous/traefik|https://github.com/containous/traefik]]