Anleitung: nextcloud mit nginx reverse proxy und LetsEncrypt auf Docker
Beschreibung
Diese Anleitung beschreibt, wie man auf einem Docker-fähigen QNAP-System nextcloud mit folgenden Leistungsmerkmalen installiert:
- 5 Docker-Container auf einem QNAP hinter einem Internet-Router
- Nginx-Reverse-Proxy
- Lets-Encrypt-Companion
- Web-Server
- nextcloud
- Maria-DB
- verschlüsselter Aufruf über eine Subdomain, Portangabe nicht erforderlich
- SSL-Verschlüsselung auf Basis von kostenlosen LetsEncrypt-Zertifikaten, die automatisch verlängert werden.
- einfache Installation über ein docker-compose-File und ein paar Konfigurationsfiles
- einfache Aktualisierung der Docker-Container über 2 Befehle
- Daten und Konfigurationen bleiben auf Docker-Volumes erhalten
- Die Docker-Container können auch über die QNAP Container-Station gemanaged werden. Leider sind nicht alle Einstellungen aus dem docker-compose-File sichtbar.
Grundlagen
Diese Anleitung basiert auf folgendem Beispiel:
https://github.com/nextcloud/d…h-nginx-proxy/mariadb/fpm
Da wir hier in einem QNAP-Forum sind, ist die Anleitung und die angehängte Musterkonfiguration auf QNAP-Verhältnisse abgestimmt. Die Anleitung lässt sich aber sicher z.B. auch auf einem Ubuntu-System umsetzen.
Voraussetzungen
- Dockerfähiges QNAP-System hinter einem Internet-Router
Bei mir ist es eine Fritzbox. - Subdomain einrichten
Die Subdomain (z.B. cloud.example.com) muss mit einem Typ A- oder Typ CNAME-Record auf die feste IP oder die DynDns-Adresse des Netzwerks zeigen, in dem sich auch das QNAP-System befindet. Eine einfache Weiterleitung funktioniert nicht! - Ports 80 und 443 freimachen
Die Ports 80 und 443 sind möglicherweise auf dem Router und dem QNAP bereits belegt. Sie müssen dort durch andere Ports ersetzt werden, da sie später vom ACME-Protokoll des LetsEncrypt-Containers benötigt werden. Diese lassen sich meines Wissens aktuell (noch) nicht überschreiben. Ich hatte zu Anfang immer mit Port-Mappings gearbeitet. Dann hat aber das Generieren der Zertifikate nicht funktioniert. - Portweiterleitung im Router für Ports 80 und 443
Im Router muss jetzt eine Portweiterleitung für die Ports 80 und 443 auf die IP des QNAP-Systems eingerichtet werden. Auf diese Ports wird später der nginx-Reverse-Proxy lauschen. - Freigabe-Ordner auf QNAP
Die spätere Konfiguration basiert darauf, dass auf dem QNAP folgende Freigabe-Ordner angelegt sind:
Docker-Configs: für Docker-Konfigurationen
Docker-Volumes: für die persistenten Daten der Docker-Container
Konfiguration
- ssh-Zugang zum QNAP-System starten
Ich arbeite hierfür gerne mit MobaXterm. - Musterkonfiguration herunterladen
Die angehängte Musterkonfiguration nextcloud.zip herunterladen und im Freigabe-Ordner Docker-Configs als Ordner nextcloud entpacken. - Musterkonfiguration anpassen
In der Musterkonfiguration muss nun im File db.env das Passwort für die nextcloud-DB eingetragen werden. User nextcloud und DB-Name nextcloud bleiben unverändert.
Als nächstes wird das docker-compose.yml-File angepasst. Hier müssen folgende Werte geändert werden:
- <<meinPasswort>> > Master-PW für mariaDB
- cloud.example.com > Subdomain-Name
- <<name>>@example.com > User für LetsEncrypt-Benachrichtigungen
Build and Run
- Container erstellen
Auf der ssh-Konsole in den Konfigurationsordner wechseln
cd /share/CACHEDEV1_DATA/Docker-Configs/nextcloud/
und den Build aufrufen
docker-compose build --pull - Container starten
docker-compose up -d
Nach der Installation
- Warten
Nachdem die Docker-Container erstellt und gestartet wurden, sollte man erst einmal ca. 10 Minuten warten, bis sich die Container initialisiert haben. Insbesondere die Generierung des LetsEncrypt-Zertifikats für die Subdomain dauert eine Weile.
Die Volumes werden autmatisch angelegt und erscheinen unter /share/CACHEDEV1_DATA/Docker-Volumes/nextcloud/.
Insbesondere wird die Konfigurationsdatei für den nginx Reverse Proxy erzeugt. Man kann das Ergebnis unter /share/CACHEDEV1_DATA/Docker-Volumes/nextcloud/nginx-conf.d/default.conf ansehen.
Den Initialisierungsprozess kann man auch über die QNAP-Container-Station beobachten. - Abschließen der nextcloud-Installation
Um die nextcloud-Installation abzuschließen, ruft man jetzt die Subdomain über einen Browser auf. Auf der nun erscheinenden Anmeldemaske gibt man UserID und Passwort für den Admin-User ein und muss anschließend noch einmal eine Weile warten, bis im Hintergrund die nextcloud-Datenbank fertig eingerichtet ist.
Aktualisierung und Wartung
- Aktualisierung
Neue Containerversionen installiert man einfach durch erneutes Aufrufen der Schritte 1 und 2 unter Build and Run. Die Daten bleiben über die Volumes erhalten. - Spezielle Konfigurationen
Besonderheiten insbesondere für den nginx Reverse Proxy können über spezielle Templates/Includes nachkonfiguriert werden. Wie das geht, kann man unter https://hub.docker.com/r/jwilder/nginx-proxy/ nachlesen. - Container-Station
Über die Container-Station lassen sich Container stoppen und starten. Außerdem können weitere Informationen über Container, Images und Volumes eingesehen werden.
Spezielle Details bekommt man mit Hilfe von Original-Docker-Befehlen über die die ssh-Konsole.
Viel Erfolg beim Nachbauen
xgadscu