Docker: Tvarkykite pasirinktinius domenus su Traefik
Ši dokumentacija yra HTTPS maršrutizavimas vadovo dalis. Visą vadovą rasite čia: Kaip valdyti HTTP maršrutizavimą ir TLS šifravimą (HTTPS) jūsų Docker konteineriuose.
👋 Sveiki atvykę į Stackhero dokumentaciją!
Stackhero siūlo paruoštą naudoti Docker cloud CaaS (Containers as a Service) sprendimą, kuris suteikia daugybę privalumų, įskaitant:
- Lengvai diekite savo konteinerius į gamybą su paprastu
docker-compose up.- Pritaikomas domeno vardas su HTTPS apsauga (pavyzdžiui, https://api.jusu-imone.com, https://www.jusu-imone.com, https://backoffice.jusu-imone.com).
- Optimali veikla ir tvirta apsauga naudojant privačią ir dedikuotą VM.
- Paprasti atnaujinimai vienu paspaudimu.
Taupykite laiką ir supaprastinkite savo gyvenimą: tereikia 5 minučių išbandyti Stackhero Docker CaaS cloud hosting sprendimą ir diegti savo konteinerius į gamybą!
Ankstesniame pavyzdyje naudojome numatytąjį <XXXXXX>.stackhero-network.com domeną. Praktiškai greičiausiai naudosite savo įmonės ar projekto domenus, tokius kaip www.my-company.com ar api.my-project.io. Žemiau pateikta dalis paaiškina, kaip konfigūruoti pasirinktinius domenus.
Konfigūruokite savo pirmąjį domeną su Traefik
Šiame pavyzdyje konfigūruosite domeną api.my-project.io. Pakeiskite my-project.io į domeną, kurį turite, ir api į norimą subdomeną.
Pirmiausia atnaujinkite savo domeno DNS nustatymus, kad api.my-project.io nukreiptų į jūsų <XXXXXX>.stackhero-network.com domeną.
- Prisijunkite prie savo domeno teikėjo ir pasiekite savo DNS konfigūraciją.
- Sukurkite naują įrašą pavadinimu
api(arba kitą jūsų pasirinkto subdomeno), nustatykite jo tipą kaipCNAMEir nustatykite jo paskirtį kaip<XXXXXX>.stackhero-network.com.
DNS konfigūracijos pavyzdys Cloudflare DNS sąsajoje
Kai DNS sukonfigūruotas, galite jį patikrinti paleisdami:
host api.my-project.io
Turėtumėte pamatyti atsakymą, panašų į:
api.my-project.io is an alias for <XXXXXX>.stackhero-network.com
DNS propagacija gali užtrukti iki 24 valandų, priklausomai nuo jūsų teikėjo. Jei
hostkomanda negrąžina tikėtino atsakymo, palaukite ir bandykite dar kartą vėliau.
Tada atnaujinkite savo docker-compose.yml failą su šia konfigūracija:
services:
api:
image: traefik/whoami
hostname: api
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.my-project.io`)" # Pridėkite savo domeną čia
- "traefik.http.services.api.loadbalancer.server.port=<PORT>" # Pakeiskite "<PORT>" į portą, kuriame jūsų API klausosi
- "traefik.http.routers.api.tls.certresolver=letsencrypt"
Nepamirškite pakeisti
api.my-project.ioį savo tikrąjį domeną Traefik etiketėjeHost.
Diekite savo konteinerį su:
docker-compose up -d
Tada apsilankykite https://api.my-project.io. Turėtumėte pamatyti tekstinį puslapį, rodantį jūsų konteinerio hostname api.
Įrodymas, kad Traefik tvarko mūsų HTTP srautą su TLS šifravimu mūsų naujam domenui
Pirmą kartą kuriant konteinerį, TLS sertifikatai gali užtrukti kelias sekundes generuoti. Jei susiduriate su TLS klaida, palaukite kelias sekundes ir atnaujinkite puslapį, kad leistumėte laiką sertifikatams generuoti.
Sveikiname, dabar sukonfigūravote savo pirmąjį pasirinktą domeną!
Kaip nukreipti "www" subdomeną į jūsų pagrindinį domeną naudojant Traefik
Nustatant svetainės URL, pvz., my-company.com, gera idėja taip pat nustatyti "www" subdomeną. Tai užtikrina, kad vartotojai, prisijungiantys per www.my-company.com, yra nukreipiami į jūsų pagrindinę svetainę ir padeda išvengti pasikartojančio turinio problemų.
Žemiau pateiktame pavyzdyje tiek my-company.com, tiek www.my-company.com yra tvarkomi. Vartotojai, pasiekiantys www.my-company.com, yra nukreipiami į 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`)" # Pridėkite abu domenus čia
- "traefik.http.services.frontend.loadbalancer.server.port=<PORT>" # Pakeiskite "<PORT>" į portą, kuriame jūsų frontend klausosi
- "traefik.http.routers.frontend.tls.certresolver=letsencrypt"
# Nukreipti 'www.my-company.com' į '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"
Maršrutizuoti kelią į konkretų konteinerį su Traefik
Tarkime, kad turite konteinerį, skirtą jūsų dokumentacijos svetainei. Galbūt norėsite maršrutizuoti https://my-company.com/docs į šį konteinerį, tuo pačiu metu siunčiant kitas užklausas, pvz., https://my-company.com/, į jūsų frontend konteinerį. Žemiau pateiktas pavyzdys parodo, kaip tai pasiekiama:
services:
documentations:
image: traefik/whoami
hostname: documentations
labels:
- "traefik.enable=true"
- "traefik.http.routers.documentations.rule=Host(`my-company.com`) && PathPrefix(`/docs`)" # Nustatyti kelio priešdėlį čia
- "traefik.http.services.documentations.loadbalancer.server.port=<PORT>" # Pakeiskite "<PORT>" į portą, kuriame jūsų dokumentacijos konteineris klausosi
- "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>" # Pakeiskite "<PORT>" į portą, kuriame jūsų frontend klausosi
- "traefik.http.routers.frontend.tls.certresolver=letsencrypt"
# Nukreipti 'www.my-company.com' į '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"
Dabar, apsilankius https://my-company.com/docs (ar bet kuriame subkelyje, pvz., https://my-company.com/docs/something), bus rodomas turinys iš documentations konteinerio. Kiti keliai, pavyzdžiui, https://my-company.com/help, bus aptarnaujami frontend konteinerio.
Nustatyti pasirinktą konteinerio portą Traefik
Pagal numatytuosius nustatymus, Traefik jungiasi prie pirmojo konteinerio atidengto porto. Kai kuriais atvejais gali prireikti nurodyti konkretų portą. Žemiau pateiktas pavyzdys parodo, kaip nustatyti pasirinktą portą:
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"
# Maršrutizuoti srautą iš 'https://my-company.com' į 'frontend' konteinerį per portą 80
- "traefik.http.services.frontend.loadbalancer.server.port=80"