Quelques notes sur Traefik v3

Je me suis mis en tête d'auto héberger quelques applications et de les rendre accessibles de l'extérieur... et j'ai voulu expérimenter l'utilisation d'un reverse proxy - l'idée étant, par exemple, de ne pas me préoccuper des certificats SSL. J'ai choisi Traefik 3, suite à plusieurs lectures et recommandations enthousiastes.

J'ai des applications PHP sous Symfony et Laravel, et des applications Node. J'utilise Docker en mode rootless, ce qui m'empêche par défaut d'exposer des ports inférieurs à 1024. Je n'ai pas eu spécialement envie de modifier /etc/sysctl.conf ^^

J'utilise le binaire de Traefik et j'ai choisi SystemD pour le démarrer / l'arrêter.

Je suis arrivé à avoir le fichier de conf Traefik suivant (dans /etc/traefik/traefik.yml)

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
          permanent: true
  websecure:
    address: ":443"
  traefik:
    address: ":8080"

providers:
  file:
    filename: /etc/traefik/dynamic.yml
  docker:
    endpoint: "unix:///run/user/1001/docker.sock"

certificatesResolvers:
  myresolver:
    acme:
      email: myemail@myemail.com
      storage: /etc/traefik/acme/acme.json
      httpChallenge:
        entryPoint: web

Le fichier dynamic.yml contient

http:
  routers:
    appli_php:
      rule: "Host(`mon_nom_de_domaine_php`)"
      service: mon_appli_php
      entryPoints:
        - websecure
      tls:
        certResolver: myresolver
    appli_node:
      rule: "Host(`mon_nom_de_domaine_node`)"
      entryPoints:
        - websecure
      tls:
        certResolver: myresolver
      service: mon_appli_node

  services:
    mon_appli_php:
      loadBalancer:
        servers:
          - url: "http://localhost:8345" # notez le port - on le retrouve dans la configuration Apache2
    mon_appli_node:
      loadBalancer:
        servers:
          - url: "http://127.0.0.1:3000" # notez le port - on le retrouve dans la configuration de l'appli Node

Concernant l'appli PHP, j'utilise Apache2 pour pouvoir servir des ressources statiques - le fichier du virtualhost donne ceci

<VirtualHost *:8345>
  ServerName localhost

  ServerAdmin webmaster@test.com

        <FilesMatch \.php$>
                SetHandler proxy:fcgi://127.0.0.1:9082i # configurer PHP-FPM pour utiliser ce port
        </FilesMatch>

        DocumentRoot /path_vers_dossier_public_de_l_application
        <Directory /path_vers_dossier_public_de_l_application>
                AllowOverride All
                Require all granted
        </Directory>

  ErrorLog ${APACHE_LOG_DIR}/mon_appli_php.error.log
  CustomLog ${APACHE_LOG_DIR}/mon_appli_php.access.log combined
</VirtualHost>

Pour la config de PHP-FPM, j'ai modifié le fichier www.conf du dossier pool.d dans /etc/php/versionPHP/

listen = 127.0.0.1:9082

Je n'ai pas utilisé Docker parce que j'avais déjà une configuration PHP complète mais j'aurais pu... et c'est ce que j'ai fait pour NodeJS

Mon appli Node a un frontend sous Nuxt et un backend en Express.

J'ai donc un Dockerfile pour Nuxt et un autre pour Express. Je passe les détails, mais le Dockerfile du backend permet d'exposer le port 3001 tandis que celui du frontend expose le port 3000 (que l'on retrouve dans Traefik). Ces 2 Dockerfile sont "reliés" via un compose.yaml à la racine du projet (en dehors des 2 dossiers frontend et backend). Il a la forme suivante :

services:
  frontend:
    build:
      context: ./frontend
    ports:
      - "3000:3000" 
    labels:
      - "traefik.enable=true"
    networks:
      - network_appli_node

  backend:
    build:
      context: ./backend
    environment:
      - PORT=3001
    ports:
      - "3001:3001" 
    networks:
      - network_appli_node

networks:
  network_appli_node:
    driver: bridge

.