Kako integrirati Docker, Traefik i Portainer kao kompletan stack

Zadnje ažuriranje: 7 ožujka 2026
  • Traefik djeluje kao dinamički obrnuti proxy i rješava TLS certifikate, dok Portainer nudi grafičko sučelje za upravljanje Dockerom i Swarmom.
  • Kombinacija traefik.yml, dynamic.yml i docker-compose.yml omogućuje vam definiranje ulaznih točaka, sigurnosnog middlewarea i HTTP/HTTPS usmjeravanja temeljenog na oznakama.
  • U scenarijima samostalnog Dockera ili Swarma, jednostavno pridružite servise proxy mreži i označite ih kako bi ih Traefik mogao sigurno otkriti i izložiti.
  • Korištenje Let's Encrypta, namjenskih mreža i osnovne autentifikacije na nadzornoj ploči konsolidira robusno okruženje za implementaciju više aplikacija na jednom poslužitelju.

Docker Portainer Traefik

Postavljanje modernog paketa s Dockerom, Traefikom i Portainerom trenutno je jedan od najlakših načina za upravljanje kontejnerima na jednom poslužitelju i izlaganje više servisa putem HTTPS-a bez zaglibljivanja u konfiguraciji. Ljepota toga je u tome što Traefik djeluje kao dinamički obrnuti proxy, dok Portainer pruža vrlo jednostavno web sučelje za upravljanje Dockerom i, ako želite, Swarmom.

U ovom članku vidjet ćete kako postavljanje Traefika kao obrnutog proxyja ispred Portainera U "klasičnom" Docker (samostalnom) scenariju i Docker Swarm klasteru, kako integrirati TLS (samopotpisani ili Let's Encrypt) i koje su konfiguracijske datoteke uključene (traefik.yml, dynamic.yml y docker-compose.yml) i neke uobičajene trikove s middlewareom, mrežama i tipičnim problemima označavanja u Traefiku.

Koje uloge Docker, Traefik i Portainer imaju u arhitekturi?

U ovoj vrsti postavljanja, Docker je osnovni sloj na kojem se kontejneri izvode, Traefik djeluje kao obrnuti proxy i uravnoteživač opterećenja koji prima sve HTTP/HTTPS zahtjeve na portovima 80 i 443 i šalje ih u odgovarajući kontejner, a Portainer pruža grafičko sučelje za upravljanje slikama, kontejnerima, volumenima, mrežama i Docker ili Swarm stogovima.

Ideja je imati jedan host s Dockerom gdje Traefik se nalazi na "ulazu"slušajte na ulaznim točkama web (80) y websecure (443), rješava TLS certifikate (obično s Let's Encrypt) i, zahvaljujući integraciji s Docker pružateljem, automatski otkriva usluge koje izlažete dodavanjem oznaka kontejnerima.

S druge strane, Portainer radi kao samo još jedan kontejner, ali izložen kroz određena poddomena, na primjer portainer.tudominio.com, zaštićen TLS-om i, ako je potrebno, iza dodatnog međuprograma za autentifikaciju, osim Portainerove vlastite prijave. Sve je to orkestrirano s doker-nove poruke koja definira Traefika, Portainera i zajedničku mrežu tipa proxy.

Jasna prednost ovog pristupa je što možete implementirati nove usluge jednostavnim dodavanjem oznaka svojim kontejnerima: Traefik detektira promjenu u Dockeru, stvara usmjerivače, usluge i middleware u hodu, i za nekoliko sekundi imate novu poddomenu ili rutu pokrenutu i u funkciji bez ručnog diranja statičkih konfiguracijskih datoteka.

Statička konfiguracija Traefika: traefik.yml

Traefikova statička konfiguracija obično se pohranjuje u datoteci poput traefik.ymlkoji je montiran unutar kontejnera. Ovdje je definiran nadzorna ploča, ulazne točke, pružatelji usluga i razrješivač certifikata Šifrirajmo, između ostalog.

Tipična YAML konfiguracija započinje aktiviranjem API-ja i kontrolne ploče nečim poput api: dashboard: trueTo omogućuje pristup web sučelju gdje možete pregledavati usmjerivače, usluge i middleware. Ova ploča nije autentificirana prema zadanim postavkama, pa ćemo kasnije vidjeti kako je osigurati osnovnom autentifikacijom iz dinamičke konfiguracije.

Zatim se definiraju ulazne točke. Obično postoje ulazna točka web u luci 80 i druge websecure u 443. U web Automatsko preusmjeravanje obično je konfigurirano za websecuretako da se svaki HTTP pristup preusmjerava na HTTPS:

Tipičan nacrt bi uključivao odjeljak http.redirections.entryPoint.to: websecure prisiliti to preusmjeravanje i centralizirati sav šifrirani promet na sigurnoj ulaznoj točki.

u websecure Naznačeno je da se treba koristiti TLS i navedena je poveznica. certResolver (na primjer letsencrypt) koji će biti odgovoran za automatsko upravljanje certifikatima. Sve to podržava VRHUNAC, što je protokol koji Let's Encrypt koristi za izdavanje i obnavljanje certifikata.

U bloku usluga Docker provider je konfiguriran i pokazuje na socket. unix:///var/run/docker.socks jednom ključnom opcijom: exposedByDefault: falseS ovim, Traefik ne objavljuje sve kontejnere prema zadanim postavkama; samo one koji nose oznaku traefik.enable=trueTakođer možete konfigurirati pružatelja usluga datoteka (file) za učitavanje dodatne dinamičke konfiguracije, na primjer, /configurations/dynamic.yml.

Konačno, statička datoteka obično uključuje odjeljak certificatesResolversgdje je definiran ACME resolver: registracijska e-pošta, datoteka za pohranu (obično acme.json), tip ključa (na primjer EC384) i metoda validacije (na primjer httpChallenge na ulaznoj točki webVažno je da postavite pravu e-poštu u ovom odjeljku jer ga Let's Encrypt koristi za obavijesti i obnove; ako ostavite lažnu ili neispravnu vrijednost, možete naići na pogreške prilikom pokretanja Traefik kontejnera.

  Što je Apache: Nevidljivi motor koji pokreće web

Uz ovu YAML konfiguraciju, postoje i implementacije koje koriste TOML format (traefik.toml)Ali logika je ista: oni dijele certifikate resolvera (na primjer [certificatesResolvers.main.acme]), definirajte izazove (kao što su dnsChallenge s provider = "route53") i dodajte zadane TLS opcije, kao što su sila minVersion = "VersionTLS13" ili konfigurirajte popis cipherSuites dozvoljeno.

Docker arhitektura Traefik Portainer

Dinamička konfiguracija: middleware, TLS i sigurnost

Dinamički dio Traefika obično ide u datoteku poput dynamic.yml, učitava ga davatelj datoteke. Ovdje definirate middleware i TLS opcije što se može mijenjati bez ponovnog pokretanja Traefik kontejnera, što je vrlo korisno za podešavanje sigurnosti u hodu.

Tipičan slučaj je, na primjer, izrada middlewarea zaglavlja secureHeaderskoji dodaje pravila vezana uz HSTS i obavezno korištenje HTTPS-a. U YAML-u možete pronaći parametre poput sslRedirect: true, forceSTSHeader: true, stsIncludeSubdomains: true, stsPreload: true a stsSeconds visoko (na primjer, godina u sekundama). To jača sigurnost prometa sa strane preglednika.

Drugi uobičajeni middleware je onaj za osnovnu autentifikaciju, na primjer user-auth Tip basicAuth, gdje je popis korisnika deklariran u formatu usuario:hashHash se obično generira pomoću htpasswd i ugrađen je u datoteku. Ovaj middleware obično je povezan s Traefik usmjerivačem nadzorne ploče tako da, osim HTTPS pristupa, zahtijeva korisničko ime i lozinku.

Unutar iste dinamičke konfiguracije uobičajeno je vidjeti blok tls.options s zadanim profilom (default) gdje su postavljene podržane šifre i minimalna TLS verzija, na primjer VersionTLS12U nekim implementacijama definirano je nekoliko opcija (na primjer, profil pod nazivom tls12 i druge default) prilagoditi razinu sigurnosti različitim uslugama ako je potrebno.

U okruženjima gdje je poželjno koristiti TLS također interno Između Traefika i backend servisa (poput Portainera) može nastati problem ako ti servisi nemaju certifikat koji prepoznaje javni CA. Tu dolazi do izražaja ta opcija. insecureSkipVerify, koji je konfiguriran pod providers.http.tls ili u odgovarajućim TLS opcijama, omogućuje Traefiku da zaobiđe validaciju pozadinskih certifikata. Ovo je korisno za laboratorijska okruženja ili interne samopotpisane certifikate, ali treba se koristiti s oprezom jer olakšava provjeru.

Praktičan detalj: datoteka dynamic.yml Može se uređivati ​​u hodu.Traefik ponovno učitava dinamičku konfiguraciju bez potrebe za ponovnim pokretanjem, tako da možete dodati ili ukloniti middleware, promijeniti sigurnosne zaglavlja ili izmijeniti osnovnu autentifikaciju bez utjecaja na dostupnost proxyja.

docker-compose s Traefikom i Portainerom u samostalnom Dockeru

U scenariju s golim Dockerom, bez Swarma, najčešća stvar koju treba učiniti je pokrenuti Traefik i Portainer s jednim docker-compose.yml koja definira i usluge i dijeljenu mrežu tipa mosta koja se naziva, na primjer, proxy.

Usluga Traefik Obično koristi službenu sliku, na primjer traefik:latest ili određenu verziju kao što je traefik:v3.4Portovi su mapirani. 80 i 443 za web promet i, u nekim primjerima, port 8080 za interni prikaz upravljačke ploče. Osim toga, dodaje se opcija restart: unless-stopped a sigurnost je pojačana s security_opt: - no-new-privileges:true kako bi se smanjio rizik od eskalacije privilegija unutar kontejnera.

Što se tiče volumena, Traefik treba montirati Docker socket samo za čitanje (/var/run/docker.sock:/var/run/docker.sock:ro) za otkrivanje kontejnera, statičke datoteke traefik.yml i direktorij u koji će se spremiti dinamička konfiguracija (./traefik-data/configurations:/configurationsDatoteka je također montirana. acme.jsonOvdje Traefik pohranjuje certifikate koje je izdao Let's Encrypt. Ova datoteka se stvara na hostu i dodjeljuju joj se dozvole. 600 tako da ga samo odgovarajući korisnik može čitati i pisati; ako ga ostavite s 644, Traefik se obično žali.

Ključ Traefikove magije je u oznake uslugaIzmeđu ostalog, naći ćete: traefik.enable=true (kako bi Docker provider izložio ovu uslugu), traefik.docker.network=proxy (označava koju mrežu Traefik treba koristiti za komunikaciju s kontejnerom) i usmjerivač poput traefik.http.routers.traefik-secure, s oznakama koje definiraju njegovu ulaznu točku (websecure), pravilo domaćina (na primjer Host(`traefik.tudominio.com`)), povezana usluga (api@internal) i međuprogram za autentifikaciju (user-auth@file).

  Potpuni vodič za optimizaciju Linux servera

Usluga prijevoznik u istom docker-compose.yml općenito koristi portainer/portainer-ce:latest (ili Enterprise izdanje ako imate licencu). Montirani su slični volumeni: Docker socket, mapa podataka (./portainer-data:/data) i često također /etc/localtime tako da nasljeđuje vremensku zonu domaćina.

Portainerove etikete registriraju ga kod Traefika: traefik.enable=true, traefik.docker.network=proxyruter tog tipa traefik.http.routers.portainer-secure s ulaznom točkom websecure i pravilo domaćina poput Host(`portainer.tudominio.com`)Dodatno, definirana je usluga koju Traefik treba koristiti, pokazujući na interni port Portainera, na primjer s traefik.http.services.portainer.loadbalancer.server.port=9000.

Sa svim ovim u tijeku, nakon lansiranja docker compose up -d U direktoriju stack, Traefik preuzima slike i stvara mrežu. proxy Ako je deklariran kao vanjski i izlaže obje ploče u konfiguriranim poddomenama, s Automatski HTTPS zahvaljujući Let's EncryptuOd tog trenutka nadalje, dodavanje novih usluga svodi se na kloniranje vašeg projekta, dodavanje nekoliko Traefik oznaka i povezivanje s mrežom. proxy.

Scenarij Docker Swarma: Portainer i Traefik u klasteru

Kada aktivirate Docker Swarm, stvari se malo mijenjaju jer se usluge raspoređuju kao stogovi, a mreže su obično temeljene na prekrivanju. Međutim, temeljna logika s Traefikom i Portainerom vrlo je slična: Traefik i dalje djeluje kao obrnuti proxy i dinamički otkrivač usluga, a Portainer može raditi i u samostalnom načinu rada i u načinu rada Portainer + agent za upravljanje udaljenim čvorovima unutar klastera.

U tipičnom Swarm raspoređivanju, stog se stvara prije nego što se primijeni. dvije prekrivajuće mreže koji će Traefik koristiti za usmjeravanje prometa između čvorova. Osim toga, stvara se volumen za pohranu podataka Portainera (na primjer) portainer_data) i, ako vam treba, jedan za acme.json ili direktorij u kojem Traefik pohranjuje certifikate i konfiguraciju.

El docker-compose.yml (koji se zatim odvija s docker stack deploy koristeći, na primjer, -c portainer.yml) obično definira dvije usluge: Agent za prijenos tereta, koji se izvodi u načinu rada global na svim Linux čvorovima i glavna Portainer usluga (CE ili EE), koja obično ostaje u repliciranom načinu rada s ograničenjem da se pokreće samo na upraviteljima.

Portainer agent montira Docker socket i direktorij volumena (/var/lib/docker/volumes) kako bi mogao pregledati resurse. Povezuje se s prekrivajućom mrežom koju će dijeliti s Traefikom, na primjer traefik_publicGlavna usluga Portainer može se konfigurirati za komunikaciju s agentom putem TCP-a (tcp://tasks.agent:9001) i, zapravo, u nekim primjerima ta je naredba prikazana s --tlsskipverify komentirao, kako bi se preskočila TLS provjera ako je potrebno.

Na istom ili drugom stogu, Traefik se pokreće s Docker providerom u Swarm načinu rada (swarmMode = true u TOML-u ili ekvivalentnoj opciji u zastavicama), promatrajući označene usluge. Njegova konfiguracija uključuje certificatesResolvers.main.acme za Let's Encrypt, a dnsChallenge s dobavljačem kao što je Ruta53 Ako želite provjeriti valjanost certifikata putem DNS-a i bloka tls.options gdje je, na primjer, prisiljen minVersion = "VersionTLS13" za zadani profil i definiran je eksplicitni popis cipherSuites za TLS 1.2 profil.

Portainerove etikete u Swarmu slijede istu filozofiju: traefik.enable=trueruter poput traefik.http.routers.portainer s Host(`portainer.midominio.com`), traefik.http.routers.portainer.entrypoints=https (o websecure (prema nazivu), i traefik.http.routers.portainer.tls=true za omogućavanje TLS-a na tom usmjerivaču. Osim toga, možete odrediti certresolver s traefik.http.routers.portainer.tls.certresolver=main i backend shemu ako usluga interno koristi HTTPS s traefik.http.services.portainer.loadbalancer.server.scheme=https.

U Traefik debug logovima u Swarmu vidjet ćete generiranu konfiguraciju: usmjerivači poput api y portainer, otkrivene usluge (na primjer portainer en http://10.0.1.12:9000 i uslugu traefik (pokazuje na port 8080 nadzorne ploče) i, ako postoji problem s loše definiranim oznakama, poruke poput "Nije moguće definirati naziv usluge za usmjerivač: previše usluga"što obično ukazuje na to da postoji sukob ili dupliciranje usluga povezanih s usmjerivačem.

Minimalni primjer: whoami, rute i TLS s Traefikom

Prije nego što u jednadžbu uvedemo Portainer, prilično je praktično isprobati Traefik s vrlo jednostavnim pozadinskim programom, kao što je prikazano na slici. traefik/whoamikoji vraća informacije o zahtjevu. To vam pomaže da provjerite je li Traefik ispravno konfiguriran i da pravila usmjeravanja rade.

Un docker-compose.yml osnovno može uključivati ​​uslugu traefik sa slikom traefik:v3.4, montiranje Docker socketa i definiranje boot flag-ova kao --providers.docker=true, --providers.docker.exposedbydefault=false, --providers.docker.network=proxy i ulazna točka --entryPoints.web.address=:80Portovi 80 i 8080 se oglašavaju na hostu i stvara se mreža. proxy koji će također koristiti spremnik whoami.

Usluga whoami Počinje na istoj mreži i označen je s traefik.enable=trueZatim se usmjerivač definira s oznakom traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`) i naznačeno je da je vaša ulazna točka webAko podnesete zahtjev s curl -H "Host: whoami.docker.localhost" http://localhost/Vidjet ćete odgovor s nazivom hosta, IP adresama, zaglavljima i tako dalje, što potvrđuje da Traefik ispravno usmjerava.

  Greška 404 nije pronađena: Što je to, uzroci, utjecaj na vašu web stranicu i kako je popraviti.

Odatle je jednostavno dodajte usmjeravanje po putovimaNa primjer, možete stvoriti još jednu uslugu. whoami-api s istom slikom, na istoj mreži i označiti je pravilom tipa Host(`whoami.docker.localhost`) && PathPrefix(`/api`)Dakle, korijen / ići whoami original i zahtjevi za /api poslužit će im whoami-apiTo možete provjeriti slanjem zahtjeva na / već /api s istim domaćinom.

Za aktiviranje TLS U ovom lokalnom okruženju, jedna od mogućnosti je generiranje samopotpisanog certifikata za domenu. *.docker.localhost s opensslIzrađujete direktorij certs, generirate local.key y local.crt, a zatim dodate dinamičku datoteku (na primjer dynamic/tls.yml) s odjeljkom tls: i rute certFile y keyFile pokazujući na te datoteke.

Zatim ažurirate definiciju Traefik usluge u docker-compose.yml za montiranje mape ./certs i mapu ./dynamic unutar kontejnera aktivirate sigurni API s --api.dashboard=true, stvarate ulaznu točku websecure (--entryPoints.websecure.address=:443) i omogućite TLS tamo s --entryPoints.websecure.http.tls=trueTakođer označavate usmjerivač na nadzornoj ploči i usmjerivače od whoami da ih koriste websecure i imam tls=true.

Nakon što se pokrene, moći ćete pristupiti https://whoami.docker.localhost/ i na Traefik ploču sa samopotpisanim certifikatom, prihvaćajući sigurnosno upozorenje preglednika. Ovo iskustvo je vrlo slično onome što ćete kasnije imati u produkciji s Let's Encryptom, ali bez oslanjanja na javne DNS poslužitelje.

Najbolje prakse, implementacija aplikacija i rješavanje tipičnih problema

Jedan obrazac koji se ponavlja u svim ovim primjerima je taj da Traefik uvelike pojednostavljuje implementaciju novih aplikacijaNakon što imate svoj osnovni paket (Traefik + Portainer + mreža) proxy (+ certifikati), dodavanje nove usluge obično se svodi na:

Klonirajte projekt ili kopirajte svoj docker-compose.yml na poslužitelj, usmjerite poddomenu na IP adresu hosta pomoću zapis A u vašem DNS-u (na primjer app.tudominio.com), a zatim dodajte ključne oznake usluzi: traefik.enable=true, traefik.docker.network=proxy i usmjerivač s pravilom hosta za tu poddomenu, koji određuje sigurnu ulaznu točku websecure i usluga s ispravnim internim portom.

Mnogi tutorijali bi prikazali, na primjer, implementaciju male aplikacije FastAPI Odvojeno: dodaju se četiri oznake koje osiguravaju spajanje s mrežom proxy u odjeljku networks del docker-compose.ymli nakon što učiniš docker compose up -d Aplikacija se automatski pojavljuje na Traefik nadzornoj ploči s omogućenim TLS-om. Traefikovo automatsko otkrivanje znači da ne morate ni prilagođavati njegove statičke postavke.

Kako bi sve prošlo glatko, važno je obratiti pozornost na nekoliko detalja: Ne koristite isti identifikator usmjerivača U raznim aplikacijama provjerite je li sa svakim usmjerivačem povezana samo jedna usluga (izbjegavajući pogrešku "previše usluga"), koristite dosljedne nazive mreža (na primjer, proxy na svim stogovima koje želite izložiti), a ako koristite Let's Encrypt, provjerite da acme.json Ima dozvole 600 i konfigurirana e-pošta je valjana.

U Swarm okruženjima, provjerite i uključuje li Traefik konfiguracija Docker provider. swarmMode=true y watch=truei da ograničenja usluga (na primjer node.role == manager (za Portainer) nisu u sukobu s mjestom gdje je Traefik raspoređen. Zapisnici o otklanjanju pogrešaka su vrlo opširni, ali su ključni za lociranje problema s usmjeravanjem ili TLS-om.

Kombinacijom Dockera, Traefika i Portainera možete postaviti potpuno lagano orkestracijsko okruženje na jednom poslužitelju, s grafičkim nadzornim pločama, automatskim certifikatima i vrlo brzim tokom implementacije, gdje se dodavanje, ažuriranje ili uklanjanje usluga svodi na podešavanje nekoliko redaka YAML-a i prepuštanje Traefiku da obavi prljavi posao obrnutog proxyinga i TLS-a.