Docker: Aangepaste domeinen beheren met Traefik
Deze documentatie maakt deel uit van de HTTPS-routing-gids. Bekijk de volledige gids hier: Hoe HTTP-routing en TLS-encryptie (HTTPS) in uw Docker-containers te beheren.
Welkom bij de Stackhero-documentatie
Stackhero biedt een gebruiksklaar Docker cloud CaaS (Containers as a Service) platform, ontworpen voor snelle en betrouwbare containerdeployments:
- Zet uw containers direct in productie met slechts één
docker-compose up. Er is geen extra configuratie nodig: start gewoon uw containers.- Kies uw eigen domeinnaam, automatisch beveiligd met HTTPS (bijvoorbeeld: https://api.uw-bedrijf.com, https://www.uw-bedrijf.com of https://backoffice.uw-bedrijf.com).
- Profiteer van hoge prestaties en sterke beveiliging op een privé, dedicated infrastructuur.
- Voer updates uit met één klik voor eenvoudige, moeiteloze onderhoud.
Uw containers kunnen binnen ongeveer vijf minuten live in productie zijn. Stackhero beheert de infrastructuur, updates en beveiliging voor u, zodat u zich kunt richten op het leveren van uw applicaties. Lees meer over Docker CaaS cloud hosting.
In het vorige voorbeeld hebben we het standaarddomein <XXXXXX>.stackhero-network.com gebruikt. In de praktijk zult u waarschijnlijk uw eigen bedrijfs- of projectdomeinen gebruiken, zoals www.my-company.com of api.my-project.io. De onderstaande sectie legt uit hoe u aangepaste domeinen configureert.
Uw eerste domein configureren met Traefik
In dit voorbeeld configureert u het domein api.my-project.io. Vervang my-project.io door een domein dat u bezit en api door uw gewenste subdomein.
Werk eerst uw domein-DNS-instellingen bij zodat api.my-project.io verwijst naar uw <XXXXXX>.stackhero-network.com-domein.
- Log in bij uw domeinprovider en ga naar uw DNS-configuratie.
- Maak een nieuwe vermelding genaamd
api(of een ander subdomein naar keuze), stel het type in opCNAMEen stel de bestemming in op<XXXXXX>.stackhero-network.com.
Voorbeeld van DNS-configuratie op Cloudflare DNS-interface
Zodra de DNS is geconfigureerd, kunt u deze valideren door het volgende uit te voeren:
host api.my-project.io
U zou een antwoord moeten zien dat lijkt op:
api.my-project.io is an alias for <XXXXXX>.stackhero-network.com
DNS-propagatie kan tot 24 uur duren, afhankelijk van uw provider. Als de
host-opdracht niet het verwachte antwoord geeft, wacht dan en probeer het later opnieuw.
Werk vervolgens uw docker-compose.yml-bestand bij met de volgende configuratie:
services:
api:
image: traefik/whoami
hostname: api
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.my-project.io`)" # Voeg hier uw domein toe
- "traefik.http.services.api.loadbalancer.server.port=<PORT>" # Vervang "<PORT>" door de poort waarop uw API luistert
- "traefik.http.routers.api.tls.certresolver=letsencrypt"
Vergeet niet
api.my-project.iote vervangen door uw werkelijke domein in het Traefik-labelHost.
Implementeer uw container met:
docker-compose up -d
Bezoek vervolgens https://api.my-project.io. U zou een tekstpagina moeten zien die de hostnaam van uw container api weergeeft.
Bewijs dat Traefik ons HTTP-verkeer met TLS-encryptie voor ons nieuwe domein beheert
Bij de eerste creatie van de container kunnen TLS-certificaten enkele seconden duren om te genereren. Als u een TLS-fout tegenkomt, wacht dan een paar seconden en vernieuw de pagina om tijd te geven voor het genereren van de certificaten.
Gefeliciteerd, u heeft nu uw eerste aangepaste domein geconfigureerd!
Hoe een "www"-subdomein naar uw hoofddomein te redirecten met Traefik
Bij het definiëren van een website-URL zoals my-company.com, is het een goed idee om ook een "www"-subdomein in te stellen. Dit zorgt ervoor dat gebruikers die verbinding maken via www.my-company.com worden doorgestuurd naar uw hoofdsite en helpt dubbele inhoudsproblemen te voorkomen.
In het onderstaande voorbeeld worden zowel my-company.com als www.my-company.com behandeld. Gebruikers die www.my-company.com bezoeken, worden doorgestuurd naar 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`)" # Voeg beide domeinen hier toe
- "traefik.http.services.frontend.loadbalancer.server.port=<PORT>" # Vervang "<PORT>" door de poort waarop uw frontend luistert
- "traefik.http.routers.frontend.tls.certresolver=letsencrypt"
# Redirect 'www.my-company.com' naar '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"
Een pad naar een specifieke container routeren met Traefik
Stel dat u een container heeft die is gewijd aan uw documentatiesite. U wilt misschien https://my-company.com/docs naar deze container routeren terwijl u andere verzoeken, zoals https://my-company.com/, naar uw frontend-container stuurt. Het onderstaande voorbeeld laat zien hoe dit wordt bereikt:
services:
documentations:
image: traefik/whoami
hostname: documentations
labels:
- "traefik.enable=true"
- "traefik.http.routers.documentations.rule=Host(`my-company.com`) && PathPrefix(`/docs`)" # Definieer hier het padprefix
- "traefik.http.services.documentations.loadbalancer.server.port=<PORT>" # Vervang "<PORT>" door de poort waarop uw documentatiecontainer luistert
- "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>" # Vervang "<PORT>" door de poort waarop uw frontend luistert
- "traefik.http.routers.frontend.tls.certresolver=letsencrypt"
# Redirect 'www.my-company.com' naar '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"
Nu zal het bezoeken van https://my-company.com/docs (of een subpad zoals https://my-company.com/docs/something) inhoud van de documentations-container weergeven. Andere paden, bijvoorbeeld https://my-company.com/help, worden bediend door de frontend-container.
Een aangepaste containerpoort definiëren in Traefik
Standaard maakt Traefik verbinding met de eerste blootgestelde poort van de container. In sommige gevallen moet u mogelijk een specifieke poort opgeven. Het onderstaande voorbeeld laat zien hoe u een aangepaste poort definieert:
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"
# Verkeer van 'https://my-company.com' naar de 'frontend'-container op poort 80 routeren
- "traefik.http.services.frontend.loadbalancer.server.port=80"