Mit dem richtigem Setup kann man Docker Container und andere Dienste ganz einfach über seine Domain und per SSL erreichen, das schöne dabei: Sofern man die Docker Container richtig konfiguriert hat man keine öffentlichen Ports. Falls du aber trotzdem für verschiedene Docker Container offene Ports brauchst gibt es auch verschiedene Möglichkeiten.
Vorraussetzungen
- Docker Server; in dieser Anleitung wird Portainer genutzt!
- Server mit öffentlicher iPv4 Adresse
Kapitel im Video
00:00 Intro
00:44 Nginx Proxy Manager installieren
02:01 Einführung in Nginx Proxy
04:00 DNS Eintrag für Proxy Service erstellen
04:50 SSL Zertifikat erstellen
05:19 Docker Container im Proxy Netzwerk erstellen
06:05 Container im Proxy hinzufügen
07:13 Firewall Einstellungen für öffentliche Ports
10:02 Ports durchgeben
10:57 Dienste aus anderen Netzwerken über den Proxy leiten
11:54 Outro
Nginx Proxy Manager installieren
Für den Nginx Proxy brauchst du diese Compose Datei, die 2 Container und ein Docker Netzwerk, die du in Portainer als Stack hinzufügst.
Die Compose Datei:
version: "3"
services:
server:
image: docker.io/gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/bruno/gitea-deploy:/deploy-gitea
networks:
- reverse-proxy
networks:
reverse-proxy:
external: true

Diesen Stack musst du dann nur doch erstellen!
Nginx einrichten
Dafür gehst du auf http://IP-Adresse:82

Die standard-Logindaten sind:
Username: admin@example.com
Passwort: changeme
Diese musst du nach dem ersten Login ändern!
Sofern du auf dem Dashboard landesst, kannst du zum nächsten Schritt gehen!
DNS Eintrag erstellen
Jetzt musst du im DNS Center deiner Domain einen A und AAA Record erstellen, beide sollten auf deinen Docker Host leiten! Ich habe es für dieses Tutorial mit https://youtube.technikfreaksyt.com gemacht!

SSL Zertifikat erstellen

Um zu diesem Menü zu kommen gehst du oben auf SSL und dann auf Add SSL Certificate, dort nimmst du dann LetsEncryot
Jetzt einfach bei Domain Name die Domain, cie du im DNS erstellt hast dort eingeben und dann auf „Test Server Rechability“ drücken!

Sofern eine Meldung mit grünem Hintergrund kommt kannst du die Terms of ervice von LetsEncrypt akzeptieren und das Zertifikat erstellen!
Docker Container über den Proxy laufen lassen
Dafür nehmen wir jetzt testweise einen Gitea Container, der keine öffentlichen Ports hat und im reverse-proxy Netzwerk vom Proxy ist. Diese Compose fügtst du wieder in Portainer als Stack hinzu(wie bei Nginx)
Die Compose Datei:
version: "3"
services:
server:
image: docker.io/gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/bruno/gitea-deploy:/deploy-gitea
networks:
- reverse-proxy
networks:
reverse-proxy:
external: true
Wenn du den Container erstellt hast, gehst du in Portainer auf Networks und wählst das „reverse-proxy“ Netzwerk aus!

Hier ist die IP in dem Fall 172.18.0.4, die merken wir uns jetzt!
Dienst zum Proxy hinzufügen
Jetzt erstellst du einen Proxy Host und füllst die Felder aus

- Bei Domain Names die Domain
- Bei Scheme bleibt https
- Bei der IP kommt die IP vom Container
- Bei Port 3000, da das der Gitea Port ist
- Die Optionen können alle gerne an!

Hier das Zertifikat auswählen und alle Optionen aktivieren!

Wenn du dann auf save gedrückt hast, sollte es funktionieren!
Ports werden benötigt?!
Sofern du einen Container hast, wie z.B. WordPress, der Ports benötigt und mit dem Proxy so nicht klar kommt, kannst du folgendermaßen machen:
Firewall offene Ports(TCP/UDP): 22 -> 8122
Firewall geschlosse Ports(TCP/UDP): 8123 ->10123
Ausnahme: Der Server selbst kann durch
Dadurch kann der Server auf die Ports zugreifen und du packst das Webinterface diese Dienste einfach auf die Ports, die für fremde blockiert werden!
Ports durchgeben:
Sofern du Ports durchgeben möchtest, fügst du sie wie beim FTP Beispiel in der Compose von Nginx hinzu(Da ist ein FTP Port kommentiert), das Format ist: HOST:CONTAINER der Container Port muss der Port vom Service sein, und der HOST Port, durch den das von Nginx geleitet wird!

Dafür gehst du im Nginx Dashboard auf Streams und erstellst einen neuen und wählst die Sachen passend aus!
Icoming Port = HOST Port
Forward Port = Container PORT
Forward Host = der Container/Server von dem der Port ist
Natürlich kannst du die Ports auch einfach im offenen Firewall Bereich haben!
Geräte in anderen Netzwerken
Sofern du einen Server Zuhause hast, der über den Proxy laufen soll, kannst du auf den Server & Docke r Host einfach Tailscale installieren und dann in Nginx die Tailscale IP auswählen!
Kommentare