Traefik peut gérer les certificats Let's Encrypt au profit des services placés derrière le reverse-proxy.
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
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" ...