Heute möchte ich euch zeigen, wie ihr mit einer Synology NAS eine private Cloud einrichten könnt. Dazu installieren wir auf einem Synology NAS System die beliebte Nextcloud Umgebung als Data Storage System.
Was könnt ihr damit tun? Ich nutze die private Cloud, um Daten mit Freunden und der Familie zu teilen. Fotos, die ich mit dem Smartphone aufnehme, lädt die passende Android App automatisch in die Nextcloud.
Was werden wir alles tun? Wir werden auf der Synology 218+ die Docker-Anwendung installieren, ein Datenbankimage, das Nextcloud-Image, und ein Zertifikat installieren, sowie verschiedene Weiterleitungen einrichten. Ich nutze hier die Synology DS 218+.
Diese verfügt über einen Dual Core Intel-Prozesssor, sowie 2GB RAM und im Moment sind 4TB für Daten vorgesehen. Das Model verfügt über mehr als 100MB Datentransferrate pro Sekunde, sowie das Btrfs-Dateisystem.
Die Herausforderung ist, dass ich die Nextcloud auf der Synology 218+ betreiben möchte, sie aber unter der indibit.de Domain erreichbar sein soll. Dafür nutze ich eine einfache Redirect Chain.
Inhalt
Synology, Docker und Nextcloud installieren und einrichten
Wir installieren heute als erstes Docker auf der Sysnology. Docker ist ein System zur Applikationsvirtualisierung. Das heißt, die Applikationen werden nicht als solche auf der Synology (oder welchem Host-System auch immer) direkt installiert sondern sind in der Docker-Infrastrukur als Abbild bzw. Container vorhanden. Diese Container können von anderen Docker-Containern oder aus dem Netzwerk heraus angesprochen werden. Die Container können bei Bedarf gestartet und beendet werden, sowie lassen sich zum Installationszeitpunkt Dateipfade auf das Host-System ausleiten, so der Host bzw. User des Hosts auf die Daten des Containers über das Filesystem zugreifen können.
Das Docker Container-Management auf einer Synology lässt ein einfaches installieren der Container zu, ohne das hier die Kommandozeile bemüht werden muss.
Wer mehr über Docker, die Technologie dahinter, deren Anwendungszweck usw. erfahren möchte, dem sei dieses Buch hier ans Herz gelegt!
Über das Paketzentrum suchen wir nach „Docker“ und installieren das Paket.
Container herunterladen
Nach dem Start der Docker-Anwendung müssen wir zwei Container kopieren und installieren. Eine Datenbank und die Nextcloud selbst. Der Einfachheit halber installieren wir MariaDB (MySQL-Ableger) und den Nextcloud Container. In der Docker-Anwendung können unter dem Menü „Registrierung“ die passenden Images geladen werden.
Die Docker Container aktivieren
Die Images (Abbilder in der Docker-Verwaltung genannt) sind heruntergeladen. In dem Abschnitt „Abbilder“ können wir die einzelnen heruntergeladen Images sehen.
Der nächste Schritt:
Aus den heruntergeladenen Images machen wir jetzt lauffähige Container. Dazu brauchen die Images noch eine Parametrisierung wie Speicher- und Netzwerkeinstellungen.
Netzwerkeinstellungen
Die Anschluss der Container an das Netzwerk kann auf drei Wegen stattfinden.
- Ein Container kann direkt an das Netzwerk des Hosts angeschlossen werden, so dass er „normal“ über die IP des Hosts erreichbar sind. In dem Fall sind die Netzwerkdienste des Containers direkt erreichbar.
- Ein Container kann über eine Netzwerkbrücke erreichbar gemacht werden. Dieser sog. Bridge mode kapselt den Container stärker als in Fall 1. Der Container ist nicht direkt aus dem Netzwerk erreichbar, sondern für ihn müssen erst noch Portweiterleitungsregeln definiert werden. Der Vorteil ist hier, dass schon belegte Ports des Hosts über frei belegbare Ports in den Container gemapped werden können. Beispiel: der Host und Container lauschen beide auf Port80. Somit kann ein Mapping von z.B. 8080 auf 80 erfolgen. Der Host stellt in diesem Fall Port 8080 zur Verfügung – bei Zugriff leitet die Docker-Anwendung den Netzwerkverkehr auf Port80 des Containers um.
- Dediziertes eigenes Docker-internes Netzwerk. Container innerhalb dieses eigenen Netzwerkes, welchen auf dem Host definiert wird, können dann direkt miteinander kommunizieren.
Für dieses Beispiel machen wir es so, dass die Datenbank im Hostnetz betrieben wird und die Nextcloud über eine Bridge erreichbar ist, da Port 80 und 443 von der Synology schon genutzt werden. Wie die Nextcloud erreichbar gemacht wird, zeige ich später.
Pfade für Docker-interne Ordner
Container-interne Pfade können von außen (der Synology-File-Station) zugänglich gemacht werden, so dass diese auf dem Host zugänglich sind. Vorteil: in Konfigurationsdateien können Änderungen vorgenommen werden. Dateien und Ordner lassen sich direkt in ein Backup einbeziehen, ohne den kompletten Container zu sichern.
Der MariaDB – Container
Das Image haben wir schon heruntergeladen. Nun machen wir aus dem Image einen lauffähigen Container:
In dem Bereich Abbild wählen wir erst das mariadb:latest Image aus und klicken dann auf starten. Und Nein, in dem Fall wird nicht der Container gestartet sondern sondern der Konfigurationsdialog.
An dieser Stelle vergeben wir einen Namen für den Container, belassen alle Standardeinstellungen und klicken auf „Erweiterte Einstellungen“
Folgende Einstellungen setzen wir:
- Automatischer Neustart aktivieren
- Volume: Ordner hinzufügen -> neuer Ordner -> „Docker“ und darunter „mariaDB“. MountPfad:
/var/lib/mysql
- Netzwerk: das selbe Netzwerk wie Docker Host verwenden
- Umwelt: neuer Parameter:
MYSQL_ROOT_PASSWORD
und ein beliebiges Passwort. Ein Hinweis an dieser Stelle: Ich hatte beim ersten Test ein Sonderzeichen im Passwort, womit ein Login im Nachgang nicht mehr möglich war. Deshalb nutze ich hier zum Testen ein einfaches Passwort (pass1234
) . - klick auf „Übernehmen“ -> „Weiter“ -> „Übernehmen“
Datenbank und Nutzer anlegen
Dieser MariaDB Container kann nun beliebige Datenbanken beherbergen – nicht nur für Nextcloud, auch andere Anwendungen. Im nächsten Schritt legen wir eine Datenbank und einen Nutzer an. Diese werden dann von Next Cloud genutzt.
In der Docker Anwendung ist dazu unter „Container“ der mariadb-Container auszuwählen. Mit einem Klick auf „Details“ öffnet sich ein Parametrisierungsdialog. Der Reiter „Terminal“ muss geöffnet, auf „Erstellen“ und dann auf „bash“ geklickt werden
Als nächstes erstellen wir die Datenbank (Datenbankname: nextcloud
) und erstellen einen berechtigten User (username: nextadm
mit Passwort pass1234
). Erst erfolgt das Einloggen des root-Users mit dem Passwort, welches in dem Container-Parameter MYSQL_ROOT_PASSWORD
vergeben wurde (in diesem Beispiel pass1234
)
mysql -p create database nextcloud; create user 'nextadm'@'localhost' identified by 'pass1234'; grant all privileges on nextcloud.* to 'nextadm'@'%' identified by 'pass1234';
Damit ist die Bereitstellung der MariaDB-Datenbank als Dockercontainer sowie als nutzbare Datenbank selbst abgeschlossen.
den Nextcloud Container bereitstellen
Auf dem selben Weg wie bei MariaDB erzeugen wir aus dem Abbild/Image heraus den lauffähigen Container. Dazu klicken wir wieder unter „Abbild“ auf Nextcloud und auf den Button Starten
Folgende Parametrisierung vergeben wir:
Containername: nextcloud
und tragen unter den „erweiterten Einstellungen“ folgendes ein:
- automatischer Neustart aktiviert
- Volume unter dem Ordner „docker“ erzeugen wir einen neuen Ordner: „nextcloud“ und tragen als MountPfad
/var/www/html
ein - Netzwerk: bleibt unverändert auf Bridge
- Port-Einstellungen: unter lokaler Port änderen wir von automatisch auf 8080
und klicken im Anschluss auf „Übernehmen“ -> „Weiter“ -> „Übernehmen“
Im Anschluss sehen wir unter „Übersicht“, dass beide Container laufen und deren Auslastungsinformationen:
Portweiterleitungen einrichten
Damit ein Zugriff aus dem Internet auf unsere lokale Nextcloud Instanz möglich wird, richten wir eine Portweiterleitung ein.
Wir leiten die Ports 80 und 443 auf die IP der Synology um. Beispielhaft zeige ich hier die Konfiguration an meinem WRT-Router.
ein Zertifikat installieren
Damit der Transport der Daten vom Server zum Client über die Leitung verschlüsselt ist, installieren wir ein Zertifikat. Dieses Zertifikat liegt nicht in den Docker Containern, sondern direkt auf der Synology selbst. Da der Endpunkt die Synology ist, reicht das an dieser Stelle so aus. Wir beziehen von Let’sEncrypt ein kostenloses anerkanntes Zertifikat, welches die Verbindung absichert.
Wie habe ich es gemacht? Die Synology steht zuhause im LAN und ist über einen DynDNS Provider von außen, aus dem Internet, erreichbar. Ich möchte aber, dass die Nextcloud über den Domainnamen next.indibit.de erreichbar ist.
Folgende Konfiguration liegt also vor:
- Synology: lokal über IP im LAN
- public host name: DynDNS: nextwolke.ddns.net
- public domain name: next.indibit.de
Für das Zertifikat heißt das, dass wir die Verbindung zu zwei Namen absichern können / wollen. Je nachdem, welcher Domain Name aufgerufen wird. Wie die Umleitung von von der public domain auf den public hostname realisiert wird, zeige ich im übernächsten Abschnitt.
Auf der Synology finden wir unter Systemsteuerung -> Sicherheit -> Zertifikat die Stelle zum erzeugen und abfragen des Zertifikates. Über folgende Schritte gelangen wir zu dem kostenlosen Zertifikat.:
- Hinzugügen
- Neues Zertifikat hinzufügen
- Beschreibung: Next-Zert
- als Standardzertifikat setzen ( Vorsicht, hier könnte es Probleme geben, wenn ihr die Synology über den Namen und https ansprechen wollt – ggf. heiraus verzichten und dem Zertifikat dedizierte Dienste zuweisen)
- Zertifikat von Let’s Encrypt abrufen
einen Reverse Proxy auf der Synology Diskstation installieren
Da der Nextcloud-Container selbst kein sichere Verschlüsselung via https implementiert hat, ist hier die Empfehlung einen Reverse-Proxy vorzuschalten.
Hinweis: Postet gern eure Erfahrungen in die Kommentare, ob und wie ihr mit Brut Force Attacken zurecht kommt. Ich konnte noch nicht testen, ob der Brute Force-Schutz von Nextcloud den gesamten Zugriff durch die Nutzung des Revers Proxys im Falle einer Atacke sperrt.
Der Reverse Proxy nimmt die Web-Anfragen von außen entgegen und leitet sie entsprechend des addresierten Domainnamen weiter. Somit könnt ihr verschiedene Systeme verfügbar machen, die alle auf den selben Ports lauschen. (Z.b. verschiedene Nextcloud-Instanzen, die auf Port 80 lauschen, aber unterschiedliche IP’s oder Namen haben. Oder damit lassen sich auch verschiedene Webserver im Allgemeinen adressieren. Notwendig sind dafür nur verschiedene Namen. Ein weiterer Vorteil ist, dass der Reverse-Proxy hier die Übersetzung vom unsicheren http ins sichere https macht. Die Reverse Proxy Einstellungen findet ihr unter Systemsteuerung -> Anwendungsportal -> Reverse Proxy
Das heißt, wie benötigen hier zwei Regeln
- Regel: unsichere http zu https umleiten
- Regel: sichere https Anfragen direkt zum Nextcloud Container durchleiten
1. Regel: HTTP -> HTTPS | 2. Regel: HTTPS -> Nextcloud |
Eine öffentlich zugängliche Domain umleiten
Damit die Nextcloud unter der indibit Domain erreichbar ist, habe bei beim Provider die DNS-Einstellungen angepasst. In der Regel erlauben die meisten Provider solche Anpassungen, ggf. muss man beim Support anrufen. Ich habe eine CNname – Record gesetzt. Der CName Record erlaubt die Weiterleitung der aufgerufenen Domain auf einer weitere Domain. In diesem Fall also von next.indibit.de auf nextwolke.ddns.net. Von da aus, geht es dann per DynDNS weiter auf den Router zuhause und der leitet an die Synology weiter, die wiederum die Anfragen per Revers Proxy an den Nextcloud Docker Container weiterleitet.
Nextcloud-Installation abschließen
Als letzen Schritt rufen wir die Domain auf, unter der wie die Nextcloud erreichen. ( In meinem Fall: next.indibit.de)
In diesem Schritt werden die administrativen Daten angegeben.
Nextcloud Applikationsadministrator + Password
An dieser Stelle legen wir einen neuen Account an. Dieser ist der Administrator-Account für die Nextcloud Anwendung selbst
Datenbankverbindungsdaten
Wichtig: Unter Speicher & Datenbank schalten wir auf MySQL/MariaDB um und tragen die Daten ein, die wir beim Anlegen des Datenbank-Containers vergeben haben (nextadm und pass1234). Der Datenbankname entspricht dem, den wir im selben Schritt vergeben haben (hier „nextcloud“)
Als Servername gebe ich die IP und den MariaDB Port an. Die Angabe des Namens der Synology funktioniert auch.
Nach ein paar Sekunden zeigt sich die Nextcloud-Oberfläche und steht zur Verwendung bereit:
In einem zweiten Teil werde ich auf die Automatisierung der Nextcloud Hintergrund-Jobs eingehen sowie die Aktualisierung der Docker-Container. Bis dahin wünsche ich euch viel Spaß und bitte Euch darum fleißig zu kommentieren, wo es bei der Installation klemmt und ob Ihr Probleme mit den Brute Force Attacken feststellen konntet.
Quellen:
- https://www.heise.de/ct/ausgabe/2018-10-Nextcloud-als-Docker-Instanz-im-NAS-einrichten-4028150.html
- https://www.bjoerns-techblog.de/2017/07/reverseproxy-der-diskstation-ein-geiles-ding
- https://forum.synology.com/enu/viewtopic.php?t=117962
- https://www.synology.com/de-de/knowledgebase/DSM/help/DSM/AdminCenter/application_appportalias#acl
- https://hub.docker.com/_/nextcloud/
- https://idomix.de/synology-diskstation-lets-encrypt-ssl-zertifikat-installieren
- https://www.synology.com/de-de/dsm/packages/Docker
- https://www.pcwelt.de/a/nas-virtualisierung-so-klappt-s-bei-synology,3446512
- https://www.reddit.com/r/synology/comments/6v6hge/synology_reverse_proxy_guide
- Synology: Nextcloud Automatisierung mit cron jobs - 28. Mai 2018
- Synology: Nextcloud und Docker installieren - 24. Mai 2018
- Meteorit über Deutschland - 16. November 2017
Pingback: Synology: Nextcloud Automatisierung mit cron jobs - indiBit
Pingback: Synology und NextCloud – passt das? – blue B
Pingback: Synology und NextCloud – passt das? – blue B
Pingback: Synology: Nextcloud Docker-Container aktualisieren