Docker: Gérer des domaines personnalisés avec Traefik
Cette documentation fait partie du guide Routage HTTPS. Consultez le guide complet ici : Comment gérer le routage HTTP et le chiffrement TLS (HTTPS) dans vos conteneurs Docker.
👋 Bienvenue sur la documentation de Stackhero !
Stackhero propose une solution Docker cloud CaaS (Containers as a Service) prête à l'emploi offrant de nombreux avantages, notamment :
- Déployez facilement vos containers en production avec un simple
docker-compose up.- Nom de domaine personnalisable sécurisé avec HTTPS (par exemple, https://api.votre-entreprise.com, https://www.votre-entreprise.com, https://backoffice.votre-entreprise.com).
- Performance optimale et sécurité robuste grâce à une VM privée et dédiée.
- Mises à jour simplifiées en un clic.
Gagnez du temps et simplifiez-vous la vie : il suffit de 5 minutes pour essayer la solution d'hébergement cloud Docker CaaS de Stackhero et déployer vos containers en production !
Dans l'exemple précédent, nous avons utilisé le domaine par défaut <XXXXXX>.stackhero-network.com. En pratique, vous utiliserez probablement vos propres domaines d'entreprise ou de projet, tels que www.my-company.com ou api.my-project.io. La section ci-dessous explique comment configurer des domaines personnalisés.
Configurer votre premier domaine avec Traefik
Dans cet exemple, vous allez configurer le domaine api.my-project.io. Remplacez my-project.io par un domaine que vous possédez et api par votre sous-domaine souhaité.
Tout d'abord, mettez à jour les paramètres DNS de votre domaine pour que api.my-project.io pointe vers votre domaine <XXXXXX>.stackhero-network.com.
- Connectez-vous à votre fournisseur de domaine et accédez à votre configuration DNS.
- Créez une nouvelle entrée nommée
api(ou un autre sous-domaine de votre choix), définissez son type surCNAMEet définissez sa destination sur<XXXXXX>.stackhero-network.com.
Exemple de configuration DNS sur l'interface DNS de Cloudflare
Une fois le DNS configuré, vous pouvez le valider en exécutant :
host api.my-project.io
Vous devriez voir une réponse similaire à :
api.my-project.io is an alias for <XXXXXX>.stackhero-network.com
La propagation DNS peut prendre jusqu'à 24 heures selon votre fournisseur. Si la commande
hostne renvoie pas la réponse attendue, veuillez patienter et réessayer plus tard.
Ensuite, mettez à jour votre fichier docker-compose.yml avec la configuration suivante :
services:
api:
image: traefik/whoami
hostname: api
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.my-project.io`)" # Ajoutez votre domaine ici
- "traefik.http.services.api.loadbalancer.server.port=<PORT>" # Remplacez "<PORT>" par le port sur lequel votre API écoute
- "traefik.http.routers.api.tls.certresolver=letsencrypt"
N'oubliez pas de remplacer
api.my-project.iopar votre domaine réel dans le label TraefikHost.
Déployez votre conteneur avec :
docker-compose up -d
Puis visitez https://api.my-project.io. Vous devriez voir une page texte affichant le nom d'hôte de votre conteneur api.
Preuve que Traefik gère notre trafic HTTP avec chiffrement TLS pour notre nouveau domaine
Lors de la première création du conteneur, les certificats TLS peuvent prendre quelques secondes à générer. Si vous rencontrez une erreur TLS, attendez quelques secondes et actualisez la page pour laisser le temps aux certificats d'être générés.
Félicitations, vous avez maintenant configuré votre premier domaine personnalisé !
Comment rediriger un sous-domaine "www" vers votre domaine racine avec Traefik
Lors de la définition d'une URL de site web telle que my-company.com, il est judicieux de configurer également un sous-domaine "www". Cela garantit que les utilisateurs qui se connectent via www.my-company.com sont redirigés vers votre site principal et aide à éviter les problèmes de contenu dupliqué.
Dans l'exemple ci-dessous, my-company.com et www.my-company.com sont tous deux gérés. Les utilisateurs accédant à www.my-company.com sont redirigés vers my-company.com :
services:
frontend:
image: traefik/whoami
hostname: frontend
labels:
- "traefik.enable=true"
- "traefik.http.routers.frontend.rule=Host(`my-company.com`) || Host(`www.my-company.com`)" # Ajoutez les deux domaines ici
- "traefik.http.services.frontend.loadbalancer.server.port=<PORT>" # Remplacez "<PORT>" par le port sur lequel votre frontend écoute
- "traefik.http.routers.frontend.tls.certresolver=letsencrypt"
# Rediriger 'www.my-company.com' vers 'my-company.com' :
- 'traefik.http.routers.frontend.middlewares=redirect-www'
- "traefik.http.middlewares.redirect-www.redirectregex.regex=^https://www.my-company.com/(.*)"
- "traefik.http.middlewares.redirect-www.redirectregex.replacement=https://my-company.com/$${1}"
- "traefik.http.middlewares.redirect-www.redirectregex.permanent=true"
Router un chemin vers un conteneur spécifique avec Traefik
Supposons que vous ayez un conteneur dédié à votre site de documentation. Vous pourriez vouloir router https://my-company.com/docs vers ce conteneur tout en envoyant d'autres requêtes, telles que https://my-company.com/, vers votre conteneur frontend. L'exemple ci-dessous montre comment cela est accompli :
services:
documentations:
image: traefik/whoami
hostname: documentations
labels:
- "traefik.enable=true"
- "traefik.http.routers.documentations.rule=Host(`my-company.com`) && PathPrefix(`/docs`)" # Définir le préfixe de chemin ici
- "traefik.http.services.documentations.loadbalancer.server.port=<PORT>" # Remplacez "<PORT>" par le port sur lequel votre conteneur de documentation écoute
- "traefik.http.routers.documentations.tls.certresolver=letsencrypt"
frontend:
image: traefik/whoami
hostname: frontend
labels:
- "traefik.enable=true"
- "traefik.http.routers.frontend.rule=Host(`my-company.com`) || Host(`www.my-company.com`)"
- "traefik.http.services.frontend.loadbalancer.server.port=<PORT>" # Remplacez "<PORT>" par le port sur lequel votre frontend écoute
- "traefik.http.routers.frontend.tls.certresolver=letsencrypt"
# Rediriger 'www.my-company.com' vers 'my-company.com' :
- 'traefik.http.routers.frontend.middlewares=redirect-www'
- "traefik.http.middlewares.redirect-www.redirectregex.regex=^https://www.my-company.com/(.*)"
- "traefik.http.middlewares.redirect-www.redirectregex.replacement=https://my-company.com/$${1}"
- "traefik.http.middlewares.redirect-www.redirectregex.permanent=true"
Maintenant, visiter https://my-company.com/docs (ou tout sous-chemin tel que https://my-company.com/docs/something) affichera le contenu du conteneur documentations. D'autres chemins, par exemple https://my-company.com/help, seront servis par le conteneur frontend.
Définir un port de conteneur personnalisé dans Traefik
Par défaut, Traefik se connecte au premier port exposé du conteneur. Dans certains cas, vous pourriez avoir besoin de spécifier un port particulier. L'exemple ci-dessous montre comment définir un port personnalisé :
services:
frontend:
image: traefik/whoami
hostname: frontend
labels:
- "traefik.enable=true"
- "traefik.http.routers.frontend.rule=Host(`my-company.com`)"
- "traefik.http.routers.frontend.tls.certresolver=letsencrypt"
# Router le trafic de 'https://my-company.com' vers le conteneur 'frontend' sur le port 80
- "traefik.http.services.frontend.loadbalancer.server.port=80"