{{ :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]]