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