Aller au contenu

Comment configurer votre propre infrastructure web à la maison avec Docker et Traefik : de zéro à HTTPS automatique

Rogelio Guerra Riverón
Auteur
Rogelio Guerra Riverón
Construction de ma propre infrastructure web depuis zéro. Je documente chaque étape : serveurs, réseaux, conteneurs et tout ce qui se présente.

Introduction
#

Il y a quelques mois, j’ai décidé d’arrêter d’utiliser des services cloud coûteux et de mettre en place ma propre infrastructure à la maison. La solution que j’ai trouvée a été de combiner Docker avec Traefik. Cela fonctionne bien et maintenant j’ai plusieurs services fonctionnant sous HTTPS sans toucher manuellement à un certificat. Je te raconte comment j’ai fait.

Ce dont tu as besoin
#

Un serveur avec Docker installé (n’importe quelle machine Linux avec 2GB de RAM suffit). Un domaine personnel. Un peu de patience avec DNS. C’est tout.

Si tu n’as pas de serveur dédié, tu as des options selon le budget et la consommation : une Raspberry Pi 3 B+ (lien d’affiliation) est parfaite pour les services légers avec une consommation d’énergie minimale. Si tu as besoin de plus de puissance, un ordinateur portable comme le Lenovo V15 (lien d’affiliation) est une option très polyvalente : en plus de serveur domestique, il a la capacité de fonctionner avec des logiciels industriels de marques comme Siemens (TIA Portal, SIMATIC) ou d’autres environnements d’automatisation qui demandent des ressources réelles. Un équipement, deux usages.

Le plan
#

Je vais utiliser Traefik comme reverse proxy. Il gère automatiquement les certificats Let’s Encrypt, achemine le trafic vers les bons conteneurs et sert HTTPS sans que tu aies à faire quoi que ce soit une fois configuré. C’est propre et ça fonctionne.

Étape 1 : Préparer Docker Compose
#

Crée un dossier pour ta stack :

mkdir -p ~/docker/traefik
cd ~/docker/traefik

Ce sera ton fichier docker-compose.yml :

version: '3.8'

services:
  traefik:
    image: traefik:v2.10
    container_name: traefik
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.yml:/traefik.yml
      - ./acme.json:/acme.json
    networks:
      - web

networks:
  web:
    driver: bridge

Crée le fichier traefik.yml :

api:
  insecure: true
  dashboard: true

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: websecure
  websecure:
    address: ":443"

certificatesResolvers:
  letsencrypt:
    acme:
      email: tu-email@example.com
      storage: acme.json
      httpChallenge:
        entryPoint: web

providers:
  docker:
    endpoint: unix:///var/run/docker.sock
    exposedByDefault: false
  file:
    filename: traefik.yml

Crée le fichier acme.json avec des permissions restrictives :

touch acme.json
chmod 600 acme.json

Étape 2 : Lance Traefik
#

docker-compose up -d

Vérifie que c’est en fonctionnement :

docker-compose logs traefik

Étape 3 : Configure ton domaine
#

Chez ton fournisseur DNS, pointe ton domaine (et un wildcard) vers l’adresse IP publique de ton serveur :

example.com     A  TU_IP_PUBLICA
*.example.com   A  TU_IP_PUBLICA

Attends que ça se propage (environ 15 minutes).

Étape 4 : Ajoute ton premier service
#

Je vais ajouter un exemple simple. Modifie le docker-compose.yml :

services:
  traefik:
    # ... config anterior

  whoami:
    image: traefik/whoami
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`whoami.example.com`)"
      - "traefik.http.routers.whoami.entrypoints=websecure"
      - "traefik.http.routers.whoami.tls.certresolver=letsencrypt"
      - "traefik.http.services.whoami.loadbalancer.server.port=80"
    networks:
      - web

Redéploie :

docker-compose up -d

Attends 30 secondes et accède à https://whoami.example.com. Le certificat est généré automatiquement.

Étape 5 : Ajoute plus de services
#

Pour chaque nouveau service, ajoute simplement des labels similaires à ceux du whoami. Traefik s’occupe du reste. C’est aussi simple que ça.

Considérations pratiques
#

Sauvegarde de acme.json : C’est ton fichier de certificats. Fais-en une sauvegarde régulièrement ou tu perdras les certificats.

Firewall : Ouvre les ports 80 et 443 sur ton routeur en pointant vers le serveur.

IP dynamique : Si ton fournisseur d’accès change ton IP (courant en résidentiel), utilise un service DDNS.

Dashboard : Traefik a un dashboard sur http://localhost:8080 (seulement depuis la machine locale pour la sécurité).

Problèmes courants
#

Si les certificats ne se génèrent pas, vérifie les logs : docker-compose logs traefik. Généralement c’est un problème de DNS ou de firewall.

Si un service ne répond pas, vérifie que le label port correspond au port interne du conteneur.

Conclusion
#

Avec cette setup, j’ai mis en place un blog, un wiki, nextcloud et d’autres services à la maison sans dépenser pour SSL ou pour un reverse proxy commercial. Traefik est une bête pour ça. Ça vaut vraiment le coup de consacrer une heure pour le configurer correctement.


Équipement recommandé
#

Liens d’affiliation. Aucun coût supplémentaire pour toi.