đ SWAG : Le Reverse Proxy Docker qui va rĂ©volutionner votre homelab !
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)
- Connectezâvous Ă lâinterface FreeboxâŻ:
- ParamĂštres de la Freebox â Gestion des ports
- CrĂ©ez une redirection de portâŻ:
| Port externe | Port interne | IP destination | Protocole |
|---|---|---|---|
| 443 (HTTPS) | 443 | 192.168.1.100 (exemple) | TCP |
| 80 (HTTP) | 80 | 192.168.1.100 | TCP |
đĄ 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
- Inscrivezâvous sur DuckDNS
- CrĂ©ez votre domaineâŻ:
monhomelab.duckdns.org - Notez votre token (il sera utilisé dans Docker)
Alternatives DNS providers
| Gratuit | Payant |
|---|---|
| DuckDNS | Cloudflare |
| FreeDNS | OVH |
| NoâIP | Gandi |
| 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 providerSUBDOMAINS=wildcardâŻ: gĂ©nĂšre un certificat pour tous les sousâdomainesDUCKDNSTOKENâŻ: token/API key du provider DNSONLY_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Úme | Vérification | Solution |
|---|---|---|
| Certificat non généré | docker logs swag | Vérifier le token DuckDNS et la connectivité internet |
| Port 443 fermé | nc -zv votre-ip 443 | Vérifier la redirection de port sur la box |
| Service inaccessible | curl -I https://homeassistant.monhomelab.duckdns.org | VĂ©rifier que le conteneur est dans le mĂȘme rĂ©seau Docker |
| DNS ne pointe pas | nslookup monhomelab.duckdns.org | Mettre Ă 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.)