Zum Inhalt

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.

NPMScreenshot.png

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 network create frontend-net

Docker Compose

Für die Installation nutzen wir Docker Compose. Dies macht es einfacher den kompletten Stack zu installieren.

mkdir -p npm
cd npm
nano docker-compose.yaml
docker-compose.yaml
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:

docker compose up -d

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:

Edit Username

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.

NPMScreenshot.png

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:

docker compose up -d

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