Um die Installationen im Docker von außen abzusichern und unsere Umgebung für mehrere Container unter einer IP_Adresse erreichbar zu machen, benötigen wir einen Proxy. Diese Funktion übernimmt in diesem Fall NGNIX als Proxy. Für eine Einfachere, grafische Bedienung über eine Ui nutzen wir nginx-proxy-manager. Dieser kann auch als Redirect- oder Streaming Host verwendet werden.
Als erstes legen wir in Portainer ein Netzwerk mit dem Namen npm-network an
Nur der Name des Netzwerks wird benötigt, alle anderen Einstellungen bleiben unverändert und abschließend gespeichert.
Als nächstes wird unter Stacks ein neuer Stach hinzugefügt und als nginx-proxy-manager benannt
und unter dem Punkt Web editor nachstehendes hineinkopiert
services:
npm-app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm-app
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
environment:
DB_MYSQL_HOST: "npm-db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
DB_MYSQL_NAME: "npm"
# Uncomment the line below if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- ./npm-data:/data:Z
- ./letsencrypt:/etc/letsencrypt:Z
depends_on:
- npm-db
networks:
- npm-network
- npm-internal
npm-db:
image: 'mariadb:latest'
container_name: npm-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
volumes:
- ./npm-data/mysql:/var/lib/mysql:Z
networks:
- npm-internal
networks:
npm-internal:
npm-network:
external: true
Da in diesem Skript zwei Umgebung Variablen gesetzt sind, MYSQL_ROOT_PASSWORD und DB_MYSQL_PASSWORD müssen diese noch eingetragen werden und die Entsprechenden Passwörter festgelegt werden
Abschließend wird auf Deploy the Stack geklickt um den Container zu initialisieren und zu startet.
Über https://IP-Adresse-des-Servers:81 wird auf die UI zugegriffen. Mögliche Zertifikatswarnungen müssen an dieser Stelle ignoriert werden.
Nach dem log in mit den initialen Anmeldedaten admin@example.com und dem Passwort changeme muss dieses sofort auf der nächsten Seite geändert werden.
Abschließend wird Portainer erreichbar gemacht. Hierzu wird unter Host – Neuer Proxy Host ein neuer Proxy Host hinzugefügt und wie dargestellt ausgefüllt
Hierbei ist darauf zu achten, dass der angegebene Domain Name im DNS entsprechend mit den A und AAA Record eingetragen ist und auf die IP des Servers verweist sowie eine gültige E-Mail-Adresse für Let`s Encrypt eingetragen ist.
Nach dem Speichern muss der Portainer Container noch mit dem npm Netz verbunden werden da dieser ansonsten nicht erreichbar ist. Hierzu wird unter Container der Container portainer geöffnet und am Ende der Seite das npm-network mit Join Network hinzugefügt.
Nun ist Portainer über https://portainer.example.com mit einem gültigen Zertifikat von Lets` Encrypt erreichbar.
Ähnlich können andere Container über NGINX Proxy Manager erreichbar gemacht werden.
Viel Erfolg!