Πώς να ενσωματώσετε το Docker, το Traefik και το Portainer ως μια ολοκληρωμένη στοίβα

Τελευταία ενημέρωση: 7 Μαρτίου 2026
Συγγραφέας: TecnoDigital
  • Το Traefik λειτουργεί ως δυναμικός αντίστροφος διακομιστής μεσολάβησης και επιλύει πιστοποιητικά TLS, ενώ το Portainer προσφέρει μια γραφική διεπαφή για τη διαχείριση του Docker και του Swarm.
  • Ο συνδυασμός των traefik.yml, dynamic.yml και docker-compose.yml σάς επιτρέπει να ορίσετε σημεία εισόδου, middleware ασφαλείας και δρομολόγηση HTTP/HTTPS βάσει ετικετών.
  • Σε σενάρια Docker standalone ή Swarm, απλώς συνδέστε υπηρεσίες στο δίκτυο proxy και προσθέστε τες ετικέτες, ώστε το Traefik να μπορεί να τις ανακαλύψει και να τις εκθέσει με ασφάλεια.
  • Η χρήση του Let's Encrypt, των αποκλειστικών δικτύων και του βασικού ελέγχου ταυτότητας στον πίνακα ελέγχου ενοποιεί ένα ισχυρό περιβάλλον για την ανάπτυξη πολλαπλών εφαρμογών σε έναν μόνο διακομιστή.

Docker Portainer Traefik

Η δημιουργία μιας σύγχρονης στοίβας με Docker, Traefik και Portainer είναι σήμερα ένας από τους ευκολότερους τρόπους για να διαχειρίζεστε κοντέινερ σε έναν μόνο διακομιστή και να εκθέτετε πολλαπλές υπηρεσίες με HTTPS χωρίς να κολλάτε στη διαμόρφωση. Η ομορφιά του είναι ότι το Traefik λειτουργεί ως δυναμικός αντίστροφος διακομιστής μεσολάβησης, ενώ το Portainer παρέχει μια πολύ απλή διεπαφή ιστού για τη διαχείριση του Docker και, αν θέλετε, και του Swarm.

Σε αυτό το άρθρο θα δείτε πώς τοποθέτηση του Traefik ως αντίστροφου πληρεξουσίου μπροστά από το Portainer Τόσο σε ένα "κλασικό" σενάριο Docker (αυτόνομο) όσο και σε ένα σύμπλεγμα Docker Swarm, ο τρόπος ενσωμάτωσης του TLS (αυτο-υπογεγραμμένο ή Let's Encrypt) και ποια αρχεία διαμόρφωσης χρησιμοποιούνται (traefik.yml, dynamic.yml y docker-compose.yml) και μερικά συνηθισμένα κόλπα με το middleware, τα δίκτυα και τα τυπικά προβλήματα ετικετών στο Traefik.

Ποιους ρόλους έχουν οι Docker, Traefik και Portainer στην αρχιτεκτονική;

Σε αυτόν τον τύπο ρύθμισης, το Docker είναι το βασικό επίπεδο όπου εκτελούνται τα κοντέινερ, το Traefik λειτουργεί ως αντίστροφος διακομιστής μεσολάβησης και εξισορροπητής φορτίου που λαμβάνει όλα τα αιτήματα HTTP/HTTPS στις θύρες 80 και 443 και τα στέλνει στο κατάλληλο κοντέινερ, και το Portainer παρέχει μια γραφική διεπαφή για τη διαχείριση εικόνων, κοντέινερ, τόμων, δικτύων και στοίβων Docker ή Swarm.

Η ιδέα είναι να έχουμε έναν μόνο κεντρικό υπολογιστή με το Docker όπου Το Traefik βρίσκεται στην «πύλη»: ακούστε τα σημεία εισόδου web (80) και websecure (443), επιλύει πιστοποιητικά TLS (συνήθως με το Let's Encrypt) και, χάρη στην ενσωμάτωση με τον πάροχο Docker, ανακαλύπτει αυτόματα τις υπηρεσίες που εκθέτετε προσθέτοντας ετικέτες στα κοντέινερ.

Από την άλλη πλευρά, το Portainer τρέχει σαν ένα ακόμα κοντέινερ, αλλά εκτίθεται μέσα από ένας συγκεκριμένος υποτομέας, για παράδειγμα portainer.tudominio.com, προστατευμένο από TLS και, εάν επιθυμείται, πίσω από ένα πρόσθετο middleware ελέγχου ταυτότητας πέρα ​​από τα στοιχεία σύνδεσης του Portainer. Όλα αυτά ενορχηστρώνονται με ένα docker-compose που ορίζει τον Traefik, τον Portainer και το κοινό δίκτυο τύπου proxy.

Ένα σαφές πλεονέκτημα αυτής της προσέγγισης είναι ότι μπορείτε να αναπτύξετε νέες υπηρεσίες απλώς προσθέτοντας ετικέτες στα κοντέινερ σας: Το Traefik ανιχνεύει την αλλαγή στο Docker, δημιουργεί δρομολογητές, υπηρεσίες και middleware εν κινήσει και σε δευτερόλεπτα έχετε ένα νέο υποτομέα ή διαδρομή σε λειτουργία χωρίς να αγγίξετε χειροκίνητα τα στατικά αρχεία διαμόρφωσης.

Στατική διαμόρφωση Traefik: traefik.yml

Η στατική διαμόρφωση του Traefik αποθηκεύεται συνήθως σε ένα αρχείο όπως traefik.ymlτο οποίο είναι τοποθετημένο μέσα στο κοντέινερ. Εδώ ορίζεται πίνακας ελέγχου, σημεία εισόδου, πάροχοι και αναλυτής πιστοποιητικών Ας κρυπτογραφήσουμε, μεταξύ άλλων.

Μια τυπική διαμόρφωση YAML ξεκινά ενεργοποιώντας το API και τον πίνακα ελέγχου με κάτι σαν api: dashboard: trueΑυτό επιτρέπει την πρόσβαση στη διεπαφή ιστού όπου μπορείτε να δείτε δρομολογητές, υπηρεσίες και middleware. Αυτός ο πίνακας δεν έχει έλεγχο ταυτότητας από προεπιλογή, επομένως θα δούμε αργότερα πώς να τον ασφαλίσουμε με βασικό έλεγχο ταυτότητας από τη δυναμική διαμόρφωση.

Στη συνέχεια, ορίζονται τα σημεία εισόδου. Κανονικά, υπάρχουν ένα σημείο εισόδου web στη θύρα 80 και άλλες websecure στο 443. Στο web Μια αυτόματη ανακατεύθυνση συνήθως έχει ρυθμιστεί ώστε να websecureέτσι ώστε οποιαδήποτε πρόσβαση HTTP να ανακατευθύνεται στο HTTPS:

Ένα τυπικό περίγραμμα θα περιελάμβανε μια ενότητα http.redirections.entryPoint.to: websecure για να επιβληθεί αυτή η ανακατεύθυνση και να συγκεντρωθεί όλη η κρυπτογραφημένη κίνηση στο ασφαλές σημείο εισόδου.

να websecure Υποδεικνύεται ότι θα πρέπει να χρησιμοποιείται TLS και παρέχεται σύνδεσμος. certResolver (για παράδειγμα letsencrypt) η οποία θα είναι υπεύθυνη για την αυτόματη διαχείριση των πιστοποιητικών. Όλα αυτά υποστηρίζονται από ΑΚΜΉ, το οποίο είναι το πρωτόκολλο που χρησιμοποιεί το Let's Encrypt για την έκδοση και ανανέωση πιστοποιητικών.

Στο μπλοκ Παρόχους υπηρεσιών Ο πάροχος Docker έχει ρυθμιστεί, δείχνοντας προς την υποδοχή unix:///var/run/docker.sockμε μία βασική επιλογή: exposedByDefault: falseΜε αυτό, το Traefik δεν δημοσιεύει όλα τα κοντέινερ από προεπιλογή. μόνο αυτά που φέρουν την ετικέτα traefik.enable=trueΜπορείτε επίσης να διαμορφώσετε έναν πάροχο αρχείων (file) για να φορτώσετε μια πρόσθετη δυναμική διαμόρφωση από, για παράδειγμα, /configurations/dynamic.yml.

Τέλος, το στατικό αρχείο συνήθως περιλαμβάνει την ενότητα certificatesResolversόπου ορίζεται ο αναλυτής ACME: email εγγραφής, αρχείο αποθήκευσης (συνήθως acme.json), τύπος κλειδιού (για παράδειγμα EC384) και η μέθοδος επικύρωσης (για παράδειγμα httpChallenge στο σημείο εισόδου webΕίναι σημαντικό ότι δημιουργήστε ένα πραγματικό email σε αυτήν την ενότητα επειδή το Let's Encrypt το χρησιμοποιεί για ειδοποιήσεις και ανανεώσεις. Εάν αφήσετε μια εικονική ή λανθασμένη τιμή, ενδέχεται να αντιμετωπίσετε σφάλματα κατά την εκκίνηση του κοντέινερ Traefik.

  Τι είναι το Apache: Η αόρατη μηχανή που τροφοδοτεί τον ιστό

Εκτός από αυτήν τη διαμόρφωση YAML, υπάρχουν αναπτύξεις που χρησιμοποιούν Μορφή TOML (traefik.toml)Αλλά η λογική είναι η ίδια: διαχωρίζουν τα πιστοποιητικά επίλυσης (για παράδειγμα [certificatesResolvers.main.acme]), ορίστε προκλήσεις (όπως dnsChallenge με provider = "route53") και προσθέστε προεπιλεγμένες επιλογές TLS, όπως forzar minVersion = "VersionTLS13" ή να διαμορφώσετε μια λίστα με cipherSuites επιτρέπεται.

Αρχιτεκτονική Docker Traefik Portainer

Δυναμική διαμόρφωση: middleware, TLS και ασφάλεια

Το δυναμικό μέρος του Traefik συνήθως τοποθετείται σε ένα αρχείο όπως dynamic.yml, φορτωμένο από τον πάροχο αρχείων. Εδώ ορίζετε middlewares και επιλογές TLS το οποίο μπορεί να τροποποιηθεί χωρίς επανεκκίνηση του κοντέινερ Traefik, κάτι που είναι πολύ χρήσιμο για την άμεση προσαρμογή της ασφάλειας.

Μια τυπική περίπτωση είναι η δημιουργία middleware κεφαλίδας, για παράδειγμα secureHeadersπου προσθέτει πολιτικές που σχετίζονται με το HSTS και την υποχρεωτική χρήση του HTTPS. Στο YAML μπορεί να βρείτε παραμέτρους όπως sslRedirect: true, forceSTSHeader: true, stsIncludeSubdomains: true, stsPreload: true και ένα stsSeconds υψηλή (για παράδειγμα, ένα έτος σε δευτερόλεπτα). Αυτό ενισχύει την ασφάλεια της κυκλοφορίας από την πλευρά του προγράμματος περιήγησης.

Ένα άλλο συνηθισμένο middleware είναι αυτό για βασική πιστοποίηση, για παράδειγμα user-auth τύπος basicAuth, όπου δηλώνεται μια λίστα χρηστών με τη μορφή usuario:hashΤο hash συνήθως παράγεται με htpasswd και είναι ενσωματωμένο στο αρχείο. Αυτό το middleware συνήθως σχετίζεται με τον δρομολογητή του πίνακα ελέγχου Traefik, επομένως, εκτός από την πρόσβαση HTTPS, απαιτεί όνομα χρήστη και κωδικό πρόσβασης.

Μέσα στην ίδια δυναμική διαμόρφωση, είναι σύνηθες να βλέπουμε ένα μπλοκ tls.options με ένα προεπιλεγμένο προφίλ (default) όπου έχουν οριστεί οι υποστηριζόμενοι κρυπτογράφοι και η ελάχιστη έκδοση TLS, για παράδειγμα VersionTLS12Σε ορισμένες αναπτύξεις, ορίζονται αρκετές επιλογές (για παράδειγμα, ένα προφίλ που ονομάζεται tls12 και άλλες default) για την προσαρμογή του επιπέδου ασφαλείας σε διαφορετικές υπηρεσίες, εάν είναι απαραίτητο.

Σε περιβάλλοντα όπου είναι επιθυμητή η χρήση Το TLS επίσης εσωτερικά Μεταξύ του Traefik και των υπηρεσιών backend (όπως το Portainer), μπορεί να προκύψει πρόβλημα όπου αυτές οι υπηρεσίες δεν διαθέτουν πιστοποιητικό που αναγνωρίζεται από δημόσια αρχή έκδοσης πιστοποιητικών (CA). Εδώ ακριβώς τίθεται σε εφαρμογή η επιλογή. insecureSkipVerify, το οποίο, διαμορφωμένο υπό providers.http.tls ή στις κατάλληλες επιλογές TLS, επιτρέπει στο Traefik να παρακάμψει την επικύρωση πιστοποιητικών backend. Αυτό είναι χρήσιμο για εργαστηριακά περιβάλλοντα ή εσωτερικά αυτο-υπογεγραμμένα πιστοποιητικά, αλλά θα πρέπει να χρησιμοποιείται με προσοχή επειδή χαλαρώνει την επαλήθευση.

Μια πρακτική λεπτομέρεια: το αρχείο dynamic.yml Μπορεί να επεξεργαστεί εν κινήσει.Το Traefik επαναφορτώνει τη δυναμική διαμόρφωση χωρίς να απαιτείται επανεκκίνηση, ώστε να μπορείτε να προσθέσετε ή να αφαιρέσετε middleware, να αλλάξετε κεφαλίδες ασφαλείας ή να τροποποιήσετε τον βασικό έλεγχο ταυτότητας χωρίς να επηρεαστεί η διαθεσιμότητα του proxy.

docker-compose με Traefik και Portainer σε αυτόνομο Docker

Σε ένα σενάριο γυμνού Docker, χωρίς Swarm, το πιο συνηθισμένο πράγμα που πρέπει να κάνετε είναι να ξεκινήσετε Ο Τράεφικ και ο Πορτέινερ με ένα μόνο docker-compose.yml το οποίο ορίζει τόσο τις υπηρεσίες όσο και ένα κοινόχρηστο δίκτυο τύπου γέφυρας που ονομάζεται, για παράδειγμα, proxy.

Η υπηρεσία Τραϊφίκ Συνήθως χρησιμοποιεί την επίσημη εικόνα, για παράδειγμα traefik:latest ή μια συγκεκριμένη έκδοση όπως traefik:v3.4Τα λιμάνια έχουν χαρτογραφηθεί. 80 και 443 για την επισκεψιμότητα ιστού και, σε ορισμένα παραδείγματα, τη θύρα 8080 για την εσωτερική έκθεση του πίνακα ελέγχου. Επιπλέον, προστίθεται η επιλογή restart: unless-stopped και η ασφάλεια ενισχύεται με security_opt: - no-new-privileges:true για να μειωθεί ο κίνδυνος κλιμάκωσης δικαιωμάτων εντός του κοντέινερ.

Όσον αφορά τους τόμους, ο Traefik πρέπει να προσαρτήσει την υποδοχή Docker μόνο για ανάγνωση (/var/run/docker.sock:/var/run/docker.sock:ro) για να ανακαλύψετε κοντέινερ, το στατικό αρχείο traefik.yml και τον κατάλογο όπου θα αποθηκευτεί η δυναμική διαμόρφωση (./traefik-data/configurations:/configurationsΤο αρχείο είναι επίσης προσαρτημένο. acme.jsonΕδώ αποθηκεύει το Traefik τα πιστοποιητικά που εκδίδονται από το Let's Encrypt. Αυτό το αρχείο δημιουργείται στον κεντρικό υπολογιστή και του έχουν δοθεί δικαιώματα. 600 έτσι ώστε μόνο ο κατάλληλος χρήστης να μπορεί να το διαβάσει και να το γράψει· αν το αφήσετε με το 644, ο Traefik συνήθως παραπονιέται.

Το κλειδί για να κάνει ο Τράεφικ τα μαγικά του είναι το ετικέτες υπηρεσιώνΜεταξύ άλλων, θα βρείτε: traefik.enable=true (ώστε ο πάροχος Docker να εκθέσει αυτήν την υπηρεσία), traefik.docker.network=proxy (υποδεικνύει ποιο δίκτυο πρέπει να χρησιμοποιήσει ο Traefik για να επικοινωνήσει με το κοντέινερ) και έναν δρομολογητή όπως traefik.http.routers.traefik-secure, με ετικέτες που ορίζουν το σημείο εισόδου του (websecure), ο κανόνας κεντρικού υπολογιστή (για παράδειγμα Host(`traefik.tudominio.com`)), η σχετική υπηρεσία (api@internal) και το ενδιάμεσο λογισμικό ελέγχου ταυτότητας (user-auth@file).

  Πλήρης οδηγός για βελτιστοποίηση διακομιστή Linux

Η υπηρεσία φορέας σε αυτό docker-compose.yml γενικά χρησιμοποιεί portainer/portainer-ce:latest (ή την έκδοση Enterprise εάν έχετε άδεια χρήσης). Προσαρτώνται παρόμοιοι τόμοι: η υποδοχή Docker, ο φάκελος δεδομένων (./portainer-data:/data) και συχνά επίσης το /etc/localtime έτσι ώστε να κληρονομεί τη ζώνη ώρας του κεντρικού υπολογιστή.

Οι ετικέτες του Portainer το καταχωρούν στην Traefik: traefik.enable=true, traefik.docker.network=proxyένας δρομολογητής του τύπου traefik.http.routers.portainer-secure με σημείο εισόδου websecure και ένας κανόνας κεντρικού υπολογιστή όπως Host(`portainer.tudominio.com`)Επιπλέον, ορίζεται η υπηρεσία που θα πρέπει να χρησιμοποιεί ο Traefik, η οποία δείχνει την εσωτερική θύρα του Portainer, για παράδειγμα με traefik.http.services.portainer.loadbalancer.server.port=9000.

Με όλα αυτά σε εξέλιξη, μετά την έναρξη docker compose up -d Στον κατάλογο stack, ο Traefik κατεβάζει τις εικόνες και δημιουργεί το δίκτυο. proxy Εάν δηλωθεί ως εξωτερικό και εκθέσει και τα δύο πάνελ στους διαμορφωμένους υποτομείς, με Αυτόματο HTTPS χάρη στο Let's EncryptΑπό εκείνο το σημείο και μετά, η προσθήκη νέων υπηρεσιών είναι θέμα κλωνοποίησης του έργου σας, προσθήκης μερικών ετικετών Traefik και σύνδεσής του στο δίκτυο. proxy.

Σενάριο Docker Swarm: Portainer και Traefik σε ένα σύμπλεγμα

Όταν ενεργοποιείτε το Docker Swarm, τα πράγματα αλλάζουν λίγο, επειδή οι υπηρεσίες αναπτύσσονται ως στοίβες και τα δίκτυα συνήθως βασίζονται σε επικάλυψη. Ωστόσο, η υποκείμενη λογική με το Traefik και το Portainer είναι πολύ παρόμοια: Το Traefik συνεχίζει να λειτουργεί ως αντίστροφος διακομιστής μεσολάβησης και δυναμικός ανακαλύπτης υπηρεσιών, και το Portainer μπορεί να λειτουργεί τόσο σε αυτόνομη λειτουργία όσο και σε λειτουργία Portainer + agent για τη διαχείριση απομακρυσμένων κόμβων εντός του cluster.

Σε μια τυπική ανάπτυξη Swarm, η στοίβα δημιουργείται πριν εφαρμοστεί. δύο επικαλυπτόμενα δίκτυα το οποίο θα χρησιμοποιήσει το Traefik για τη δρομολόγηση της κυκλοφορίας μεταξύ κόμβων. Επιπλέον, δημιουργείται ένας τόμος για τη διατήρηση δεδομένων Portainer (για παράδειγμα) portainer_data) και, αν το χρειάζεστε, ένα για acme.json ή τον κατάλογο όπου το Traefik αποθηκεύει πιστοποιητικά και ρυθμίσεις.

El docker-compose.yml (το οποίο στη συνέχεια ξεδιπλώνεται με docker stack deploy χρησιμοποιώντας, για παράδειγμα, -c portainer.yml) συνήθως ορίζει δύο υπηρεσίες: Πράκτορας μεταφοράς, το οποίο εκτελείται σε λειτουργία global σε όλους τους κόμβους Linux και την κύρια υπηρεσία Portainer (CE ή EE), η οποία κανονικά παραμένει σε λειτουργία αναπαραγωγής με περιορισμό να εκτελείται μόνο σε διαχειριστές.

Ο πράκτορας Portainer μοντάρει την υποδοχή Docker και τον κατάλογο τόμου (/var/lib/docker/volumes) για να μπορεί να επιθεωρεί πόρους. Συνδέεται στο δίκτυο επικάλυψης που θα μοιράζεται με τον Traefik, για παράδειγμα traefik_publicΗ κύρια υπηρεσία Portainer μπορεί να ρυθμιστεί ώστε να επικοινωνεί με τον πράκτορα μέσω TCP (tcp://tasks.agent:9001) και, μάλιστα, σε ορισμένα παραδείγματα αυτή η εντολή εμφανίζεται με --tlsskipverify σχολίασε, για να παραλείψει την επαλήθευση TLS εάν είναι απαραίτητο.

Στην ίδια ή σε κάποια άλλη στοίβα, το Traefik ξεκινά με τον πάροχο Docker σε λειτουργία Swarm (swarmMode = true σε TOML ή την αντίστοιχη επιλογή σε σημαίες), παρατηρώντας τις υπηρεσίες με ετικέτες. Η διαμόρφωσή του περιλαμβάνει ένα certificatesResolvers.main.acme για το Let's Encrypt, ένα dnsChallenge με έναν προμηθευτή όπως Δρόμος 53 Εάν θέλετε να επικυρώσετε πιστοποιητικά μέσω DNS και ένα μπλοκ από tls.options όπου, για παράδειγμα, είναι αναγκασμένο minVersion = "VersionTLS13" για το προεπιλεγμένο προφίλ και ορίζεται μια σαφής λίστα από cipherSuites για ένα προφίλ TLS 1.2.

Οι ετικέτες του Portainer στο Swarm ακολουθούν την ίδια φιλοσοφία: traefik.enable=trueένα ρούτερ όπως traefik.http.routers.portainer με Host(`portainer.midominio.com`), traefik.http.routers.portainer.entrypoints=https (o websecure (σύμφωνα με την ονομασία), και traefik.http.routers.portainer.tls=true για να ενεργοποιήσετε το TLS σε αυτόν τον δρομολογητή. Επιπλέον, μπορείτε να καθορίσετε το certresolver με traefik.http.routers.portainer.tls.certresolver=main και το σχήμα backend εάν η υπηρεσία εκφωνεί HTTPS εσωτερικά με traefik.http.services.portainer.loadbalancer.server.scheme=https.

Στα αρχεία καταγραφής εντοπισμού σφαλμάτων Traefik στο Swarm θα δείτε τη δημιουργημένη διαμόρφωση: δρομολογητές όπως api y portainer, υπηρεσίες που ανακαλύφθηκαν (για παράδειγμα portainer en http://10.0.1.12:9000 και μια υπηρεσία traefik (δείχνοντας τη θύρα 8080 του πίνακα ελέγχου) και, εάν υπάρχει πρόβλημα με ετικέτες που δεν έχουν οριστεί σωστά, μηνύματα όπως "Δεν ήταν δυνατός ο ορισμός του ονόματος υπηρεσίας για τον δρομολογητή: πάρα πολλές υπηρεσίες"τα οποία συνήθως υποδεικνύουν ότι υπάρχει σύγκρουση ή διπλασιασμός υπηρεσιών που σχετίζονται με έναν δρομολογητή.

Ελάχιστο παράδειγμα: whoami, διαδρομές και TLS με Traefik

Πριν φέρουμε το Portainer στην εξίσωση, είναι αρκετά πρακτικό να δοκιμάσουμε το Traefik με ένα πολύ απλό backend, όπως η εικόνα. traefik/whoamiτο οποίο επιστρέφει πληροφορίες σχετικά με το αίτημα. Αυτό σας βοηθά να επαληθεύσετε ότι το Traefik έχει ρυθμιστεί σωστά και ότι οι κανόνες δρομολόγησης λειτουργούν.

Un docker-compose.yml βασικό μπορεί να περιλαμβάνει την υπηρεσία traefik με την εικόνα traefik:v3.4, τοποθετώντας την υποδοχή Docker και ορίζοντας τις σημαίες εκκίνησης ως --providers.docker=true, --providers.docker.exposedbydefault=false, --providers.docker.network=proxy και το σημείο εισόδου --entryPoints.web.address=:80Οι θύρες 80 και 8080 διαφημίζονται στον κεντρικό υπολογιστή και δημιουργείται ένα δίκτυο. proxy το οποίο θα χρησιμοποιήσει επίσης το κοντέινερ whoami.

Η υπηρεσία whoami Ξεκινά στο ίδιο δίκτυο και σημειώνεται με traefik.enable=trueΣτη συνέχεια, ορίζεται ένας δρομολογητής με την ετικέτα traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`) και υποδεικνύεται ότι το σημείο εισόδου σας είναι webΕάν υποβάλετε ένα αίτημα με curl -H "Host: whoami.docker.localhost" http://localhost/Θα δείτε μια απάντηση με όνομα κεντρικού υπολογιστή, διευθύνσεις IP, κεφαλίδες και ούτω καθεξής, η οποία επιβεβαιώνει ότι το Traefik δρομολογεί σωστά.

  Σφάλμα 404 Δεν Βρέθηκε: Τι είναι, αιτίες, αντίκτυπος στον ιστότοπό σας και πώς να το διορθώσετε.

Από εκεί και πέρα, είναι απλό προσθήκη δρομολόγησης μέσω διαδρομώνΓια παράδειγμα, μπορείτε να δημιουργήσετε μια άλλη υπηρεσία. whoami-api με την ίδια εικόνα, στο ίδιο δίκτυο και επισημάνετέ την με έναν κανόνα του τύπου Host(`whoami.docker.localhost`) && PathPrefix(`/api`)Έτσι, η ρίζα / παω σε whoami πρωτότυπο και τα αιτήματα προς /api θα τους εξυπηρετήσει whoami-apiΜπορείτε να το επαληθεύσετε αυτό υποβάλλοντας αιτήματα προς / ya /api με τον ίδιο οικοδεσπότη.

Για να ενεργοποιήσετε TLS Σε αυτό το τοπικό περιβάλλον, μια επιλογή είναι η δημιουργία ενός αυτο-υπογεγραμμένου πιστοποιητικού για τον τομέα. *.docker.localhost με opensslΔημιουργείτε έναν κατάλογο certs, δημιουργείτε local.key y local.crtκαι, στη συνέχεια, προσθέτετε ένα δυναμικό αρχείο (για παράδειγμα dynamic/tls.yml) με την ενότητα tls: και οι διαδρομές certFile y keyFile δείχνοντας σε αυτά τα αρχεία.

Στη συνέχεια, ενημερώνετε τον ορισμό της υπηρεσίας Traefik στο docker-compose.yml για να προσαρτήσετε τον φάκελο ./certs και το φάκελο ./dynamic μέσα στο κοντέινερ, ενεργοποιείτε το ασφαλές API με --api.dashboard=true, δημιουργείτε το σημείο εισόδου websecure (--entryPoints.websecure.address=:443) και ενεργοποιήστε το TLS εκεί με --entryPoints.websecure.http.tls=trueΕπίσης, επισημαίνετε τον δρομολογητή του ταμπλό και τους δρομολογητές του whoami για να χρησιμοποιήσουν websecure και έχουν tls=true.

Μόλις ολοκληρωθεί, θα έχετε πρόσβαση https://whoami.docker.localhost/ και στον πίνακα Traefik με ένα αυτο-υπογεγραμμένο πιστοποιητικό, αποδεχόμενο την προειδοποίηση ασφαλείας του προγράμματος περιήγησης. Αυτή η εμπειρία είναι πολύ παρόμοια με αυτήν που θα έχετε αργότερα στην παραγωγή με το Let's Encrypt, αλλά χωρίς να βασίζεστε σε δημόσιους διακομιστές DNS.

Βέλτιστες πρακτικές, ανάπτυξη εφαρμογών και επίλυση τυπικών προβλημάτων

Ένα μοτίβο που επαναλαμβάνεται σε όλα αυτά τα παραδείγματα είναι ότι Το Traefik απλοποιεί σημαντικά την ανάπτυξη νέων εφαρμογώνΜόλις έχετε το βασικό σας stack (Traefik + Portainer + δίκτυο) proxy (+ πιστοποιητικά), η προσθήκη μιας νέας υπηρεσίας συνήθως συνοψίζεται στα εξής:

Κλωνοποιήστε το έργο ή αντιγράψτε το docker-compose.yml στον διακομιστή, κατευθύνετε έναν υποτομέα στη διεύθυνση IP του κεντρικού υπολογιστή χρησιμοποιώντας ένα εγγραφή Α στο DNS σας (για παράδειγμα app.tudominio.com), και στη συνέχεια προσθέστε τις ετικέτες κλειδιών στην υπηρεσία: traefik.enable=true, traefik.docker.network=proxy και έναν δρομολογητή με έναν κανόνα κεντρικού υπολογιστή για αυτόν τον υποτομέα, καθορίζοντας το ασφαλές σημείο εισόδου websecure και υπηρεσία με τη σωστή εσωτερική θύρα.

Πολλά εκπαιδευτικά βίντεο θα έδειχναν, για παράδειγμα, την ανάπτυξη μιας μικρής εφαρμογής. FastAPI Διαχωρισμένο: προστίθενται τέσσερις ετικέτες, διασφαλίζοντας ότι εντάσσεται στο δίκτυο proxy στο τμήμα networks del docker-compose.ymlκαι αφού κάνεις docker compose up -d Η εφαρμογή εμφανίζεται αυτόματα στον πίνακα ελέγχου του Traefik με ενεργοποιημένο το TLS. Η αυτόματη ανακάλυψη του Traefik σημαίνει ότι δεν χρειάζεται καν να προσαρμόσετε τις στατικές ρυθμίσεις του.

Για να διασφαλίσετε ότι όλα θα κυλήσουν ομαλά, είναι σημαντικό να δώσετε προσοχή σε μερικές λεπτομέρειες: Μην επαναχρησιμοποιείτε το ίδιο αναγνωριστικό δρομολογητή Σε διάφορες εφαρμογές, ελέγξτε ότι υπάρχει μόνο μία υπηρεσία που σχετίζεται με κάθε δρομολογητή (αποφεύγοντας το σφάλμα "πάρα πολλές υπηρεσίες"), χρησιμοποιήστε συνεπή ονόματα δικτύου (για παράδειγμα, proxy σε όλες τις στοίβες που θέλετε να εκθέσετε), και, εάν χρησιμοποιείτε το Let's Encrypt, βεβαιωθείτε ότι το acme.json Έχει δικαιώματα 600 και το διαμορφωμένο email είναι έγκυρο.

Σε περιβάλλοντα Swarm, ελέγξτε επίσης ότι η διαμόρφωση Traefik περιλαμβάνει τον πάροχο Docker. swarmMode=true y watch=trueκαι ότι οι περιορισμοί των υπηρεσιών (για παράδειγμα node.role == manager (για το Portainer) δεν έρχονται σε σύγκρουση με το πού αναπτύσσεται το Traefik. Τα αρχεία καταγραφής εντοπισμού σφαλμάτων είναι πολύ λεπτομερή, αλλά είναι το κλειδί για τον εντοπισμό προβλημάτων δρομολόγησης ή TLS.

Συνδυάζοντας το Docker, το Traefik και το Portainer, μπορείτε να δημιουργήσετε ένα πλήρες, ελαφρύ περιβάλλον ενορχήστρωσης σε έναν μόνο διακομιστή, με γραφικούς πίνακες ελέγχου, αυτόματα πιστοποιητικά και πολύ γρήγορη ροή ανάπτυξης, όπου η προσθήκη, η ενημέρωση ή η αφαίρεση υπηρεσιών περιορίζεται στην τροποποίηση μερικών γραμμών YAML και στην άδεια του Traefik να κάνει τη βρώμικη δουλειά του reverse proxying και του TLS.