In diesem Beitrag werde ich zeigen, wie ich jeweils eine Domain mit Zertifikat für den Nginx Proxy Manager und meine Portainer Instanz im Nginx Proxy Manager hinzufüge.
Nginx Proxy Manager aufrufen
Dazu navigiere ich zum Nginx Proxy Manager.
http://<Meine Server IP>:81/
Ich melde mich an und werde einen ersten Proxy Host hinzufügen.
Ports in der Firewall freigeben
Falls das noch nicht geschehen ist, müssen die Ports für http und https auf dem Server freigeschaltet werden. In meinem Fall habe ich eine Firewall ufw aktiv. Die Einstellungen nehme ich über SSH vor. Je nach Konfiguration kann es sein, dass Docker die Portfreigaben selbst organisiert.
sudo ufw allow http
sudo ufw allow https
sudo ufw reload
Proxy Host für Nginx Proxy Manager hinzufügen
Um eine Domain hinzufügen zu können, muss ich bei einem Anbieter meiner Wahl eine Domain gekauft haben. Diese Domain oder eine Subdomain meiner Wahl muss einen DNS-Eintrag erhalten. Der A-Record muss auf die IPv4 Adresse meines Servers mit dem Nginx Proxy Manager zeigen. Falls der Server eine IPv6 Adresse zusätzlich besitzt, muss der AAAA-Record mit der IPv6 Adresse gesetzt werden.
Hier zeige ich jetzt noch die Einstellungen für den Proxy Host auf meinen Nginx Proxy Manager. Ich gebe meine Domain ein und verweise auf den Container Namen. Als Port gebe ich den Port 81 ein, dieser verweist auf die Benutzeroberfläche. Die Container Namen finde ich in meiner Portainer Instanz unter den Containern.
Die Einstellungen sehen bei mir wie folgt aus:
Unter dem Punkt SSL nehme ich noch die Einstellungen vor, um ein SSL Zertifikat von Let’s Encrypt zu erhalten.
Den Eintrag sehe ich jetzt in der Proxy Hosts Liste.
Wenn ich meine Domain nun aufrufe, komme ich zum Login Fenster des Managers und kann mich anmelden und kann über eine verschlüsselte Verbindung weiter arbeiten.
Proxy Host für Portainer
Für die UI von Portainer mache ich das selbe Spiel im Nginx Proxy Manager nochmal. Dazu brauche ich eine weitere Domain oder Subdomain und verweise aber auf den Port 9000. Ein SSL Zertifikat lasse ich auch wie zuvor erstellen.
Ein kurzer check, indem ich im Browser die Domain aufrufe, zeigt mir einen 502 Fehler.
In den letzten Artikeln habe ich gezeigt, wie ich ein Netzwerk einrichte und dem Nginx Proxy Manager hinzufüge. Jeder Docker-Container, der über den Nginx Proxy Manager angesprochen werden soll, muss dem selben Netzwerk angehören. Ich hatte dazu das Docker-Netzwerk web angelegt.
Jetzt muss ich den Portainer Docker-Container dem Netzwerk web hinzufügen. Dazu gehe ich in meiner Docker-Container Liste auf den Portainer. Unten auf der Seite finde ich die Einstellungen zum Netzwerk. Da kann ich jetzt bequem das Netzwerk web hinzufügen.
Wenn ich jetzt die Domain für Portainer aufrufe ist die Fehlermeldung verschwunden und ich kann über eine verschlüsselte Verbindung mit Hilfe einer Domain weiter Docker-Container konfigurieren.
Nginx Proxy Manager Portfreigabe deaktivieren
Da die Portfreigabe von Docker übernommen wird und es sich nach aktuellem Stand nicht so einfach unterbinden lässt, kann ich dennoch verhindern, dass der Port 81 öffentlich verfügbar ist. Für den Portainer auf dem Port 9000 lässt sich das nicht so einfach über die Oberfläche verändern. Diesen Port werde ich jetzt auch nicht beachten.
Um den Port 81 im Nginx Proxy Manager nur lokal verfügbar zu machen, gehe ich in die Einstellungen des Docker-Containers. Dazu wähle ich den Docker-Container nginx-proxy-manager in der Container Liste aus. Oben klicke ich auf den Button Duplicate/Edit und kann jetzt die Einstellung für den Port 81 ändern. Hier verwende ich für den Host 127.0.0.1:81, damit ist der Port 81 nur auf der lokalen Maschine verfügbar und nicht mehr über das Internet.
Ich baue den Container neu und wähle bei der Warnmeldung, dass der Container ersetzt (Replace) werden soll. Wenn noch eine Firewall wie ufw im Einsatz ist, sollte hier auch der Port gelöscht werden.
Sowohl der Nginx Proxy Manager, als auch Portainer sind jeweils über eine Domain erreichbar und verschlüsselt.