Swarm Nginx Proxy Manager

Änderungsstand: 2023-03-18

Ja, man kann den Nginx Proxy Manager (NPM) auch auf dem Cluster Swarm legen. Ich verwende folgendes Szenario nicht! Bei mir läuft NPM auf einem eigenständigen Gerät. Natürlich testete ich auch diese Vorgehensweise, um sicher zu sein, dass alles funktioniert.

Nginx Proxy Manager, kurz NPM, als Anwendung im Swarm Mode. Meine angelegte NFS-Freigabe für das Datenverzeichnis ist /mnt/data/… Im Gegensatz zur normalen Docker-Compose, kann Portainer bzw. der zu erstellende Service keine Verzeichnisse selbst anlegen. In diesem Fall lege ich die benötigten Verzeichnisse selbst an.

Ich verwende eine NFS-Freigabe als Datenpfad. Diese Freigabe habe ich an allen Nodes unter /mnt/appdata eingebunden. Der Pfad des NFS-Servers für diese Testreihe lautet: 192.168.1.39:/mnt/user/nfspath/appdata/.

Nicht vergessen, die Pfade, am ersten Manager, anzulegen!

sudo mkdir -p /mnt/appdata/{npm,npm-letsencrypt}

Im Portainer:

  • Stacks
    • + Add stack
      • Name: npm
      • Web editor: Folgenden Code eingeben:
version: "3.2"
services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    ports:
      - 80:80
      - 81:81
      - 443:443
    volumes:
      - npm-data:/data
      - npm-le:/etc/letsencrypt
    environment:
      DISABLE_IPV6: 'true'
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == worker]
      restart_policy:
        condition: any
    networks:
      - proxy_network
volumes:
  npm-data:
      driver: local
      driver_opts:
        type: "nfs"
        o: "nfsvers=4,addr=192.168.1.39,rw"
        device: ":/mnt/user/nfspath/appdata/npm"
  npm-le:
      driver: local
      driver_opts:
        type: "nfs"
        o: "nfsvers=4,addr=192.168.1.39,rw"
        device: ":/mnt/user/nfspath/appdata/npm-letsencrypt" 

networks:
  proxy_network:
    driver: overlay
    attachable: true

Actions: Deploy the stack

Nginx Proxy Manager wird installiert und gestartet. Das dauert ’ne Weile, bis alles eingerichtet wurde. Im Browser dann die Server-IP:81 eingeben.

Erster Login:

Email address: admin@example.com

Password: changeme

Erscheint die Fehlermeldung „Bad Gateway“, einfach noch etwas warten und dann erneut einloggen.

Jetzt noch die Anmeldedaten ändern und „NPM“ ist einsatzbereit.

Info: Wurde keine Portfreigabe des Routers für die Ports 80 und 443 zu dem Gerät mit dem NPM gesetzt, wird NPM zwar zu starten sein, aber keine Zertifikate laden können!

Um nun einen Dienst von Außen zu starten, gebe ich ausschließlich, für den jeweiligen Dienst, die IP-Adresse des ersten Managers an. Egal, ob der Dienst nun auf alle Nodes oder nur auf Manager-Nodes oder nur auf Worker-Nodes ausgerollt wurde. Der Manager leitet die Anfrage, zu dem gerade verwendeten Node, weiter. Dafür ist der schließlich da 🙂 .

Wie man nun Nginx Proxy Manager verwendet, zeige ich in den jeweiligen Guides für WordPress und Nextcloud.

Noch einmal zur Info: NPM funktioniert nur richtig, wenn die Portfreigaben im Router zum Gerät, auf welchem sich NPM befindet, gesetzt wurden, und, wenn man keine feste IP-Adresse inkl. Domain hat, ein DynDNS-Dienst eingerichtet wurde. Für meine Beispiele stelle ich meist DuckDNS vor.

Quelle:

https://nginxproxymanager.com/guide/#project-goal

https://nginxproxymanager.com/advanced-config/#best-practice-use-a-docker-network

Erstelle eine Website wie diese mit WordPress.com
Jetzt starten