IT Projekte / Home Lab / Smart Home / Games

Allgemein, Docker, Raspberry Pi

Nginx Proxy Manager installieren 2024

Betreibe Deinen eigenen Reverse Nginx Proxy zu Hause, um Deine Services auch von außen zugänglich zu machen und sichere sie dabei noch kostenlos mittels SSL-Zertifikat ab.

1. Nginx Proxy Manager Ordner anlegen

Erstelle einen neuen Ordner, in dem die Daten von Nginx gespeichert werden. So bleiben die Daten persistent gespeichert und werden nicht gelöscht, wenn der Container neu gestartet wird.

mkdir nginxproxymanager
cd nginxproxymanager

2. Fritz!Box Port Forwarding / Weiterleitung

Damit das am Ende funktioniert, musst Du in der Fritz!Box die Ports 80, 443 des Rechners, auf dem der Nginx Proxy Manager installiert und betrieben werden soll, öffentlich zugänglich machen. Dies ist notwendig, um später die SSL-Zertifikate erstellen zu können. Gehe dazu unter Internet –> Freigaben –> Portfreigaben und füge mit dem Gerät die entsprechenden Ports hinzu.

Verfügst Du nicht über eine eigene Domain, kannst Du auch einen DnyDNS verwenden. Diesen musst Du unter DynDNS in Deiner Fritz!Box hinterlegen und die Vorgehensweise ist im Anschluss die gleiche.

3. Docker Compose Datei erstellen

Erstelle in diesem Ordner eine docker-compose.yml-Datei.

nano docker-compose.yml

Füge folgendes in der Datei hinzu:

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
    environment:
      # Mysql/Maria connection parameters:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - db

  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - ./mysql:/var/lib/mysql

Speicher und schließe die Datei mit Strg + S und Strg + X .

Die Datei beinhaltet zwei Services, einmal app und einmal db. Die App ist der Nginx Proxy Manager, welcher ohne Unterbrechung laufen soll, deshalb unless-stopped.

Ports 80, 443 werden benötigt, um später die Services später öffentlich zugänglich zu machen. Und der Port 81 dient als Administrations-Konsole, weshalb dieser nicht öffentlich zugänglich sein sollte.

Mittels der Environments, wird der zweite Service, die Datenbank, mit dem Nginx Proxy Manager verbunden.

Damit die Daten auch persistent gespeichert werden, müssen unter den Volumen die Speicherpfade der Daten angegeben werden.

Achtung! Die Environments der Datenbank und dem Nginx Proxy Manager sollten mit etwas Sichererem als npm ersetzt werden. Hierbei ist zu beachten, dass diese sich zwischen den Services nicht unterscheiden dürfen. Sonst kann keine Verbindung / Kommunikation zwischen der Datenbank und dem Nginx Proxy Manager bestehen.

Nginx Proxy Manager - Anlegen des Docker Compose Files
Nginx Proxy Manager – Anlegen des Docker Compose Files

4. Starte den Nginx Proxy Manager

Deine Docker-Compose.yml-Datei kannst Du mit einem einfachen

docker-compose up

starten. Für den Anfang kann dies spannend sein, um zu wissen, was passiert. Später kann man einfach noch ein -d am Ende dranhängen, um die Log-Ausgabe zu deaktivieren. Hierbei werden zu beginne die benötigten Images heruntergeladen und die Container im Anschluss deployed. Das initiale Erstellen kann einen Moment dauern. Ist aber soweit alles erfolgreich beendet, dann kannst Du mittels der IP-Adresse und dem Port 81 auf Deinen Nginx Proxy Manager zugreifen.

5. Erste Einrichtung Login Nginx Proxy Manager

Die initiale E-Mail-Adresse und Passwort sind:

Email:    admin@example.com
Password: changeme
Nginx Proxy Manager - Login
Nginx Proxy Manager – Login

Nach dem Login kannst Du den Namen und Nicknamen des Administrators anpassen. Die E-Mail-Adresse solltest Du zu einer ändern, auf die Du auch Zugriff hast.

Nginx Proxy Manager - Administrator anlegen
Nginx Proxy Manager – Administrator anlegen

Im Anschluss wirst Du dazu aufgefordert, das Passwort von changeme zu einem neuen sichereren Passwort zu ändern.

Nginx Proxy Manager - Passwort des Administrators ändern
Nginx Proxy Manager – Passwort des Administrators ändern

6. SSL-Zertifikat erstellen

Lege bei einem DNS Provider Deiner Wahl eine Domain an, welche auf die IP-Adresse, Deines Routers verweist. Da Du in zum Beispiel Deiner Fritz!Box bereits die Ports freigeben hast, sollte eine Verbindung ohne weiteres möglich sein. Stimme den Let´s Encrypt AGBs zu und speichere Deine Einstellungen. Dieser Vorgang kann dann ein paar Minuten in Anspruch nehmen.

Nginx Proxy Manager - Füge ein neues SSL-Zertifikat hinzu
Nginx Proxy Manager – Füge ein neues SSL-Zertifikat hinzu

Füge den Namen Deiner Domain und Deine E-Mail-Adresse ein.

Nginx Proxy Manager - Erstelle ein Let's Encrypt Zertifikat
Nginx Proxy Manager – Erstelle ein Let’s Encrypt Zertifikat

Speichere Dein Let’s Encrypt Zertifikat ab.

Nginx Proxy Manager - Speicher Dein Let's Encrypt Zertifikat
Nginx Proxy Manager – Speicher Dein Let’s Encrypt Zertifikat

Nginx Proxy Manager - Deine Let's Encrypt Zertifikate
Nginx Proxy Manager – Deine Let’s Encrypt Zertifikate

7. Proxy Host erstellen

Jetzt, wo wir ein SSL-Zertifikat erfolgreich angelegt haben, kannst Du anfangen, Deinem Service die Domain zuzuweisen, welche durch das SSL-Zertifikat geschützt wird. Achtung! Dabei ist zu beachten, dass diese dann ebenfalls von außerhalb erreichbar ist.

Nginx Proxy Manager - Lege einen Host an
Nginx Proxy Manager – Lege einen Host an

Achte darauf, dass Deine Domain, die gleiche ist wie bei den SSL-Zertifikaten, weil es sonst zu Problemen kommen kann. Wähle im Anschluss Deinen Server und Port, auf dem Dein Service aktuell läuft, in meinem Falle teste ich es für diese Anleitung mit Grafana. Nutze ebenfalls das richtige Scheme und aktivieren Cache Assets und Block Common Exploits.

Nginx Proxy Manager - Erstelle einen neuen Proxy Host
Nginx Proxy Manager – Erstelle einen neuen Proxy Host

Im Reiter SSL fügst Du das zuvor angelegte Zertifikat hinzu und aktivierst auch hier Force SSL, HTTP/2 Support und HSTS. Dann speicher Deine Einstellungen.

Nginx Proxy Manager - Füge das SSL-Zertifikat mit hinzu
Nginx Proxy Manager – Füge das SSL-Zertifikat mit hinzu

Nginx Proxy Manager - Deine Proxy Hosts
Nginx Proxy Manager – Deine Proxy Hosts

Wenn Du nun die Seite aufrufst, dann solltest Du jetzt über Deine Domain auf Deinen Service zugreifen können.

Lokal im eigenen Netzwerk über die IP-Adresse und ohne gültiges SSL-Zertifikat:

Nginx Proxy Manager - Grafana im lokalem Netzwerk
Nginx Proxy Manager – Grafana im lokalem Netzwerk

Aktuell noch öffentlich zugänglich und das mittels SSL-Zertifikat.

Nginx Proxy Manager - Grafana über den Proxy erreichbar
Nginx Proxy Manager – Grafana über den Proxy erreichbar

8. Access Lists Zugriffe verwalten

Mithilfe der Listen kannst Du zum einen kontrollieren, wer auf Deine Seiten Zugriff erhält mittels der Basic Authentication mit Nutzername und Passwort, aber Du kannst im gleichen Zuge auch zusätzlich IP-Adressen angeben, welche zugreifen dürfen und welche nicht. Wenn Deine Services nicht von allen erreicht werden sollen, dann empfehle ich Dir auch hier Einstellungen vorzunehmen.

Nginx Proxy Manager - Access Liste hinzufügen
Nginx Proxy Manager – Access Liste hinzufügen

Da ich meinen Service auch von außen erreichbar haben möchte, lasse ich die Einstellungen der IP-Adresse in diesem Falle weg. Jedoch sollte auch schon die Basic Authentication genügen, da der Service erst geladen / übermittelt wird vom Nginx, wenn die richtigen Anmeldedaten angegeben wurden.

Vergebe einen Namen und schalte beide Regler ein. Klicke nicht auf Save, sondern wechsel auch hier über die Reiter.

Nginx Proxy Manager - Namen vergeben
Nginx Proxy Manager – Namen vergeben

Achtung! Wenn Du mehrere Nutzer anlegen möchtest, dann füge zu Beginn die Anzahl der benötigten Felder hinzu, weil mit einem Klick auf Add, werden die bereits ausgefüllten Felder wieder geleert.

Nginx Proxy Manager - Nutzer hinzufügen
Nginx Proxy Manager – Nutzer hinzufügen

Das gilt auch für den Add Button unter dem Reiter Access. Hier kannst Du IP-Adressen oder auch IP-Adressbereiche angeben, welche nur Zugriff erhalten sollen. Wenn Du aber, wie ich den DNS-Server im Internet nutzt, dann macht es wenig Sinn hier die IP-Adressen zu pflegen, weil Du Deinen eigenen DNS-Server ggf. aussperrst.

Nginx Proxy Manager - IP-Adressbereiche pflegen
Nginx Proxy Manager – IP-Adressbereiche pflegen

Zum Ende speichere Deine Einstellungen und wechsel zu Deinem Host, welcher über die Access List verfügen soll.

Nginx Proxy Manager - Access List dem Proxy Host zuweisen
Nginx Proxy Manager – Access List dem Proxy Host zuweisen

9. Nutzer verwalten

Für die Administration des Nginx Proxy Manager kannst Du weitere Personen mit anlegen und pflegen. Hier besteht auch die Möglichkeit einzustellen, was welcher Nutzer sehen, bzw. ändern darf.

10. Fazit

Es ist ein super Projekt, wenn es darum geht, schnell und einfach mal einen Service öffentlich zugänglich zu machen. Oder im eigenen Netzwerk nicht mehr die IP-Adresse jedes Mal eingeben zu müssen, sondern mittels Autovervollständigung den DynDNS nutzen zu können. Und für mehr würde ich das Projekt aktuell nicht nutzen. Ich bin bei meinen Recherchen unter anderem auch auf ein Video gestoßen, welches die hunderten von Issues anspricht, welche auf der GitHub-Seite zusehen sind. Deshalb es kann ein nützliches Tool sein, wenn es darum geht im eigenen Netzwerk seine Nextcloud mittels nextcloud.dnydns.xyz aufzurufen und nicht über die IP-Adresse + Port.

Quellen:

Titelbild von Nginx Proxy Manager und Docker