Traefik est une solution de revers proxy capable de générer et de renouveler vos certificats let's encrypte automatiquement pour tous vos services web.

Ça mise en place pour Docker est assez simple, il se compose de deux parties importantes, le fichier de configuration de Traefik (traefik.toml) et le fichier qui va sauvegarder les clés TLS (acme.json)

Pour commencer, vous devez créer un fichier docker-compose avec les informations suivantes :

version: '2'

services:
  traefik:
    container_name: traefik
    image: traefik:latest
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    labels:
      - "traefik.enable=true"
      - "traefik.port=8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "/home/slown/traefik.toml:/etc/traefik/traefik.toml"
      - "/home/slown/acme:/etc/traefik/acme"

Prenez soin d'adapter les différents volumes, notamment pour le chemin du fichier de configuration "traefik.toml" et le dossier des clés "acme", c'est dans ce dossier que sera créé automatiquement le fichier acme.json.

Pour ce qui est du fichier de configuration de Traefik, en voici un exemple :

# Service logs (here debug mode)
#debug = true
#traefikLogsFile = "/var/log/traefik/traefik.log"
#logLevel = "DEBUG"

# Entrypoints
[entryPoints]
    [entryPoints.http]
    address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

# Config TLS
[acme]
email = "julienhl14@gmail.com"
storageFile = "/etc/traefik/acme/acme.json"
entryPoint = "https"
#OnHostRule = true
#onDemand = true
[acme.httpChallenge]
    entryPoint = "http"

[[acme.domains]]
  main = "walentyn.fr"
  sans = ["blog.walentyn.fr", "cloud.walentyn.fr"]

[[acme.domains]]
  main = "domaine2.fr"
  sans = ["mail.domaine2.fr"]

# Admin dashboard
[web]
address = ":8080"

# Configuration Docker
[docker]
endpoint = "unix:///var/run/docker.sock"
exposedbydefault = true

Dans celui-ci, les logs liés au bug sont désactivés, il vous suffit de décommenter les premières lignes pour activer l'option.

La partie Entrypoints identifie les ports d'entrées du serveur, 80 pour le port HTTP et 443 pour le port HTTPS.

# Entrypoints
[entryPoints]
    [entryPoints.http]
    address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

La partie TLS permet de configurer les options de demande de certificat pour let's encrypte.

# Config TLS
[acme]
email = "votre.mail@gmail.com"
storageFile = "/etc/traefik/acme/acme.json"
entryPoint = "https"
[acme.httpChallenge]
    entryPoint = "http"

L'email est utilisé par Le't encrypte pour identifier la personne qui fait une demande de certificat. L'option entryPoint force l'utilisation du TLS pour sécuriser votre service web.

Vous devez indiquer les différents domaines que vous souhaiter utiliser sur votre serveur avec les informations suivantes :

[[acme.domains]]
  main = "walentyn.fr"
  sans = ["blog.walentyn.fr", "cloud.walentyn.fr"]
[[acme.domains]]
  main = "domaine2.fr"
  sans = ["mail.domaine2.fr"]

Vous avez la possibilité d’héberger plusieurs domaines sur la même instance de Traefik.

La partie Admin dashboard permet un accès à l'interface graphique de Traefik.

# Admin dashboard
[web]
address = ":8080"

Ceci fait, il ne vous reste qu'à exécuter docker-compose pour lancer votre conteneur Traefik avec la commande suivante :

sudo docker-compose up -d

Pour relier les conteneurs de vos différents services web, vous devez indiquer différents labels :

labels:
      - "traefik.frontend.rule=Host:blog.walentyn.fr"
      - "traefik.port=xx"
      - "traefik.backend=blog"
      - "traefik.frontend.entryPoints=http,https"

En ajoutant les labels correspondant à vos différents services, ceux-ci seront automatiquement pris en charge par Traefikqui récupérera un certificat et redirigera les flux d'entrées et sortie vers les conteneurs correspondants.