Ä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:
- + Add stack
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