Nginx Proxy Manager (VM/RPI)

Die Synology bringt zwar einen ReverseProxy mit, aber der NPM bietet einige Vorteile z.b. das man seine Subdomains nur an einer Stelle verwaltet inkl. der Zertifikate, man kann HTTPS einfacher erzwingen und es zeigen die offenen Ports nicht auf die Synology sondern auf einen Container (Sicherheit).

Wer noch keine Domain hat die er mit Dyndns nutzen kann sollte mal bei https://www.do.de/ gucken.

Voraussetzungen:

Eine Domain die auf den Router zeigt
Port 80/443 werden vom Router zum NPM weiter geleitet auf die VM oder den RPI, wo ihr den NPM laufen lasst.

Nachdem das erledigt ist legen wir nun die Ordner auf der Freigabe an, wer dem Beispiel gefolgt ist verbindet sich nun per SSH auf seine VM oder den RPI und legt die Verzeichnisse an

mkdir /syno/nginx
mkdir /syno/nginx/data
mkdir /syno/nginx/data/letsencrypt
mkdir /syno/nginx/data/mysql

nun öffnen wir den Portainer und legen einen Stack an

Name: nginxproxymanager

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    network_mode: bridge
    ports:
      - '80:80'
      - '81:81'        //das ist der Port worüber die Verwaltungsoberfläche aufgerufen wird, die erste Zahl kann nach eigenem Wunsch geändert werden
      - '443:443'
    environment:
      - DB_MYSQL_HOST=db
      - DB_MYSQL_PORT=3306
      - DB_MYSQL_USER=npm       //kann geänder werden muss dann aber auch unten unter mysql angepasst werden
      - DB_MYSQL_PASSWORD=npm       //kann geänder werden muss dann aber auch unten unter mysql angepasst werden
      - DB_MYSQL_DATABASE=npm       //kann geänder werden muss dann aber auch unten unter mysql angepasst werden
    volumes:
      - /syno/nginx/data:/data
      - /syno/nginx/data/letsencrypt:/etc/letsencrypt
    healthcheck:
      test: ["CMD", "/bin/check-health"]
      interval: 10s
      timeout: 3s
    restart: unless-stopped
  db:
    image: 'yobasystems/alpine-mariadb:latest'
    network_mode: bridge
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'       //siehe oben
      MYSQL_USER: 'npm'       //siehe oben
      MYSQL_PASSWORD: 'npm'       //siehe oben
    volumes:
      - /syno/nginx/data/mysql:/var/lib/mysql
    restart: unless-stopped

Die Passwörter (es darf kein $ im Passwort sein), der User und der DB Name kann geändert werden, also alles wo im Code npm steht.

Danach lässt sich der NPM, je nachdem wo ihr ihn nach unserem Beispiel installiert habt mit

http://192.168.2.20:81

aufrufen.

Die Standard Anmeldung lautet

Email:    admin@example.com
Password: changeme

Diese sollten sofort geändert werden nach der ersten Anmeldung

Die eigenen Host (Subdomains) lassen sich nun unter Proxy Hosts hinzufügen.