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
Ubuntu
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
Debian
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
Beide Betriebssysteme:
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!