🚀 SWAG : Le Reverse Proxy Docker qui va rĂ©volutionner votre homelab !

Published: (December 7, 2025 at 03:14 AM EST)
5 min read
Source: Dev.to

Source: Dev.to

Mais qu’est‑ce que SWAG exactement ?

SWAG est un reverse proxy tout‑en‑un basĂ© sur nginx qui gĂšre automatiquement vos certificats SSL Let’s Encrypt. En gros, c’est votre portier numĂ©rique qui :

  • 🔒 SĂ©curise automatiquement vos services avec des certificats SSL
  • 🌐 Expose vos services Docker sur des sous‑domaines propres
  • đŸ›Ąïž ProtĂšge vos applications avec une authentification centralisĂ©e
  • 📋 GĂšre tout ça avec une configuration simple

Pourquoi SWAG plutît qu’autre chose ?

Avant SWAG, j’utilisais nginx classique avec certbot
 quelle galĂšre ! Entre les renouvellements de certificats qui plantent, les configs nginx Ă  maintenir manuellement, et la gestion des domaines, c’était un vrai casse‑tĂȘte. SWAG rĂ©sout tout ça d’un coup :

  • Certificats wildcard automatiques
  • Configs pré‑faites pour les services populaires
  • IntĂ©gration native avec Docker
  • Support de l’authentification (Authelia, OAuth, etc.)

Notre architecture cible

Configuration chez votre provider (exemple Free)

  1. Connectez‑vous à l’interface Freebox :
  2. Paramùtres de la Freebox → Gestion des ports
  3. CrĂ©ez une redirection de port :
Port externePort interneIP destinationProtocole
443 (HTTPS)443192.168.1.100 (exemple)TCP
80 (HTTP)80192.168.1.100TCP

💡 Tip sĂ©curité : au lieu d’exposer directement les ports 80/443, vous pouvez utiliser des ports custom (ex : 8443) et faire la redirection.

Configuration DuckDNS

  1. Inscrivez‑vous sur DuckDNS
  2. CrĂ©ez votre domaine : monhomelab.duckdns.org
  3. Notez votre token (il sera utilisé dans Docker)

Alternatives DNS providers

GratuitPayant
DuckDNSCloudflare
FreeDNSOVH
No‑IPGandi
Route53
DigitalOcean
Namecheap

Exemple de configuration pour Cloudflare :

environment:
  - URL=mondomaine.com
  - VALIDATION=dns
  - DNSPLUGIN=cloudflare
  - EMAIL=votre-email@example.com
  - CLOUDFLARETOKEN=votre-api-token-cloudflare

Vérification IP publique

# Vérifier votre IP publique
curl ifconfig.me
# Vérifier que DuckDNS pointe bien dessus
nslookup monhomelab.duckdns.org

Si les IPs correspondent, c’est bon ! 🎯

Test de connectivité

# Démarrez un serveur web simple sur le serveur local
python3 -m http.server 8080
# Depuis l'extérieur, testez avec votre domaine
curl http://monhomelab.duckdns.org:8080

Si ça marche, vous ĂȘtes prĂȘts pour SWAG !

Installation avec Docker Compose

PrĂ©paration des variables d’environnement

version: "3.8"

networks:
  web-proxy:
    external: false

services:
  swag:
    image: lscr.io/linuxserver/swag:latest
    container_name: swag
    cap_add:
      - NET_ADMIN
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
      - URL=monhomelab.duckdns.org      # Votre domaine DuckDNS
      - VALIDATION=duckdns              # Validation via DuckDNS
      - DUCKDNSTOKEN=12345678-1234-1234-1234-123456789012  # Votre token DuckDNS
      - SUBDOMAINS=wildcard             # Permet *.monhomelab.duckdns.org
      - EMAIL=votre-email@example.com
      - ONLY_SUBDOMAINS=false           # Important pour que le domaine principal marche
    volumes:
      - ./swag/data:/config
    ports:
      - "80:80"     # HTTP (redirections vers HTTPS)
      - "443:443"   # HTTPS (vos services sécurisés)
    networks:
      - web-proxy
    restart: unless-stopped

Variables importantes

  • URL : votre domaine complet (DuckDNS, Cloudflare, 
)
  • VALIDATION : type de validation selon le provider
  • SUBDOMAINS=wildcard : gĂ©nĂšre un certificat pour tous les sous‑domaines
  • DUCKDNSTOKEN : token/API key du provider DNS
  • ONLY_SUBDOMAINS=false : permet d’utiliser le domaine principal aussi

Démarrer SWAG

docker-compose up -d swag
docker logs swag   # Vous devriez voir « Server ready » et « Certificate renewal successful »

Structure des dossiers créés

swag/data/
├── nginx/
│   ├── nginx.conf
│   ├── site-confs/
│   └── proxy-confs/     # ← Les configs de nos services
├── keys/
│   └── letsencrypt/     # ← Nos certificats SSL
└── log/

Ajouter nos premiers services

Service 1 : Home Assistant

Ajoutez le service dans le mĂȘme docker‑compose.yml :

  homeassistant:
    image: homeassistant/home-assistant:stable
    container_name: homeassistant
    environment:
      - TZ=Europe/Paris
    volumes:
      - ./homeassistant/data:/config
    networks:
      - web-proxy
    ports:
      - "8123:8123"   # Optionnel, pour accĂšs direct local
    restart: unless-stopped

Configuration du proxy dans SWAG

CrĂ©ez le fichier swag/data/nginx/proxy-confs/homeassistant.subdomain.conf :

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name homeassistant.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    location / {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app homeassistant;
        set $upstream_port 8123;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }

    # Support des WebSockets (important pour Home Assistant !)
    location /api/websocket {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app homeassistant;
        set $upstream_port 8123;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Test de votre configuration

# Vérifier que le conteneur tourne
docker ps | grep homeassistant

# Tester l’accĂšs depuis l’extĂ©rieur
curl -k https://homeassistant.monhomelab.duckdns.org

Vous devriez obtenir la page de connexion de Home Assistant.

Troubleshooting réseau

Réseau Docker dédié

Assurez‑vous que tous les services (SWAG, Home Assistant, 
) partagent le mĂȘme rĂ©seau Docker (web-proxy). Cela permet au proxy de rĂ©soudre les noms de conteneurs (homeassistant, swag, 
) sans exposer les ports publiquement.

Gestion des logs

docker logs swag          # Logs du reverse proxy
docker logs homeassistant

Les logs de SWAG se trouvent également dans swag/data/log/.

Test de configuration

  • VĂ©rifiez que le certificat a bien Ă©tĂ© gĂ©nĂ©ré :
    ls swag/data/keys/letsencrypt/live/monhomelab.duckdns.org/
  • Testez la redirection HTTP → HTTPS :
    curl -I http://monhomelab.duckdns.org

Wildcard certificates

SWAG crĂ©e automatiquement un certificat wildcard (*.monhomelab.duckdns.org). Aucun besoin de crĂ©er un certificat par sous‑domaine.

Sécurisation avec Authelia (bonus)

Authelia peut ĂȘtre ajoutĂ© comme middleware d’authentification :

  authelia:
    image: authelia/authelia
    container_name: authelia
    environment:
      - TZ=Europe/Paris
    volumes:
      - ./authelia/config:/config
    networks:
      - web-proxy
    restart: unless-stopped

Puis, dans le fichier de proxy du service :

    location / {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        auth_request /authelia;
        auth_request_set $user $upstream_http_remote_user;
        proxy_set_header Remote-User $user;
        # 

    }

Consultez la documentation officielle d’Authelia pour la configuration complùte.

Résultat final

  • Un point d’entrĂ©e unique (https://monhomelab.duckdns.org) qui redirige vers tous vos services via des sous‑domaines.
  • Certificats SSL renouvelĂ©s automatiquement.
  • Gestion centralisĂ©e des logs et du rĂ©seau Docker.

Debugging courant

ProblÚmeVérificationSolution
Certificat non générédocker logs swagVérifier le token DuckDNS et la connectivité internet
Port 443 ferménc -zv votre-ip 443Vérifier la redirection de port sur la box
Service inaccessiblecurl -I https://homeassistant.monhomelab.duckdns.orgVĂ©rifier que le conteneur est dans le mĂȘme rĂ©seau Docker
DNS ne pointe pasnslookup monhomelab.duckdns.orgMettre à jour l’IP sur DuckDNS ou votre provider DNS

Conclusion

SWAG simplifie radicalement la mise en place d’un reverse proxy avec SSL dans un homelab. En combinant Docker, DuckDNS (ou tout autre provider DNS) et les configs pré‑faites, vous gagnez du temps, de la sĂ©curitĂ© et de la flexibilitĂ©.

Pour aller plus loin

  • Documentation officielle de SWAG
  • Guide complet sur les providers DNS compatibles
  • Tutoriels Authelia
  • Exemple de stack complĂšte (Traefik, Portainer, etc.)
Back to Blog

Related posts

Read more »