Table des matières
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 Docker Compose et passer au https (enfin!) avec Let's Encrypt.
Architecture
Les règles de routage
Configuration du FrontEnd (Mise en place des rules) :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 :
- docker-compose.yml
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 :
Metrics - Influxdb et Grafana
Configuration Traefik
Pour mettre en oeuvre des métriques on peut utiliser le paramétrage suivant (pour alimenter du Influxdb) :
- traefik.toml
[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 avec Let's Encrypt
Exemple de passage en https2: 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
GitHub du Projet : https://github.com/containous/traefik