diff --git a/pica-traefik/README.md b/pica-traefik/README.md
index 0544aa4a2f67adb20a15621f8056acdc35e103ce..d3c67df35de51f8fd5d246a2032ffedd3e2244ca 100644
--- a/pica-traefik/README.md
+++ b/pica-traefik/README.md
@@ -7,36 +7,28 @@ Ce service doit être lancé sur l'ensemble des machines de l'infrastructure.
 
 ### Configuration
 
-La configuration a lieu dans le fichier [traefik.toml](./traefik.toml).
+La configuration a lieu dans les fichiers [traefik.toml](./traefik.toml) et [traefik_dynamic.toml](./traefik_dynamic.toml).
 Notez que toute modification dans ce fichier impactera l'ensemble des machines, puisque le même fichier est utilisé pour l'ensemble des machines.
 
 À des fins de tests, il peut être modifié localement sur les machines, mais doit toujours rester synchronisé avec ce dépôt à long terme.
 
 Pour la génération des certificats, Traefik utilise Let's Encrypt. Il n'y a aucune configuration à faire de ce côté. Attention, le nombre de certificats générables est limité à 50 par semaine.
 
-Si on lance plein de conteneurs de tests, on utilisera temporairement [l'environnement de qualification](https://letsencrypt.org/fr/docs/staging-environment/) de Let's Encrypt, en ajoutant la directive `caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"` sous la section `[acme]`.
+Si on lance plein de conteneurs de tests, on utilisera temporairement [l'environnement de qualification](https://letsencrypt.org/fr/docs/staging-environment/) de Let's Encrypt, en ajoutant la directive `caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"` sous la section `[certificatesResolvers.letsencrypt.acme]`.
 
 ### Lancement
 
-Assurez-vous que le dossier `/DATA/docker/traefik/certs` existe.
-C'est dans ce dossier que seront conservés tous les certificats générés par Traefik.
+Au premier lancement, assurez-vous que :
+* Le dossier `/DATA/docker/traefik/certs` existe
+* Créez un fichier `acme.json` à l'intérieur
+* Changez son propriétaire à `root`
+* Changez ses permissions à `600`
+
+C'est dans ce fichier que seront conservés tous les certificats générés par Traefik.
 
 ### Mise à jour
 
 Il suffit de mettre à jour le tag de l'image dans Compose.
-Attention, Traefik v2 introduit énormément de changements et [nous ne sommes pas certains](https://wiki.picasoft.net/doku.php?id=technique:adminsys:migration-traefik-v2) de la manière d'effectuer la migration.
-
-Aussi, Traefik v1.6 est utilisé pour tenterd d'éviter un bug introduit dans la 1.7, qui rend certains services redémarrés inaccessibles (voir [cette discussion](https://team.picasoft.net/picasoft/pl/66aorsxhtffrjytyhnecn436wa)).
-
-Avant toute mise à jour, il faudra discuter avec l'équipe technique et modifier ce README le cas échéant.
-
-### Todo
-
-*Voir si on peut passer Traefik en "host" au niveau du réseau pour qu'il ait accès à tous les réseaux* :
-https://kanban.picasoft.net/b/7fCn765LCNGraBhxA/team-technique-picasoft/kjvc3iw2pFvszCTcR
-
-Actuellement, Traefik est dans le réseau `docker_default` sur toutes les machines, et les conteneurs souhaitant être accessibles via Traefik doivent être explicitement dans ce réseau.
-
-Ceci induit une complexité supplémentaire au niveau des fichiers Compose.
+Lire la documentation [sur les mises à jour mineures](https://docs.traefik.io/v2.2/migration/v2/) pour voir s'il y a des opérations à effectuer ou des options dépréciées.
 
-Il serait peut être bon de permettre à Traefik d'accéder à tous les réseaux et de supprimer énormément de directives "inutiles" dans les Compose.
+La mise à jour vers Traefik v2 a été effectuée ; quelques détails sont à consulter [sur le wiki](https://wiki.picasoft.net/doku.php?id=technique:adminsys:migration-traefik-v2).
diff --git a/pica-traefik/docker-compose.yml b/pica-traefik/docker-compose.yml
index daaf9802d24f03b53766fa67ec286b8a2a18522f..d4a139e9324c18bbb0c9819548542b547facdc6d 100644
--- a/pica-traefik/docker-compose.yml
+++ b/pica-traefik/docker-compose.yml
@@ -1,18 +1,22 @@
 version: '3.7'
 
+networks:
+  proxy:
+    name: 'proxy'
+
 services:
   traefik:
-  container_name: traefik
-  # DO NOT UPGRADE
-  # SEE THIS BEFORE AND DISCUSS : https://team.picasoft.net/picasoft/pl/66aorsxhtffrjytyhnecn436wa
-  image: traefik:1.6.6
-  ports:
-    - "80:80"
-    # Uncomment to expose the web interface. Warning : do not use without setting a password in traefik.toml
-    #- "8080:8080"
-    - "443:443"
-  volumes:
-    - /var/run/docker.sock:/var/run/docker.sock
-    - ./traefik.toml:/traefik.toml
-    - /DATA/docker/traefik/certs:/certs
-  restart: always
+    image: traefik:2.3
+    container_name: traefik
+    ports:
+      - 80:80
+      - 443:443
+    volumes:
+      - /etc/localtime:/etc/localtime:ro
+      - /var/run/docker.sock:/var/run/docker.sock
+      - ./traefik.toml:/traefik.toml
+      - ./traefik_dynamic.toml:/traefik_dynamic.toml
+      - /DATA/docker/traefik/certs:/certs
+    networks:
+      - proxy
+    restart: unless-stopped
diff --git a/pica-traefik/traefik.toml b/pica-traefik/traefik.toml
index 351461989e113a1faf7e831ca614f1a7922cfd56..a154bb578889e9e2b85f2f512cfeb4e80de4e72f 100644
--- a/pica-traefik/traefik.toml
+++ b/pica-traefik/traefik.toml
@@ -1,35 +1,40 @@
-logLevel = "INFO"
-debug = true
-defaultEntryPoints = ["http", "https"]
+[global]
+  sendAnonymousUsage = false
+  checkNewVersion = true
 
-[docker]
-endpoint = "unix:///var/run/docker.sock"
-watch = true
-exposedbydefault = false
+[entryPoints]
+  [entryPoints.web]
+    address = ":80"
+    [entryPoints.web.http.redirections.entryPoint]
+      to = "websecure"
+      scheme = "https"
+  [entryPoints.websecure]
+    address = ":443"
+    [entryPoints.websecure.http]
+      middlewares = ["hardening@file", "compression@file"]
+      [entryPoints.websecure.http.tls]
+        certResolver = "letsencrypt"
+        options = "tls12@file"
 
-[api]
 
-[entryPoints]
- [entryPoints.http]
-  address = ":80"
-  compress = false
-  [entryPoints.http.redirect]
-   entryPoint = "https"
- [entryPoints.https]
-  address = ":443"
-  compress = false
-  [entryPoints.https.tls]
-   # Accept only TLS1.1 and 1.2
-   MinVersion = "VersionTLS11"
-   # Accept all ciphers excepting TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA and TLS_RSA_WITH_3DES_EDE_CBC_SHA
-   # CipherSuites = ["TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256","TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA","TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA","TLS_RSA_WITH_AES_128_GCM_SHA256","TLS_RSA_WITH_AES_256_GCM_SHA384","TLS_RSA_WITH_AES_128_CBC_SHA","TLS_RSA_WITH_AES_256_CBC_SHA" ]
-   # Keep only ECDHE :
-   CipherSuites = ["TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256","TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA","TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" ]
+[providers]
+  providersThrottleDuration = "2s"
+  [providers.docker]
+    watch = true
+    endpoint = "unix:///var/run/docker.sock"
+    exposedByDefault = false
+    network = "proxy"
+  [providers.file]
+    filename = "/traefik_dynamic.toml"
+    watch = true
+
+[log]
+  level = "INFO"
 
-[acme]
- email = "picasoft@assos.utc.fr"
- storage = "/certs/acme.json"
- entryPoint = "https"
- onHostRule = true
- [acme.httpChallenge]
-  entryPoint = "http"
+[certificatesResolvers]
+  [certificatesResolvers.letsencrypt]
+    [certificatesResolvers.letsencrypt.acme]
+      email = "picasoft@assos.utc.fr"
+      storage = "/certs/acme.json"
+      [certificatesResolvers.letsencrypt.acme.httpChallenge]
+        entryPoint = "web"
diff --git a/pica-traefik/traefik_dynamic.toml b/pica-traefik/traefik_dynamic.toml
new file mode 100644
index 0000000000000000000000000000000000000000..398f83d557cb2ea3f9ac04233502a4d8292181e2
--- /dev/null
+++ b/pica-traefik/traefik_dynamic.toml
@@ -0,0 +1,28 @@
+[tls.options]
+  [tls.options.tls12]
+    minVersion = "VersionTLS12"
+    cipherSuites = [
+      "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
+      "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
+      "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
+      "TLS_AES_256_GCM_SHA384",
+      "TLS_CHACHA20_POLY1305_SHA256"
+    ]
+    curvePreferences = ["CurveP521","CurveP384"]
+
+[http]
+  [http.middlewares.hardening.headers]
+    addVaryHeader = true
+    browserXssFilter = true
+    contentTypeNosniff = true
+    forceSTSHeader = true
+    frameDeny = true
+    stsIncludeSubdomains = true
+    stsPreload = true
+    customFrameOptionsValue = "SAMEORIGIN"
+    referrerPolicy = "same-origin"
+    featurePolicy = "vibrate 'self'"
+    stsSeconds = 315360000
+
+  [http.middlewares.compression.compress]
+    excludedContentTypes = ["text/event-stream"]