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