Kontakt

Carsten Rieger IT Services
Am Danglfeld 8 | 83132 Pittenhart
Telefon: 08624.9009794
E-Mail: info@c-rieger.de

nginx Proxy Manager mit Nextcloud

Wir zeigen Ihnen in dieser Anleitung, wie Sie den nginx Proxy Manager (npm) unter Debian 12 oder Ubuntu 24 installieren, einrichten und bspw. Ihre Nextcloud, mit TLS Zertifikaten von Let’s Encrypt abgesichert, dahinter erreichbar machen können.

Melden Sie sich per SSH an Ihrem npm-Server an, wechseln dann in den sudo-Modus und aktualisieren zuerst ihr System:

sudo -s
apt update && apt upgrade -y

Installieren Sie die notwendige Basissoftware:

apt install -y apt-transport-https ca-certificates curl software-properties-common ufw

Richten Sie die Firewall (ufw) ein:

ufw allow 80/tcp comment "LetsEncrypt (http)"
ufw allow 81/tcp comment "NPM-Login"
ufw allow 443/tcp comment "LetsEncrypt (https)"
ufw allow 22/tcp comment "SSH"
ufw logging medium
ufw default deny incoming
ufw enable
systemctl restart ufw.service
ufw status verbose
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update && apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Verlassen Sie den sudo-Modus:

exit

Wechseln Sie in Ihr Homeverzeichnis und legen das Basisverzeichnis an:

cd ~
mkdir ~/nginx-proxy-manager/ && cd ~/nginx-proxy-manager/

Erstellen Sie die peristenten Ordner und die Docker-Konfigurationsdatei:

mkdir -p ~/nginx-proxy-manager/{letsencrypt,data,mysql}
nano docker-compose.yml

Fügen Sie den gesamten Inhalt in die docker-Datei ein:

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
    environment:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
      # Nutzen Sie kein IPv6, so entfernen Sie das '#'-Zeichen vor der nächsten Zeile
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - db
  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
      MARIADB_AUTO_UPGRADE: '1'
    volumes:
      - ./mysql:/var/lib/mysql

Speichern udn verlassen Sie diese Datei. Fügen Sie dann Ihren Benutzer der Gruppe „docker“ hinzu, um den Container selbst verwalten zu können:

sudo usermod -aG docker $USER

Laden Sie docker-compose herunter und markieren es als ausführbar:

sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep '\"tag_name\":' | sed -E 's/.*\"([^\"]+)\".*/\1/')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Melden Sie sich aus der SSH-Session ab und wieder neu an. Wechseln Sie in das npm-Verzeichnis:

cd ~/nginx-proxy-manager

Starten Sie den nginx Proxy Manager

docker-compose up -d

Rufen Sie die Administrationsoberfläche im Browser auf, passen Sie die IP-Adresse des nginx Proxy Managers entsprechend an:

http://10.10.10.8:81/login

Die Standard-Zugangsdaten lauten:

Email:    admin@example.com
Password: changeme

Ändern Sie Ihre Anmeldedaten:

Ändern Sie das Standardpasswort:

Erstellen Sie zuerst die SSL-Zertifikate für Ihre Nextcloud. Wechseln Sie dazu auf SSL Certificates:

Tragen Sie Ihre Domain ein und testen die Erreichbarkeit. Wird diese als erfolgreich quittiert so stimmen Sie den Let’s Encrypt ToS zu und beantragen über SAVE Ihre Zertifikate:

Nach dem erfolgreichen Einrichten der Zertifikate wechseln Sie zu den Host-Einstellungen und richten den Proxy Host ein:

Richten Sie den Proxy Host für Ihre Nextcloud ein.

Unter Advanced tragen Sie bitte Folgendes ein:

proxy_read_timeout 300;
proxy_pass_header X-Transmission-Session-Id;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Haben Sie die Nextcloud noch nicht installiert, so folgen Sie dieser Anleitung:

Passen Sie am Nextcloud Server die globale Konfigurationsdatei nginx.conf wie folgt an. Melden Sie sich dazu in einer weiteren SSH-Session am Nextcloud Server an und bearbeiten den Webserver wie folgt:

sudo nano /etc/nginx/nginx.conf
[...]
set_real_ip_from 10.10.10.8;
[...]

Die in rot dargestellte IP ersetzen Sie bitte mit der IP ihres nginx Proxy Managers. Dadurch wird sichergestellt, dass die korrekte IP Adresse in den Logdateien ankommt und somit Sicherheitsmechanismen bspw. crowdsec oder fail2ban entsprechend korrekt agieren können.

Starten Sie den Nextcloud-Webserver neu

sudo systemctl restart nginx.service

Am Nextcloud Webserver werden die self-signed-SSL-Zertifikate verwendet, da die TLS-Terminierung am nginx Proxy Manager auf Basis der Let’s Encrypt Zertifikate erfolgt. Die Kommunikation zwichen dem nPM und der Nextcloud erfolgt dabei weiterhin verschlüsselt über TLS 1.3.

Exemplarisch sehen Sie im nachfolgenden Screenshot einen Auszug aus dem nextcloud.log vor und nach dieser Anpassung. Zuerst wird die interne IP des NPM (10.10.10.8) durchgereicht. Nach dieser Anpassung finden Sie die „reale“ externe IP des Anfragenden im Log wider.

Sie erreichen nun Ihre Nextcloud über Ihre Domain über den nginx Proxy Manager, bspw. https://ihre.cloud.de

Wir wünschen Ihnen viel Spaß mit Ihrem nginx Proxy Manager und Ihrer Nextcloud. Über Ihre Unterstützung (diese wird ordnungsgemäß versteuert!) würden sich meine Frau, meine Zwillinge und ich sehr freuen!

Carsten Rieger IT-Services | Slogan