{{tag>sysadmin netadmin docker traefik letsencrypt}}
====== Traefik: configuration de let's encrypt ======
Traefik peut gérer les certificats Let's Encrypt au profit des services placés derrière le reverse-proxy.
===== Configuration statique =====
Pour les tests la configuration statique peut déclarer le résolveur comme suit (avec une autorité de certification "staging"):
certificatesResolvers:
resolver-letsencrypt-testing:
acme:
caServer: https://acme-staging-v02.api.letsencrypt.org/directory
email: contact@example.com
storage: /etc/traefik/acme/cert_testing_storage.json
httpChallenge:
entryPoint: HTTP
Pour la production, utiliser le paramétrage suivant pour le résolveur
certificatesResolvers:
resolver-letsencrypt:
acme:
caServer: https://acme-v02.api.letsencrypt.org/directory
email: contact@fqdn.
storage: /etc/traefik/acme/cert_storage.json
httpChallenge:
entryPoint: HTTP
===== docker-compose =====
Le fichier de configuration statique définit un fichier de stockage au format JSON (dans mon cas ''/etc/traefik/acme/cert_storage.json''). Pour pouvoir conserver son contenu on crée un point de montage dans la déclaration du service au sein du docker-compose
version: "3.3"
services:
traefik:
image: traefik:v2.4.12
restart: unless-stopped
...
volumes:
# Traefik écoute l'orchestrateur local Docker via le mapping suivant
- type: bind
source: /var/run/docker.sock
target: /var/run/docker.sock
read_only: true
# Fichier de configuration statique en lecture seule
- type: bind
source: $PWD/traefik/conf/traefik.yml
target: /etc/traefik/traefik.yml
read_only: true
# fichier de stockage des certificats letsencrypt
# NB: doit appartenir a root avec les droits acces 600
- type: bind
source: $PWD/traefik/certs/letsencrypt
target: /etc/traefik/acme
...
Les fichiers de stockage des certificats doivent appartenir à root et avoir les droits positionnés à 0600.
$ mkdir -p traefik/certs/letsencrypt
$ cd traefik/certs/letsencrypt
$ touch cert_testing_storage.json cert_storage.json
$ chmod 600 cert_*
$ sudo chown root:root cert_*
Via les labels, on peut enfin paramétrer le service derrière traefik pour qu'il puisse bénéficier du résolveur ici nommé "resolver-letsencrypt"
version: "3.3"
services:
traefik:
...
whoami-secure:
image: containous/whoami
depends_on:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami_insecure.entryPoints=HTTP"
- "traefik.http.routers.whoami_insecure.rule=Host(`whoami.fqdn`)"
- "traefik.http.middlewares.https-redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares.https-redirect.redirectscheme.permanent=true"
- "traefik.http.routers.whoami_insecure.middlewares=https-redirect@docker"
- "traefik.http.routers.whoami_secure.entrypoints=HTTPS"
- "traefik.http.routers.whoami_secure.rule=Host(`whoami.fqdn`)"
- "traefik.http.routers.whoami_secure.tls=true"
- "traefik.http.routers.whoami_secure.tls.certresolver=resolver-letsencrypt"
...
===== Références =====
* https://doc.traefik.io/traefik/v2.4/https/acme/
* https://doc.traefik.io/traefik/v2.4/https/acme/#caserver