Nginx Proxy Manager - Einführung und Installation
Der Nginx Proxy Manager ist ein auf Nginx basierender Reverse Proxy. Im Unterschied zu Nginx, bietet der Nginx eine Weboberfläche um die Einstellungen durchzuführen.
Vorraussetzungen
Folgende Vorraussetzungen müssen erfüllt sein, damit wir Nginx Proxy Manager installieren können:
- Docker und Docker Compose muss auf dem Rechner installiert sein.
Für das Austellen eines Let's Encrypt Zertifikat wird eine DNS Eintrag benötigt. Entweder man besitzt eine Domain oder man nutzt einen DynDNS Anbieter.
Vorbereitungen
Frontend Network
Damit der Nginx Proxy Manager zu den Services Routen kann, muss er natürlich auf diese Zugreifen können. Anwendungen die auf dem selben Host, innerhalb von Docker laufen, können dafür einfach in ein gemeinsames Netzwerk gesteckt werden. Dies hat zum anderen auch den Vorteil, das keine zusätzlichen Portfreigaben auf dem Host erstellt werden müssen, welche evtl. zusätzlich durch eine Firewall abgesichert werden müssen. Es empfiehlt sich dieses Netzwerk nicht mit Docker Compose anzulegen, sondern separat im vorhinein zu erstellen.
Docker Compose
Für die Installation nutzen wir Docker Compose. Dies macht es einfacher den kompletten Stack zu installieren.
version: "3.9"
services:
proxy:
container_name: proxy
image: 'jc21/nginx-proxy-manager:2'
restart: unless-stopped
ports:
- '81:81' # kann nach der Konfiguration der Route über den Proxy entfernt werden
- '80:80'
- '443:443'
environment:
- DB_MYSQL_HOST=proxy-db
- DB_MYSQL_PORT=3306
- DB_MYSQL_USER=$DB_USERNAME
- DB_MYSQL_PASSWORD=$DB_PASSWORD
- DB_MYSQL_NAME=$DB_NAME
volumes:
- proxy-data:/data
- proxy-certs:/etc/letsencrypt
healthcheck:
test: ["CMD", "/bin/check-health"]
interval: 5s
retries: 5
timeout: 3s
networks:
- frontend-net
- proxy-net
proxy-db:
image: mariadb:11.2
container_name: proxy-db
restart: unless-stopped
environment:
- MARIADB_ROOT_PASSWORD=$DB_ROOT_PASSWORD
- MARIADB_DATABASE=$DB_NAME
- MARIADB_USER=$DB_USERNAME
- MARIADB_PASSWORD=$DB_PASSWORD
volumes:
- proxy-db-data:/var/lib/mysql
networks:
- proxy-net
healthcheck:
test: ["CMD-SHELL", " healthcheck.sh --connect --innodb_initialized"]
interval: 5s
retries: 5
timeout: 3s
volumes:
proxy-data:
name: proxy-data
proxy-certs:
name: proxy-certs
proxy-db-data:
name: proxy-db-data
networks:
proxy-net:
name: proxy-net
frontend-net:
external: true
Umgebungsvariablen
Folgende Umgebungsvariablen müssen angepasst werden
| Umgebungsvariable | Beschreibung | Beispiel |
|---|---|---|
DB_USERNAME |
Der Datenbank Username | npm |
DB_PASSWORD |
Das Passwort des Datenbank User | secret-password |
DB_NAME |
Der Name der Datenbank | npm |
DB_ROOT_PASSWORD |
Das Root Password für die MariaDB Datenbank | very-secret-password |
Installation und Ersteinrichtung
Starten des Stacks
Nachdem die Einstellungen vorgenommen wurden, kann der Stack mit Hilfe des folgenden Befehls gestartet werden:
Anschließend werden die Images heruntergeladen und als Docker Container gestartet werden. Wenn alle Container gestartet sind, ist die Anwendung unter folgender URL erreichbar: http://<<HOSTNAME>>:81
Erstanmeldung
Nachdem alle Services gestartet sind, ist die Webkonsole unter folgender URL erreichbar: http://<<HOSTNAME>>:81. Für die Erstanmeldung sind folgende Credentials erforderlich:
Email: admin@example.com Password: changeme
Nach erfolgreichem Anmelden, wwird man aufgefordert diesen User anzupassen und das Passwort für diesen User zu ändern:
Hinzufügen eines Proxy Hosts
Um einen Proxy Host hinzufügen zu können, muss dieser vom NGINX Proxy Manager erreichbar sein. Für Container, die auf dem selben Server, bzw. dem selben Cluster laufen reicht es, wenn sich diese im selben Docker Netzwerk befinden. Dazu haben wir am Anfang das frontend-netNetzwerk angelegt und können nun die einzelnen Services diesem Netzwerk hinzufügen. Anschließend können die Services über die Admin Console hinzugefügt werden. Dazu geht man im NGINX Proxy Manager über Hosts->Proxy Hosts und anschließend auf Add Proxy Host.
Als ersten Proxy Host bietet es sich an, den NGINX Proxy Manager selber anzulegen. Hierfür benötigt man eine Domain, in unserem Beispiel habe ich meinen Rechner so eingestellt, das alle Anfragen die Domain und auch alle Subdomains auf .test auf die IP 127.0.0.1 gerouted werden. Für den NGINX Proxy Manager füge ich den Proxy Host proxy.test hinzu.
Anschließend ist NPM über die Domain http://proxy.test erreichbar, können ebenfalls den Port 81 in der Docker Compose als Portfreigabe entfernen und anschießend mit folgendem Befehl neustarten:
Wie geht es weiter
Wir haben nun die Möglichkeit weitere Proxy Hosts hinzuzufügen. In den nächsten Schritten werden wir den NGINX Proxy Manager besser kennenlernen und beschäftigen uns, unter anderem, mit Themen wie:
- TLS Zertifikate
- Let's Enrcypt
- Streams
- Access Lists


