Installez le Reverse Proxy Traefik : Partie 1

Conditions d’installation "Conteneur Lxc"
L’installation est réalisée selon les critères suivants:
Le conteneur est un processus indépendant de son hôte, il utilise son propre système de manière isolé. Le fait qu'il soit "Unprivileged" veut dire que "normalement" il n'accède a aucune ressource de son hôte, L'utilisateur par défaut est "root" , il est possible de modifier ce fait , la manipulation n'est pas si aisée. "Nesting" autorise d'installer un autre conteneur a l’intérieur du conteneur. Pour finir, il est peut gourmand en ressource et du fait qu'il soit portable, il peut être déployer très rapidement...
- Proxmox PVE 8.3
- Conteneur "Unprivileged"
- Nesting: Oui
- Utilisateur root
- Debian 12
- Docker
- Docker compose

Comme d'habitude, afin de conserver toujours la même structure, je créé le répertoire d'installation dans "/opt/ comme suit :
# mkdir -p /opt/traefik
Traefik a besoin pour fonctionner de quatre éléments principaux :
- Un fichier "compose.yml" En dehors de l'image du conteneur de déploiement de l'application, on inscrira dans ce fichier la partie statique de la configuration de Traefik. On peut créer un fichier statique a part mais pour l'instant je vais au plus simple.
- Un fichier "acme.json" qui stocke les certificats tls.
- Un répertoire dynamique "traefik-dynamic » : Son contenu est pris en compte en temps réel.
- Un fichier de configuration dynamique "config.yaml" qui sera présent dans le répertoire créé juste avant et qui contient tous les routages et services de vos applications web.
On commence:
# touch /opt/traefik/compose.yml
# touch /opt/traefik/acme.json
- Pour des principes de sécurité on rendra accessible ce fichier uniquement à l'utilisateur en cours :
# chmod 600 acme.json
[1]
# mkdir /opt/traefik/traefik-dynamic
Enfin, un petit dernier :
# touch /opt/traefik/traefik-dynamic/config.yaml
- On va utiliser un réseau propre à Traefik, on va le créer comme suit :
# docker network create traefik_net
On va avoir besoin afin de sécuriser l'accès à la page web de Traefik, on va utiliser un middleware comme évoqué plus haut, on va pour l'instant se tourner vers "Basicauth" un simple authentifiant http,
- On va aussi générer un identifiant et un mot de passe pour ce dernier en utilisant le docker suivant :
#docker run --rm --name apache httpd:alpine htpasswd -nb user mdp
Bien sûr , on remplace "user" et "mdp" par ses donnéés propres.
Cela donne ce résultat
# user:$apr1$SqXU6WDI$pLfLWOhRgLBol9UYBdZHa0
Petite remarque importante : Il faut doubler tous les $!!!
chmod permet de changer les permissions d'accès d'un fichier ou répertoire. ↩︎
On peut , désormais créer notre contenu du fichier "compose.yml":
1 version: '3'
2 services:
3 traefik:
4 image: traefik:v2.4.8
5 container_name: traefik
6 restart: unless-stopped
7 command:
8 - "--providers.docker=true"
9 - "--providers.docker.exposedbydefault=false"
10 - "--providers.file.directory=/etc/traefik/dynamic-conf"
11 - "--providers.file.watch=true"
12 - "--api.dashboard=true"
13 - "--entrypoints.web.address=:80"
14 - "--entrypoints.websecure.address=:443"
15 - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
16 - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
17 - "--certificatesResolvers.letsencrypt.acme.email=email@exemple.tld"
18 - "--certificatesResolvers.letsencrypt.acme.storage=acme.json"
19 - "--certificatesResolvers.letsencrypt.acme.tlsChallenge=true"
20 labels:
21 - "traefik.enable=true"
22 - "traefik.http.routers.dashboard.rule=Host(`traefik.exemple.tld`)"
23 - "traefik.http.routers.dashboard.service=api@internal"
24 - "traefik.http.routers.dashboard.entrypoints=websecure"
25 - "traefik.http.routers.dashboard.middlewares=auth-dashboard"
26 - "traefik.http.middlewares.auth-dashboard.basicauth.users=admin:
$$xxxxxxxxx$$xxjjgfy"
27 - "traefik.http.routers.dashboard.tls=true"
28 - "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
29 networks:
30 - traefik_net
31 ports:
32 - 80:80
33 - 443:443
34 volumes:
35 - /var/run/docker.sock:/var/run/docker.sock:ro
36 - $PWD/acme.json:/acme.json
37 - $PWD:/etc/traefik:ro
38 networks:
39 traefik_net:
40 external: true
$PWD désigne le chemin du répertoire courant en l’occurrence "/opt/traefik/".
Je vous met en pièce jointe le fichier "compose.yml" et aussi les explications ligne par ligne sur l'aute lien.
La partie 2
