Docker: Gestire domini personalizzati con Traefik
Questa documentazione fa parte della guida Routing HTTPS. Consulta la guida completa qui: Come gestire il routing HTTP e la crittografia TLS (HTTPS) nei tuoi container Docker.
👋 Benvenuti nella documentazione di Stackhero!
Stackhero offre una soluzione Docker cloud CaaS (Containers as a Service) pronta all'uso che fornisce numerosi vantaggi, tra cui:
- Distribuisci facilmente i tuoi container in produzione con un semplice
docker-compose up.- Nome di dominio personalizzabile protetto con HTTPS (ad esempio, https://api.tua-azienda.com, https://www.tua-azienda.com, https://backoffice.tua-azienda.com).
- Prestazioni ottimali e sicurezza robusta grazie a una VM privata e dedicata.
- Aggiornamenti senza sforzo con un solo clic.
Risparmia tempo e semplifica la tua vita: bastano 5 minuti per provare la soluzione di hosting cloud Docker CaaS di Stackhero e distribuire i tuoi container in produzione!
Nell'esempio precedente, abbiamo utilizzato il dominio predefinito <XXXXXX>.stackhero-network.com. In pratica, probabilmente utilizzerai i tuoi domini aziendali o di progetto, come www.my-company.com o api.my-project.io. La sezione seguente spiega come configurare domini personalizzati.
Configurare il tuo primo dominio con Traefik
In questo esempio, configurerai il dominio api.my-project.io. Sostituisci my-project.io con un dominio che possiedi e api con il tuo sottodominio desiderato.
Per prima cosa, aggiorna le impostazioni DNS del tuo dominio in modo che api.my-project.io punti al tuo dominio <XXXXXX>.stackhero-network.com.
- Accedi al tuo provider di dominio e accedi alla tua configurazione DNS.
- Crea una nuova voce chiamata
api(o un altro sottodominio a tua scelta), imposta il suo tipo suCNAMEe imposta la sua destinazione su<XXXXXX>.stackhero-network.com.
Esempio di configurazione DNS sull'interfaccia DNS di Cloudflare
Una volta configurato il DNS, puoi convalidarlo eseguendo:
host api.my-project.io
Dovresti vedere una risposta simile a:
api.my-project.io is an alias for <XXXXXX>.stackhero-network.com
La propagazione DNS può richiedere fino a 24 ore a seconda del tuo provider. Se il comando
hostnon restituisce la risposta prevista, attendi e riprova più tardi.
Successivamente, aggiorna il tuo file docker-compose.yml con la seguente configurazione:
services:
api:
image: traefik/whoami
hostname: api
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.my-project.io`)" # Aggiungi qui il tuo dominio
- "traefik.http.services.api.loadbalancer.server.port=<PORT>" # Sostituisci "<PORT>" con la porta su cui la tua API sta ascoltando
- "traefik.http.routers.api.tls.certresolver=letsencrypt"
Non dimenticare di sostituire
api.my-project.iocon il tuo dominio reale nell'etichetta TraefikHost.
Distribuisci il tuo container con:
docker-compose up -d
Poi visita https://api.my-project.io. Dovresti vedere una pagina di testo che mostra il nome host del tuo container api.
Prova che Traefik gestisce il nostro traffico HTTP con crittografia TLS per il nostro nuovo dominio
Alla prima creazione del container, i certificati TLS potrebbero richiedere alcuni secondi per essere generati. Se incontri un errore TLS, attendi qualche secondo e aggiorna la pagina per consentire il tempo necessario alla generazione dei certificati.
Congratulazioni, hai ora configurato il tuo primo dominio personalizzato!
Come reindirizzare un sottodominio "www" al tuo dominio principale usando Traefik
Quando si definisce un URL del sito web come my-company.com, è una buona idea configurare anche un sottodominio "www". Questo garantisce che gli utenti che si connettono tramite www.my-company.com siano reindirizzati al tuo sito principale e aiuta a evitare problemi di contenuto duplicato.
Nell'esempio seguente, sia my-company.com che www.my-company.com sono gestiti. Gli utenti che accedono a www.my-company.com sono reindirizzati a 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`)" # Aggiungi entrambi i domini qui
- "traefik.http.services.frontend.loadbalancer.server.port=<PORT>" # Sostituisci "<PORT>" con la porta su cui il tuo frontend sta ascoltando
- "traefik.http.routers.frontend.tls.certresolver=letsencrypt"
# Reindirizza 'www.my-company.com' a '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"
Instradare un percorso a un container specifico con Traefik
Supponiamo che tu abbia un container dedicato al tuo sito di documentazione. Potresti voler instradare https://my-company.com/docs a questo container mentre invii altre richieste, come https://my-company.com/, al tuo container frontend. L'esempio seguente mostra come questo viene realizzato:
services:
documentations:
image: traefik/whoami
hostname: documentations
labels:
- "traefik.enable=true"
- "traefik.http.routers.documentations.rule=Host(`my-company.com`) && PathPrefix(`/docs`)" # Definisci qui il prefisso del percorso
- "traefik.http.services.documentations.loadbalancer.server.port=<PORT>" # Sostituisci "<PORT>" con la porta su cui il tuo container di documentazione sta ascoltando
- "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>" # Sostituisci "<PORT>" con la porta su cui il tuo frontend sta ascoltando
- "traefik.http.routers.frontend.tls.certresolver=letsencrypt"
# Reindirizza 'www.my-company.com' a '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"
Ora, visitando https://my-company.com/docs (o qualsiasi sottopercorso come https://my-company.com/docs/something) verrà visualizzato il contenuto del container documentations. Altri percorsi, ad esempio https://my-company.com/help, saranno serviti dal container frontend.
Definire una porta container personalizzata in Traefik
Per impostazione predefinita, Traefik si connette alla prima porta esposta del container. In alcuni casi, potresti dover specificare una porta particolare. L'esempio seguente dimostra come definire una porta personalizzata:
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"
# Instrada il traffico da 'https://my-company.com' al container 'frontend' sulla porta 80
- "traefik.http.services.frontend.loadbalancer.server.port=80"