Dieses Tutorial ist VALID.

Bitte lies Dir den Disclaimer durch, bevor Du eine Anleitung umsetzt...

Haftungsausschluss / Disclaimer

Traefik v2.1 mit Docker als Reverse-Proxy und Let’s Encrypt Provider

Damit ist die Konfiguration von Traefik abgeschlossen. Jetzt brauchen wir noch die „docker-compose“-Datei, um ihn damit herunterzuladen und anschließend zu starten. Außerdem verbinden wir den Container mit dem Dateisystem und den Ports unseres Host-Systems:

nano ~/docker/traefik-v2/docker-compose.yml
### Traefik v2.1
### docker-compose.yml
##START
version: '3'

services:
  traefik:
    image: traefik:v2.1
    container_name: traefik-v2
    restart: always
    networks:
      - web
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/traefik.yml:/traefik.yml:ro
      - ./data/middleware.yml:/middleware.yml:ro
      - ./data/.htpasswd:/.htpasswd:ro
      - ./data/acme.json:/acme.json
      - /var/log/traefik.log:/traefik.log
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.entrypoints=http"
      - "traefik.http.routers.traefik.rule=Host(`traefik.xp-server.de`)"
      - "traefik.http.middlewares.traefik-auth.basicauth.usersfile=.htpasswd"
      - "traefik.http.routers.traefik.middlewares=https-redirect@file"
      - "traefik.http.routers.traefik-sec.entrypoints=https"
      - "traefik.http.routers.traefik-sec.rule=Host(`traefik.xp-server.de`)"
      - "traefik.http.routers.traefik-sec.middlewares=traefik-auth"
      - "traefik.http.routers.traefik-sec.tls=true"
      - "traefik.http.routers.traefik-sec.tls.options=myTLSOptions@file"
      - "traefik.http.routers.traefik-sec.tls.certresolver=le"
      - "traefik.http.routers.traefik-sec.service=api@internal"

networks:
  web:
    external: true
##EOF

Diese „docker-compose“-Dateien werden uns noch häufiger für jeden einzelnen unserer Dienste begegnen. Die Syntax ist sehr strikt und gleich vorneweg: In einer .yml-Datei dürfen wir keine Tabulatoren für den Zeileneinzug verwenden, sondern nur normale Leerzeichen. Aber gut, woran man sich nicht alles gewöhnt ;)

Ich gehe hier jeden einzelnen Punkt durch. Später in den jeweiligen docker-compose Dateien machen wir das dann schneller und ich erkläre nur noch abweichende Konfigurationen, damit wir nicht alles x-fach in den Anleitungen haben.

Die Traefik Label Syntax für v2.1 hab ich in diesem Artikel noch einmal extra aufgeschlüsselt, da hier kein Platz mehr dafür ist…

Zeile 4: Definiert die Version, in der diese .yml-Datei geschrieben ist. Version 3 ist dabei auf dem aktuellen Stand.

Zeilen 6+7: Wir beginnen mit der Deklaration der Services. Eingerückt kommt dann der Name des Services, hier „traefik“.

Zeile 8: Das Image des Containers, das wir laden möchten. Hier ganz wichtig: Normalerweise steht meistens nichts hinter dem Container oder höchstens ein „:latest“ für die neueste Version. Hier brauchen wir explizit die Version 2.1 von Traefik. Damit stellen wir sicher, dass Docker nicht automatisch Version 2.2 laden würde, wenn diese erscheint, und die eventuell nicht mit der Config klar kommt und unser Setup dann klemmt. Genau wie MariaDB, die wir auch auf die Version 10.4 festsetzen. „Unterversionen“ (x.x.y) werden natürlich schon geladen, das sind dann kleinere Updates, die mit der aktuellen Config auch laufen müssen.

Zeile 9: Wir geben dem Container einen Namen, damit wir ihn mit Docker später leichter verwalten können. Sinnigerweise vergeben wir hier „traefik-v2“.

Zeile 10: „restart: always“ sagt Docker, dass dieser Container nach einem Ausfall oder beim Neustart des Servers sofort wieder gestartet werden soll. Das ist gerade bei dem Reverse-Proxy, dem Herzstück unserer Docker-Konfiguration, sehr wichtig! Ohne Traefik würde kein einziger unserer Container über das Internet erreichbar sein.

Zeilen 11+12: Die Netzwerk-Deklaration. Hier legen wir fest, mit welchen Docker-Netzwerken dieser Service reden darf. Traefik soll ja nur ins Internet weiterleiten und nicht nach „intern“, darum taucht hier nur das „web“-Netzwerk auf.

Zeilen 13-15: Wir beschreiben die Ports, auf denen der Container mit dem Netzwerk verbunden werden soll. Wir stöpseln den Port 80 vom Host (außen) an den Port 80 des Containers (innen) an. Selbiges mit Port 443.

Zeilen 16-22: „Volumes“ sind einfach gesagt virtuelle Laufwerk-Brücken (oder „Mounts“), mit denen wir Speicherplatz unseres Host-Systems mit dem Container verbinden. Links vom „Doppelpunkt“ ist der Pfad des Hosts, rechts davon die Stelle im Container. In dem Beispiel verbinden wir als erstes die Datei „/var/run/docker.sock“ vom Host mit der des Traefik-Containers. Das „:ro“ am Schluss bedeutet „read-only“, also nur lesend. Der Container kann die .sock-Datei lesen, aber nicht hineinschreiben. Über diese Datei bekommt Traefik Änderungen an sämtlichen Docker-Containern mit. „Nur lesend“ binden wir auch die folgenden drei Konfigurationsdateien ein, damit hier nichts passiert… Der Inhalt des Containers an der Stelle „/etc/traefik“ wird bei uns auf dem Host nach „/root/docker/traefik-v2/data“ geschrieben. Das ist insbesondere für die „traefik.yml“ und „middleware.yml“ Datei wichtig, damit die Config von Traefik erfasst und gelesen wird.
Hier legen wir auch den Zugriff auf die „acme.json“ fest, in der die Zertifikate von Let’s Encrypt abgelegt werden. Wie auch die „traefik.log“, die nach „/var/log“ geschrieben wird, sind diese beiden Dateien nicht „read-only“, denn hier müssen wir Informationen ablegen können…

Generell gilt: Daten, die innerhalb des Containers abgelegt werden, stehen und fallen zusammen mit dem Container. Wird der Container entfernt, sind auch alle Daten innerhalb des Containers futsch, die wir geändert haben. Darum müssen wir Daten, welche wir unabhängig vom Zustand des Containers bewahren wollen, über Volumes „persistent“ auf unser System außerhalb des Containers schreiben lassen! Diese bleiben dann erhalten, wenn wir den Container beenden und entfernen.

Zeilen 23-35: Die „Labels“ brauchen wir allesamt für Traefik. Damit übergeben wir unsere Wünsche, was mit dem Container passieren soll, welchen Hostname er hat und einige Feinabstimmungen für TLS an Traefik. Diese Konfiguration ist in weiten Teilen für alle unsere weiteren Dienste identisch und ändert sich nur im Host und dem Namen des Routers.
Die einzigen Zeilen, die Du an Dein System anpassen musst, sind Nummer 26 und 30: Hier muss jeweils Dein Hostname eingetragen werden (In Apostrophen! Nicht Hochkomma). Aber nun im Einzelnen:
[Für mehr Info zu der Syntax: Traefik v2 Label Syntax ansehen…]

Zeile 24: Das Kommando „traefik.enable=true“ schaltet den jeweiligen Container für Traefik frei. Fehlt diese Zeile, wird der Container nicht per Traefik an das Internet angebunden, weil wir die Automatik in der traefik.yml-Config-Datei deaktiviert haben!
Zeile 25: Traefik öffnet einen „HTTP Router“ mit dem Namen „traefik“ auf dem Einstiegspunkt „http“ (=Port 80).
Zeile 26: Wir geben dem Router „traefik“ den Host, auf den er hören soll: traefik.xp-server.de (für http Verbindungen!).
Zeile 27: Hier schalten wir die Middleware „basicauth“ mit der Option „userfile“ ein. Die User/PW Daten sollen also aus der Datei „.htpasswd“ gezogen und nicht direkt hier in der Config übergeben werden. Den Pfad dazu haben wir oben in den Volumes definiert. Wir geben dieser Middleware den Namen „traefik-auth“. Damit rufen wir sie später auf.
Zeile 28: Nun möchten wir die Verbindung zwangsweise von http auf https umleiten lassen. Dazu bemühen wir eine Funktion, die wir schon in der „middleware.yml“-Datei angelegt haben: „https-redirect“. Mittels „https-redirect@file“ sagen wir Traefik, er soll im File-Provider (Also die Datei middleware.yml) nach der Funktion „https-redirect“ Ausschau halten und diese dann ausführen.
Zeile 29: Für die neue https-Verbindung brauchen wir einen neuen Router: „traefik-sec“. Wir öffnen ihn für den Einstiegspunkt „https“ (=Port 443).
Zeile 30: Wir geben dem Router „traefik-sec“ den Host, auf den er hören soll: traefik.xp-server.de (für https Verbindungen!). Das ist die „doppelte Ausführung“, von der ich in meinem traefik-v2-rant gesprochen hab. Muss man aber doppelt anlegen, weil Traefik für den neuen Router „traefik-sec“ ja keinen Host kennt, sondern nur für den „traefik“ (ohne -sec)…
Zeile 31: Nun starten wir auf dem Router „traefik-sec“ die Middleware „traefik-auth“, die wir in Zeile 27 definiert haben.
Zeile 32: Wir wünschen für den Router „traefik-sec“ eine TLS-Verschlüsselung (also SSL anschalten).
Zeile 33: Für TLS möchten wir zusätzliche Parameter nachladen: Aus dem File-Provider (wir erinnern uns: Die Datei middleware.yml) nehmen wir die Funktion „myTLSOptions“ als Option für TLS.
Zeile 34: Die „certresolver=“ Anweisung übermittelt an Traefik den Wunsch, dass wir für den Host auf dem Router „traefik-sec“ gerne ein Zertifikat hätten. Dazu möchten wir die Zertifizierungsstelle „le“ anrufen, die wir in der traefik.yml definiert haben.
Zeile 35: Mittels „service=api@internal“ teilen wir Traefik mit, dass er auf dem Router „traefik-sec“ sein Dashboard anschalten soll.

Zeilen 37-39: Die Netzwerke werden noch einmal deklariert. Das „external: true“ bedeutet hier NICHT, dass dieses Netzwerk eine externe Anbindung an das Internet hat, sondern, dass es „extern“ definiert worden ist. Das haben wir ja ganz am Anfang in Docker gemacht. Ein „externes“ Netzwerk wird beim Beenden eines Containers nicht gelöscht. Darum der Aufwand…

Jetzt haben wir alle Konfigurationsdateien zusammen. Heißt, wir können Traefik nun laden und starten :)

Anzeige *

42 Kommentare zu „Traefik v2.1 mit Docker als Reverse-Proxy und Let’s Encrypt Provider“

  1. Hallo Peter,
    danke Ersteinmal für die tolle Anleitung. Durch die Erklärungen bin ich schon ein Riesenschritt weiter!!
    Ich möchte gerne NextCloud, OpenHAB und Pi-Hole auf meiner QNAP 251+ laufen lassen. OpenHAB und PiHole laufen z.Z. unter der ContainerStation ersteres als normaler Container, der PiHole unter einer LXC Linux-Version.
    Nun möchte ich Allen den Traefik vorschalten um auch noch die NextCloud ( + MariaDB) zum Laufen zu bringen.
    Der Traefik-Container läuft nach Deiner Anleitung, leider kann ich nicht mehr einen anderen Container an den Start bringen.
    Bei Container die /etc/timezone als volume mounten wollen, kommt eine Fehlermeldung.
    Wenn ich die beiden Einträge auskommentiere, läuft der Container, leider zeigt dann das Dashboard vom traefik fehler 404.
    Wäre echt klasse, wenn Dir oder anderen Lesern etwas dazu einfällt.
    Viele Grüße

    Chris

    1. Hi Chris,
      sorry, was mich angeht bin ich raus, weil das eine komplett andere Architektur ist und ich die Programme, die Du nutzt, selber noch nie ausprobiert habe.
      Aber vielleicht weiß ja jemand anders Rat…

      Beste Grüße
      Peter.

  2. Hallo Peter,

    ich spiele in letzter Zeit ein bisschen mit Rootservern rum und bin auf deine Tutorials gestoßen. Diese bilden schon einen Großteil meines Einsatzgebietes ab :D vielen Dank für die tollen HowTos.

    Ich habe bisher den nginx-reverse docker container verwendet. Hat auch wunderbar funktioniert. Habe aber immer wieder von Traefik gelesen und wollte es einfach mal ausprobieren.

    Bisher läuft schon das Dashboard über https und auch die Subdomains kann ich einrichten. Ich scheitere aber momentan daran, eine Rule zu erzeugen, die mir http://www.domain.de und domain.de auf einen httpd:alpine docker container weiterleitet.

    Die Labels sind im docker-compose.yml
    – „traefik.enable=true“
    – „traefik.http.routers.site-web.rule=Host(`www.domain.de`,`domain.de`)“
    – „traefik.http.routers.site-web.entrypoints=http“
    – „traefik.http.routers.site-web.middlewares=https-redirect@file“
    – „traefik.http.routers.site-web-sec.entrypoints=https“
    – „traefik.http.routers.site-web-sec.rule=Host(`www.domain.de`,`domain.de`)“
    – „traefik.http.routers.site-web-sec.tls=true“
    – „traefik.http.routers.site-web-sec.tls.options=myTLSOptions@file“
    – „traefik.http.routers.site-web-sec.tls.certresolver=myresolver“

    Scheint auch alles soweit hochzufahren. Auf dem Dashboard sehe ich keine Fehler und die 4 erwarteten „Router“. Allerdings kann ich die Seiten nicht aufrufen.

    https://domain.de liefert ein „Seite nicht gefunden“
    https://www.domain.de liefert eine Warnung, dass es sich um das Traefik Std. Zertifikat handelt, diese kann ich akzeptieren und die Page wird ausgeliefert.

    sowohl
    http://domain.de als auch http://www.domain.de werden auf https://www.domain.de weitergeleitet.

    Vermutlich übersehe ich einen einfachen, ganz klaren Punkt, aber ich sehe ihn leider nicht. Vielleicht kannst du mir einen Hinweis geben :)

    Vielen Dank und viele Grüße
    Dennis

    1. Hallo Dennis,

      die letzte Zeile. Dein certresolver heißt falsch. Wenigstens, wenn Du ihn in der traefik.yml nicht auch so genannt hast.

      Beste Grüße
      Peter.

      1. Hallo Peter,

        danke für deine Antwort. Ich habe mir einen eigenen Resolver erstellt, der die Staging-Seite von Let’s Encrypt aufruft, damit ich nicht in irgendwelche rate-Limits laufe
        (vgl. https://doc.traefik.io/traefik/https/acme/#more-configuration) .

        Ich hatte allerdings noch falsche und fehlende DNS-Einstellungen, die ich angepasst habe. Jetzt scheint es zu funktionieren 👍

        Hier scheint das mit der Weiterleitung etwas anders gelöst worden zu sein
        https://community.traefik.io/t/global-redirect-www-to-non-www-with-https-redirection/2313/9

        Wenn ich es richtig verstehe, ist das eine globale Einstellung und die Docker-Label für Traefik lauten dann sowas wie
        ….
        – „traefik.http.routers.traefik.rule=Host(`traefik.domainde`)“

        ohne weitere middlewares oder redirect Infos. Ist diese Lösung vergleichbar oder werde ich da später in irgendwelche Probleme laufen, die ich jetzt noch nicht sehe 😅

        Viele Grüße
        Dennis

        1. Danke für den Hinweis, Dennis!
          Freut mich, wenn es voran geht :)

          Da wurden wohl in v2.2 von Traefik ein paar zusätzliche Redirect-Middlewares eingebaut.
          Wenn ich mal genug Zeit hab, klemm ich mich hinter das Thema.

          Global scheint das nicht zu sein, was ich im Überfliegen gesehen hab. Das sieht nach einem einfacherem Weg aus, „www“ und „nicht-www“ Domains über die Labels der jeweiligen docker-compose.yml auf den jeweils richtigen Konterpart weiterzuleiten.
          Global wäre auch schlecht, weil es immer wieder Weiterleitungen von „www“ nach „nicht-www“ und „nicht-www“ nach „www“ gibt. Sonst würden alle Redirects in nur eine Richtung zeigen.

          Interessanter ist der „catch-all“. Wenn die so was gebaut haben, ist der komplette Regex-Redirect tatsächlich hinfällig.

          Wünsch Dir einen schönen Sonntag!
          Peter.

          Update:
          So richtig Info hab ich dazu auf der offiziellen Traefik Dokumentation keine gefunden.
          Hier noch ein Link, wie jemand das „klassisch“ mit Redirect-Regex löst: https://habd.as/post/redirect-non-www-to-www-traefik-v2-labels/

          Update II:
          Ohje… Das kommt alles aus dem oberen Teil von diesem Diskussions-Thread: https://community.traefik.io/t/global-redirect-www-to-non-www-with-https-redirection/2313

          Die bauen die Redirects praktisch in das Äquivalent unserer „middleware.yml“ ein und rufen die über „…@file“ auf. Keine neue „Magie“ seitens Traefik.

          Kann man wohl so machen. Wenn es nur „www“ auf „nicht-www“ und umgekehrt Weiterleitungen sind.
          Falls Du „domain1.xxx“ und „domain2.xxx“ auf das gleiche Ziel verfrachten möchtest, reicht diese Lösung dann nicht mehr.

  3. Bin per Zufall hier gelandet. Habe ne netcup Domain und zu Hause ein Server mit Debian 10 und OMV 5. Ich gehe mal davon aus, dass ich bestimmte Anleitungen auch für meine Maschine zu Hause nutzen kann?

    1. Generell sollten die meisten Anleitungen klappen. Nur wenn Domains ins Spiel kommen wird es schwierig.
      Falls Du Daheim eine feste IP hast, welche Du auf die Domain mappen kannst, sollten alle Tutorials funktionieren.
      Bei dynamischem DNS klappt die Let’s Encrypt Challenge nicht, dafür sind sie nicht ausgelegt. Da brauchst dann eine DNS-Challenge, aber das ist ein anderes Thema.

      1. Danke für die Antwort. Ich habe, bevor ich diese Seite gefunden habe, ein letsencrypt Zertifikat für meine Domain per DNS-Challenge ausgestellt. Was muss ich dann beachten, um traefik und nextcloud zu installieren?

        1. Kommt darauf an, wie und was Du genau machen willst…
          Aber meine Anleitungen sind alle für Server in Rechenzentren mit festen IPs geschrieben worden. Google am besten nach „traefik“ und „dyndns“. Da müssten Anleitungen kommen, die Heimumgebungen behandeln. Oder Du passt meine Anleitungen an Deine Umgebung an – dabei kann ich Dir aber leider nicht helfen.

  4. Hallo,

    ein serh gutes Tutorial und bisher hat auch alles funktioniert, jedoch hab ich 2 Errors im Bereich Routers von Traefik. Laut den log sind das folgende:
    „level=error msg=“middleware \“https-redirect@file\“ does not exist“ entryPoint“
    „unknown TLS options: myTLSOptions@file “

    Beide Funktionen sind jedoch in der middleware.yaml eingetragen?
    Nen Tipp woran das liegen kann?

    Gruß
    Jere

  5. Hallo Peter,

    so, für heute bin ich mal mit dem ersten „lesen“ durch. Werde Morgen dann mal ausgeschlafen an die Sache rangehen. Du hast oben geschrieben, das die Traefik Config wegen der Formatierung (Tabulatoren und Hochkomma Ersatz) etwas „schwer zu tippen“ ist.
    Also für die Einrückung habe ich folgende Lösung. Ich verwende recht gerne notepad++. Dort kann man in Einstellungen – Optionen auf „Sprache“ klicken. Rechts gibt es ein Abschnitt „Tabulatoren“. Dort dann „yaml“ auswählen. Standard verwenden deaktivieren. Tabulatorbreite auf 2 setzen. Durch Leerzeichen ersetzen aktivieren.

    Wenn Du dann ein neues Dokument erstellst und bei Sprache auf „YAML“ gehst, kannst Du 1x die Tabulator Taste drücken und es werden aber 2 Leerzeichen erzeugt.

    Ich mach mich mal schlau, vielleicht kann man ja auch noch z.B. die Hochkomma Taste irgendwie bei Sprache YAML umbiegen, das dadurch ein anderes Zeichen erzeugt wird.

    Leider habe ich bisher auch nur YML / YAML Validator gefunden, aber das scheint ja was Traefik V2 spezifisches zu sein.

    1. Danke auch für die Hilfe bei Hardys Problem. Irgendwie ist mir der Thread komplett durch die Finger gerutscht. Aber da war erster Lockdown zu der Zeit, da brachen ein paar Welten zusammen.

      notepad++ benutze ich auch zum Formatieren der meisten Configs und schieb die dann per Copy/Paste auf den Server. Aber der Tipp mit „yaml“ ist goldwert, dass man nicht aus Versehen Tabulatoren in die Configs bringt, die dann später klemmen.

      Darum hab ich auch meinen Frieden mit den Hochkommas/Apostrophen beim Traefik gemacht, weil ich die ganze Config kopiere und nur innerhalb der Apostrophen die neue Adresse schreib. War am Anfang lästig, weil ich nicht drauf gekommen bin, dass da was falsch ist.

      Wünsch Dir einen schönen Abend!

  6. Hallo Peter,
    ich möchte gerne über Traefik auf einen Web-Server zugreifen, der nicht ein Docker-Container ist, aber sich in meinem Netzwerk befindet.
    Ich habe mir die Traefik Doko angesehen, komme aber nicht weiter.
    Kannst Du helfen?

    Gruß
    Rolf

    1. Hallo Rolf,
      tut mir leid, da steck ich überhaupt nicht drin.
      Sämtliche Anleitungen, die ich durchforstet habe, gingen rein vom Docker-Provider aus.

      Wünsch Dir viel Glück bei Deinem Vorhaben!
      Peter.

  7. Habe seit Tagen versucht den Fehler in meiner eigenen Config zu finden – bin jetzt einfach auf deine umgestiegen und alle Services laufen auf anhieb. Besten Dank für die super Anleitung!
    Jetzt hat mein Dashboard sogar endlich mal ein Passwort ^^

    1. Peter Fiedler

      Servus Jan,
      hey, das freut mich, wenn Dir die Anleitung geholfen hat und Dein Server schnurrt ^^
      Noch viel Spaß damit und einen schönen Sonntag!
      Peter.

  8. Hallo Peter,

    ich würde gerne alle Container unter einer Domain veröffentlichen, sprich xxx.duckdns.org/containerA und xxx.duckdns.org/containerB usw.. Ist sowas überhaupt möglich? Wenn ja könnte man diese Anleitung als Basis nehmen?
    Danke im Voraus.

    Gruß
    Yassine

    1. Peter Fiedler

      Bei Subfolders statt Subdomains glaub ich macht Traefik nicht mit.
      DynDNS und let’s encrypt ist auch eine endlose Geschichte. Da wäre am Besten, wenn Du den DNS-Challenge machst. Aber der ist mir – jedenfalls bei netcup – wegen der API und dem Vollzugriff auf die Domainverwaltung zu heiß.

      Tut mir leid, wenn ich Dir da nicht weiterhelfen kann, aber dieses Szenario hab ich noch nie probiert…

      1. Bernhard Schaper

        Hallo Grundsätzlich geht das, ich habe es unter Traefik 1 am laufen, aber das ist ganz schön gefrickel. Das Geheimnis lautet bei der Domain Deklarierung muss PathPrefix oder PathPrefixStrip mit angegeben werden.
        Das Upgrade auf Traefik 2 steht bei mir direkt bevor, danach kann ich mehr dazu sagen.

  9. Hallo Peter,

    danke für die super gute Anleitung. Selten wo man eine ausführliche und funktionfähige (Auf Anhieb) Anleitung findet.
    Chapeaux.

    Gruß
    Yassine

    1. Peter Fiedler

      Freut mich sehr, wenn Dir die Anleitung gefallen und geholfen hat, Yassine.

      Ich wünsche Dir ein schönes Wochenende!
      Peter.

  10. Das ganze läuft ja schon prima auf meinem Netcup Host.
    Ich würde gerne aber auf meinem Raspberry PI daheim noch mit Traefik arbeiten. Sodass ich beispielsweise traefik.localhost die Anwendung erreiche.
    SSL geschützt wird das wahrscheinlich nicht funktionieren.

    Danke für deine Hilfe!

  11. Siegfried Fischer

    Hut ab. Bin begeistert. Alles auf Anhieb geklappt. DANKE!
    Deine Beschreibung der Config- Dateien – einfach Super!

    lg
    Siegfried

    1. Peter Fiedler

      Hallo Siegfried,
      freut mich sehr, wenn alles funktioniert hat.
      Ich wünsch Dir noch viel Freude mit dem Server!
      Beste Grüße
      Peter.

  12. Hallo,
    Tolle Anleitung, ich habe jedoch eine Frage zu den Docker – Networks!
    Aus welchem Grund werden die Netzwerke extern angelegt? Es reicht im docker-compose.yml unter networks ein eigenes einzutragen. Bzw. wieso wird das „Intern“ Netzwerk dann nicht auch auf external:true gesetzt?
    Alle Docker-Container welche Content im WWW bereitstellen müssen mit dem web Netzwerk verbunden sein, falls diese weitere z.B. Datenbank-Container benötigen, werden diese über intern verbunden. Habe ich das richtig verstanden?
    Danke,
    Chris

    1. Hi Chris,

      wir setzen die Netzwerke extern, damit sie nicht beim Beenden von Containern von Docker entfernt werden.

      Im Traefik-Setup wird das „interne“ Netzwerk nicht in der docker-compose benutzt. Darum brauchen wir das „unten“ auch nicht aufführen. Nur die Netzwerke, die wir „oben“ auch verwenden.

      Genau:
      Das „web“ Netzwerk verbindet unsere Container mit Traefik, die darüber ins Internet umgeleitet werden.
      Das „intern“ Netzwerk hat hier nur die Verbindung zur Datenbank, weil die nicht über das Netz nach draußen geleitet werden soll, sondern nur mit den Containern kommuniziert.

      Beste Grüße
      Peter.

  13. Hi Peter!
    Sehr gute Anleitung, DANKE! Hat alles auf Anhieb geklappt.
    Wollte als erstes Portainer PULLen und UPen, jedoch bekommt der mit meinem docker-compose.yml kein SSL-Cert von LE. Fehler ist wohl:
    „2020-02-28T09:18:15Z“ level=error msg=“the router portainer-secure@docker uses a non-existent resolver: http“
    Kannst du zuuuufällig noch eine Beispiel YML für einen Service posten?!?
    Hast du vielleicht auch noch einen Hinweis, um dedizierte Server, z.B. einen Nextcloud-Server, in Traefik einzubinden? Damals bei TraefikV1 ging das irgendwie über nen FILE.
    DANKE und VG
    Andre

    1. Servus Andre,

      Portainer hab ich noch nie was mit gemacht. Schick mir mal bitte Deine docker-compose.yml an fiedler@cpf.de dann schau ich mal drüber. Adhoc sagt mir der Fehler nichts.

      Nextcloud ist ein Tutorial am Start mit Traefik v2.1

      Beste Grüße
      Peter.

      1. Hi PETER! ;)
        Vielen Dank für deine schnelle Antwort. Habe mal wieder feststellen müssen, dass zu schnelles lesen nicht hilfreich für Problembehandlung ist.
        Hab das Beispiel vom WordPress Tutorial genommen, UND? es hab geklappt.
        Es lag an den Verweisen auf das file, also @file „traefik.http.routers.portainer.middlewares=portainer-https-redirect“
        VVVVV
        „traefik.http.routers.portainer-secure.middlewares=default-headers@file“

        Meine Hausaufgabe, erstmal die ganzen Seiten von dir durchforsten und schlauer werden.
        Ich melde mich! Besten Dank
        VG
        Andre
        PS: guck mal auf https://www.c-rieger.de/nextcloud-installationsanleitung/
        so hätte ich das ganz gerne im Docker. Möchte aber auch noch über NFS von meinem NAS Daten mit einbinden.

        1. Gut, dass Du das lösen konntest.

          Hab mir den Link angesehen. Da steht am Schluss eine „normale“ Nextcloud Installation. Noch ein wenig besser gesichert mit fail2ban und einer Firewall, aber im Grunde müsste mein Tutorial auch eine vernünftige Nextcloud Installation hinkriegen.
          Dein NAS per NFS in den Server einhängen ist dann schon nicht mehr ganz so trivial…

  14. Hallo,
    ich habe einen vserver am laufen. Habe ihn mit docker/docker-compose bestückt.Dann lt. Eurer super Anleitung Traefik v2.1 installiert. Hat alles bestens geklappt. (danke, tolle Arbeit!) (Hinweis: wenn beim Erstellen der .htpasswd ein „$“ im supergeheimenpasswort ist, klappt der Login anschließend nicht – jedenfalls bei mir.)

    Nun würde ich auch gern Mailcow und WordPress einrichten. Aber schon beim Prüfen mit „netstat -tulpn | grep -E -w ’25|80|110|143|443|465|587|993|995′ “ sind durch Traefik v2.1 die Ports 80 und 443 belegt.
    Was muss ich tun um Mailcow und WordPress zum Laufen zu bringen? Ist die Mailcow-Anleitung mit Traefik v2.1 kompatibel?

    VG Hardy

    1. Servus Hardy,
      danke für den Hinweis mit dem „Dollar“-Zeichen, den baue ich noch ein. Einige Sonderzeichen können solche Passworteingaben empfindlich stören. Hochkommas sind da auch sehr gefährlich.

      Mailcow und Traefik beißen sich. Darum mach ich entweder Mailcow oder die Anwendungen auf meinen Maschinen.
      Mailcow hat auch seinen eigenen Let’s Encrypt Challenge und da pfusch ich nicht rein.

      Beste Grüße
      Peter.

      1. Aha.
        Heißt also, dass Mailcow einen kompletten Vserver allein braucht. – Schade (doppelte Kosten)

        Traefik v2.1 / mehrere WordPress-Instanzen / Portainer usw müssten ohne Mailcow laufen?

        Danke und VG hardy

        1. Das bekommt man sicher irgendwie miteinander zum Laufen, aber ich hab mich da nicht lang damit beschäftigt.
          Die Jungs von Mailcow empfehlen selbst eine eigene Maschine nur für den Mailserver. Und ich hab da eine andere Backup Strategie. Außerdem ist der Hostname auch seltsam für „nicht Mailserver“.

          Schau mal, dass Du Dir so einen Netcup Karneval vServer schnappst, der kostet 3,33 Euro im Monat. Angebot ist leider gerade aus. Aber vielleicht füllen sie das noch mal nach. Da halten sich die Kosten dann in Grenzen ;)

      2. Guten Morgen,
        da fällt mir doch spontan ein kleines „AddOn“ für dieses Tutorial ein. Bei dem LE-Cert haben wir ja trotzdem eine Warnung nach dem Motto, der doofe Anbieter hat sein Cert selber unterschrieben… Was machen wir denn, wenn wir schon ein „echtes“ Zertifikat haben? Wir würden die Änderungen an der Docker-Compose und der Traefik.yml aussehen, wenn man LE auslassen möchte?
        Btw. Klar, könnte man sich auch selbst in die Dokus stürzen, aber wir wissen ja, wie die Menschen sind, die mal eben ein Tut nachbasteln wollen. *lach*

    2. Hallo zusammen,
      zum Thema mit den $-Zeichen aus htpasswd: Die Zeichenkette funktioniert dann tatsächlich nicht, kann aber gelöst werden, indem man $ durch $$ ersetzt (also doppeln).
      Kurzbefehl aus der Doku dazu: echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g
      [https://docs.traefik.io/middlewares/basicauth/]

      -> Hat hier schon mal jemand versucht, die echten IP-Adressen an die einzelnen Container zu übermitteln? Also beispielsweise für fail2ban und ähnliche Aktionen? Logischerweise werden ja nur die Gateway-IPs hinter traefik/dem reverse-proxy weitergegeben, was für Bans, etc. nicht sehr hilfreich ist.

      viele Grüße
      Marc

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Verwendung
von Cookies

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung.

Scroll to Top