Wer verschiedene Webservices auf unterschiedlichen Geräte (Raspberry Pi usw.) in einem Netz betreibt und diese von aussen erreichen möchte hat folgendes Problem: Die entsprechenden Ports (z.B. Port 80 oder 443) können immer nur auf ein Gerät im Router von aussen freigegeben werden. Die Lösung hierfür ist der Nginx Proxy Manager.
Der Nginx Proxy Manager (NPM) ist ein sog. Reverse Proxy. Die Funktionsweise ist hierbei ganz einfach. Die Anfrage von aussen erfolgt über einen Domain-Namen (z.B. host1.myDomain.com) und wird vom NPM auf das entsprechende Gerät weitergeleitet. Kommt die Anfrage auf einen zweiten Host (z.B. host2.myDomain.com) wird diese and einen anderen Host um geleitet. Dabei werden von aussen die Ports 80 & 443 auf den NPM umgeleitet. Dieser spielt dann quasi den Vermittler von aussen und leitet die Anfrage an das entsprechende Gerät im Netz weiter. Dabei spielt es keine rolle, welches dies ist. Weiterhin lassen sich dann auch Ports umleiten. wird eine Anfrage z.B. auf http://host2.myDomain.com (Port 80) gestellt, kann diese Anfrage auf Geräte 3 Port 9010 weitergeleitet werden.
Dies bedingt aber, dass die entsprechenden Namen von aussen auflösbar sind. D.h., man muss entsprechend Zugang zu Namesverwaltung (DNS) haben um diese entweder auf eine feste IP umzuleiten, oder and einen DDS-Namen weiterleiten. An einem Beispiel erkläre ich dies im Video.
Damit der NPM auf dem Raspi installiert werden kann, muss vorher Docker installiert sein. Wie das geht habe ich hier beschrieben: Docker auf DietPi
Melde dich auf der Console deines Pi’s an und erstelle einen Order npm:
mkdir npm
Wechsle in dieses Ordner und erstelle eine Datei mit dem Namen config.json
nano config.json
Dies ist die Konfigurationsdatei für unseren NPM. Als nächstes kopiere den Inhalt in diese Datei:
{ "database": { "engine": "mysql", "host": "db", "name": "npm", "user": "npm", "password": "npm", "port": 3306 } }
Bitte beachte, dass unter password das Passwort npm als Beispiel gesetzt wurde. Wenn Du dies hier änderst, musst Die auch in der folgenden Datei anpassen. Dies ist das Passwort für den Zugriff auf die Datenbank, welches in allen Dateien gleich sein muss.
Als nächstem erstellen wir die Compose-Datei. Diese enthält die Anweisungen, welcher Docker Images installiert werden müssen und wie die einstellungen sind. Gebe dazu nano docker-compose.yml ein
nano docker-compose.yml
Kopiere folgenden Inhalt in diese Datei und speichere diese mit CTRL-x ab. Achte darauf, dass das Passwort mit dem Passwort in der config.json übereinstimmt.
version: '3' services: app: image: 'jc21/nginx-proxy-manager:latest' ports: - '80:80' #HTTP Traffic - '81:81' #Dashboard Port - '443:443' #HTTPS Traffic volumes: - ./config.json:/app/config/production.json - ./data:/data - ./letsencrypt:/etc/letsencrypt db: image: 'jc21/mariadb-aria:latest' environment: MYSQL_ROOT_PASSWORD: 'npm' MYSQL_DATABASE: 'npm' MYSQL_USER: 'npm' MYSQL_PASSWORD: 'npm' volumes: - ./data/mysql:/var/lib/mysql
Jetzt haben wir alles, was für die Installation der Container benötigt wird. Als nächstes werden die Container vom Docker Hub geladen und installiert. Es sind insgesamt 2 Container: Einen für die SQL Datenbank und einen für die eigentliche Anwendung. gib dazu folgenden Befehl ein:
docker-compose up -d
Wenn die Container geladen und gestartet sind, steht der NPM zur Verfügung. dies kann einen kleinen Moment dauern.
Damit nach einem Neustart des Pi die Container automatisch gestartet werden gibt nacheinander folgende Befehle ein:
docker update --restart always npm_app_1
docker update --restart always npm_db_1
Der Zugriff auf das Control-Panel vom NPN erfolgt über die IP des Pi’s und Port 81
http://ip.vom.pi: 81
Für die erste Anmeldung sind folgende Daten voreingestellt:
Benutzer: admin@example.com
Passwort: changeme
Diese müssen dann bei der ersten Anmeldung geändert werden. Jetzt kann man den NPM konfigurieren. Dies Beschreibe ich dann in einem folgenden Blog-Artikel.
Wenn Du das Projekt nachbauen möchtest findest Du die benötige Hardware und Software mit folgenden Links. Sämtliche vorgestellten Software-Tools sind kostenlos.
Raspberry Pi Hardware (Affiliate Link)
Raspberry Pi 4 : https://amzn.to/2EVzC8x
passendes Case passiv gekühlt: https://amzn.to/3rrw9Sj
Netzteil: https://amzn.to/3kd0wsV
SD-Karte: https://amzn.to/2XzHuTX
Falls benötigt:
SD-Card Reader: https://amzn.to/2EZhNWn
Lan Kabel: https://amzn.to/31nIk7j
Software:
DietPi: https://dietpi.com/
Balena Etcher: https://www.balena.io/etcher/
Bitvise SSH Client: https://www.bitvise.com/ssh-client-download
Lan Scanner: https://www.advanced-ip-scanner.com/de/
Notepad++: https://notepad-plus-plus.org
7Zip: https://www.7-zip.de