Nextcloud ist ein quelloffener Cloudspeicher zum Hosten auf dem eigenen Server und der gedankliche Nachfolger von ownCloud. Wer bereits eine Synology DiskStation besitzt, hat bereits die besten Grundvoraussetzungen, um Nextcloud in den eigenen vier Wänden zu betreiben und unabhängig(er) von Firmen wie Microsoft, Google oder Dropbox zu werden. In diesem Artikel gehe ich ausführlich darauf ein, wie sich auf einer Synology DiskStation Nextcloud installieren und hinter einer FRITZ!Box mit Dual-Stack Lite Internetanschluss erreichen lässt.
Inhaltsverzeichnis
Grundlegende Netzwerkkenntnisse sollten ebenfalls vorhanden sein.
DiskStation vorbereiten
Es müssen einige grundlegende Pakete und Konfigurationen vorgenommen werden, bevor die eigentliche Installation von Nextcloud beginnen kann.
Pakete auf DiskStation installieren
Folgende Pakete müssen als grundlegende Voraussetzung über das Paket-Zentrum der Synology DiskStation installiert werden:
- Web Station (Verwaltung der Webserver und Webapplikationen)
- Apache HTTP Server 2.4 (Webserver)
- MariaDB 10 (Datenbankserver)
- phpMyAdmin (optionale Datenbankverwaltung, wer mag kann natürlich auch ein anderes Tool zur Administration der Datenbank verwenden)
- PHP 7.4 oder neuer (Skriptsprache)
Da ich die oben genannten Pakete bereits installiert habe, kann ich die Installation leider nicht zeigen. Die Installation ist aber recht einfach und ohne viel Wissen durchgeführt.
Bei der MariaDB 10 Installation sollte ein root Passwort vergeben worden sein. Ansonsten kann es aber auch über die MariaDB 10 App auf der DiskStation geändert werden. In der MariaDB 10 App ist außerdem TCP/IP zu aktivieren:

Wenn die Installation aller Pakete erfolgreich abgeschlossen ist, kann auch phpMyAdmin gestartet werden:

Webverzeichnis erstellen
Eine Nextcloud-Installation besteht aus drei wesentlichen Bestandteilen: Datenbank, Webapplikation und Datenverzeichnis. Die Webapplikation und das Datenverzeichnis werden auf dem Dateisystem gespeichert. Ich wähle für diese Anleitung folgendes Vorgehen:
- Freigegebenen Ordner "web" verwenden (wird bei der Installationen der Web Station automatisch erstellt)
- Unterordner "nextcloud_app" für die Webapplikation erstellen
- Unterordner "nextcloud_data" für das Datenverzeichnis erstellen
Die beiden Ordner "nextcloud_app" und "nextcloud_data" lassen sich direkt über die DiskStation über die App "File Station" oder über den Datei-Explorer (z.B. UNC-Pfad \\diskstation01\web) erstellen.

Web Station konfigurieren
Über die Web Station lässt sich PHP und der Webserver für Nextcloud administrieren. Sie kann einfach als App auf der DiskStation gestartet werden. Damit es mit der Installation weitergehen kann, sollten mindestens die folgenden Back-End-Pakete installiert sein: Nginx (wird automatisch mit der Web Station installiert), Apache HTTP Server 2.4 und PHP 7.4 oder neuer.

PHP-Profil erstellen
Im Reiter "Skript-Spracheinstellungen" können PHP-Profile erstellt und bearbeitet werden, die sich später den einzelnen VirtualHosts des Webservers zuweisen lassen. Ich erstelle für jede Webapplikation ein eigenes PHP-Profil, damit ich unterschiedliche Einstellungen für jede Webapplikation festlegen kann.

Per Klick auf den Button "Erstellen" kann ein neues PHP-Profil für Nextcloud erstellt werden:

Im Reiter "Erweiterungen" sind folgende PHP-Extensions zu aktivieren:
- bcmath
- bz2
- curl
- gd
- gmp
- iconv
- imagick
- intl
- openssl
- pdo_mysql
- posix
- sodium
- zip
- zlib
Die Einstellungen im Reiter "FPM" können im Standard belassen werden.
Im Reiter "Kern" setze ich den Wert für apc.enable_cli auf 1, damit die Cron Jobs von Nextcloud funktionieren.
VirtualHost erstellen
Im Reiter "Webdienstportal" können sämtliche Webserverkonfigurationen vorgenommen werden:

Um eine neue VirtualHost-Konfiguration für Nextcloud anzulegen, ist auf "Erstellen" -> "Dienstportal erstellen" und "Virtueller Host" zu klicken. Es öffnet sich der Dialog zum Erstellen eines neuen VirtualHosts:

In diesem Dialog sind einige relevante Einstellungen zu setzen:
Namensbasiert oder Portbasiert: Wenn der Webserver eine Anfrage bekommt, muss er entscheiden wie er mit der Anfrage umgehen soll. Gerade wenn mehrere Webapplikationen gehostet werden, muss der Webserver wissen, welche Webapplikation der Besucher sehen möchte. Diese Unterscheidung kann der Webserver anhand von DNS-Namen (Namensbasiert) oder Ports (Portbasiert) vornehmen. Bei Namensbasiert ist beispielsweise sehr wichtig, welcher Hostname angegeben wird. Wird als Hostname etwa "diskstation01" und als Port 80/443 angegeben, wird Nextcloud nur aufgerufen, wenn der Besucher "http://diskstation01" oder "https://diskstation01" im Browser aufruft. Portbasiert ist hier flexibler (aber nicht immer besser), da es unabhängig vom Hostnamen funktioniert. Beispielsweise kann bei Portbasiert ebenfalls Port 80 für HTTP und Port 443 für HTTPS angegeben werden. Nextcloud wird sich dann aber unabhängig vom DNS-Namen in der URL öffnen, sofern der Port stimmt. So könnte der Besucher also "http(s)://diskstation01" oder "http(s)://nextcloud.meinzuhause.de" im Browser eingeben, sofern diese zusätzlichen DNS-Namen bei einem DNS-Anbieter entsprechend angelegt und konfiguriert sind. Ein Zugriff über die IP-Adresse ist dann natürlich auch möglich. Diese Einstellung ist also sehr wichtig dafür wie und von wo auf Nextcloud zugegriffen werden kann.
Dokument-Root: Hier ist der Pfad zu der Webapplikation anzugeben. In unserem Fall etwa "web/nextcloud_app".
HTTPS-Einstellungen: HSTS erhöht die Sicherheit des VirtualHosts und auch Nextcloud empfiehlt diese Einstellung. Mehr Hintergrundinformationen zu HSTS gibt es hier zum Nachlesen: https://www.globalsign.com/de-de/blog/was-ist-hsts-wie-fuehren-sie-es-ein
HTTP-Backend-Server: Welcher Webserver soll für unsere Webapplikation genutzt werden? Für Nextcloud ist hier "Apache HTTP Server 2.4" auszuwählen. Unter Nginx ist es mir leider noch nicht gelungen Nextcloud lauffähig zu machen.
PHP: Hier kann das PHP-Profil ausgewählt werden. Da ich zuvor das Profil "Nextcloud" erstellt habe, wähle ich es entsprechend aus.
Die VirtualHost-Konfiguration sieht dann wie folgt aus:

Ich habe hier als Hostnamen den internen FQDN meiner DiskStation angegeben. Nextcloud ließe sich so bei mir per "http(s)://diskstation01.fritz.box" aufrufen und damit derzeit nur intern in meinem Netzwerk, nicht aber aus dem Internet heraus.
Installation von Nextcloud
Nextcloud braucht eine Datenbank und genau für diesen Zweck haben wir MariaDB und phpMyAdmin installiert. In phpMyAdmin können im Reiter "SQL" folgende SQL-Statements abgesetzt werden:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES on nextcloud.* to 'username'@'localhost';
FLUSH privileges;
Die oberen Befehle erstellen eine neue Datenbank und einen Datenbankbenutzer mit entsprechenden Berechtigungen für Nextcloud. Ich habe den Datenbankbenutzer auf "nextcloud" (rote Markierungen) und das Passwort auf "Test12345!" (blaue Markierung) geändert. Den Datenbanknamen belasse ich bei "nextcloud" (schwarze Markierung):

Anschließend sollten vier Erfolgsmeldungen, und nach einem Klick auf den kleinen grünen Reloadbutton im linken Menü in phpMyAdmin, die neue Datenbank "nextcloud" zu sehen sein:

Im Reiter "Benutzerkonten" in phpMyAdmin ist jetzt auch der neue Benutzer zu sehen:

Die Datenbank ist erstellt. Jetzt kann die eigentliche Installation von Nextcloud durchgeführt werden. Dafür gibt es wieder verschiedene Wege und ich wähle die Installation über den Web Installer. Zunächst ist dafür die folgende URL aufzurufen: https://nextcloud.com/install/#instructions-server
Dort sind im Reiter "Web Installer" weitere Instruktionen zu finden:

Der erste Schritt "Right-click here and save the file to your computer" sollte selbsterklärend sein. Es wird eine PHP-Datei heruntergeladen.
Im zweiten Schritt "Upload setup-nextcloud.php to your web space" muss die heruntergeladene PHP-Datei im Dokument-Root, in unserem Fall also auf der DiskStation unter web/nextcloud_app abgelegt werden. Ebenso wie das Erstellen des Ordners "nextcloud_app" geht das wieder über die Synology DiskStation über die App "File Station" oder über den Datei-Explorer:

Als nächstes ist das PHP-Skript im Browser aufzurufen, damit die Setup-Routine gestartet wird. Laut VirtualHost-Konfiguration kann ich Nextcloud per "https://diskstation01.fritz.box" aufrufen. Das eigentliche PHP-Skript lässt sich in meinem Beispiel also mit folgender URL aufrufen: "https://diskstation01.fritz.box/setup-nextcloud.php":

Nach einem Klick auf "Next" sollte Nextcloud die Meldung "All Nextcloud dependencies found" anzeigen. Wenn hier etwas bemängelt wird, muss in den meisten Fällen eine weitere PHP-Erweiterung im PHP-Profil aktiviert werden. Im Eingabefeld steht "nextcloud" als Installationsverzeichnis. Ich gebe dort allerdings einen Punkt ein, weil ich möchte, dass Nextcloud im ROOT-Verzeichnis, also direkt in web/nextcloud_app installiert wird:

Ein weiterer Klick auf "Next" zeigt an, dass Nextcloud erfolgreich installiert wurde. Die Installation ist aber an dieser Stelle noch nicht fertig. Nextcloud hat lediglich diverse Dateien unter web/nextcloud_app angelegt.
Im nächsten Schritt sind mehrere Dinge anzugeben. Zuerst ist ein Administratorkonto für Nextcloud zu erstellen und der absolute Pfad zum Datenverzeichnis anzugeben:

Etwas weiter unten verlangt Nextcloud noch die Datenbankparameter. Benutzername, Passwort und Datenbankname wurden vorhin per SQL-Statement in phpMyAdmin angelegt. Diese Daten sind hier anzugeben. Der Datenbank-Host kann auf localhost belassen werden, muss aber noch um den Port von MariaDB ergänzt werden:

Ein Klick auf "Installation abschließen" erstellt jetzt sämtliche Datenbanktabellen und schließt die Installation ab. Eventuell erscheint hier ein Fehler 504 mit dem Fehlertext "Bei der Verarbeitung dieser Anforderung ist ein Fehler aufgetreten.". Nach einem Reload der Seite ist diese Fehlermeldung bei mir aber verschwunden. Allerdings erscheint eine weitere Fehlermeldung:

Mit diesem Fehler kann auf zwei Weisen verfahren werden: Entweder man passt die Zugriffsrechte so an, dass nur noch die Gruppe "http" Zugriff hat, oder wenn man weiß was man tut, weist man Nextcloud an, die Berechtigungen des Datenverzeichnisses nicht zu prüfen. Ich stelle hier beide Möglichkeiten vor.
Überprüfen der Berechtigungen deaktivieren
Wenn man möchte, dass Nextcloud die Berechtigungen nicht prüfen soll, weil man bewusst möchte, dass ein bestimmter Benutzer auf das Datenverzeichnis zugreifen kann, um beispielsweise später auch per Windows Explorer zugreifen zu können, ist dieses Vorgehen der richtige Weg. Um die Prüfung zu deaktivieren, muss die Konfigurationsdatei von Nextcloud bearbeitet werden. Diese findet sich im Installationsverzeichnis von Nextcloud unter config/config.php. Damit das Bearbeiten der Datei etwas komfortabler ist, gebe ich meinem DiskStation-Benutzer noch Berechtigungen auf die Konfigurationsdatei:

Jetzt kann ich über den Datei-Explorer per UNC-Pfad auf das Installationsverzeichnis zugreifen:

In der Konfigurationsdatei ist folgener Eintrag hinzuzufügen:
'check_data_directory_permissions' => false,

Berechtigungen anpassen
Wer hingegen die Berechtigungen korrekt setzen möchte, kann diese über die File Station der Synology DiskStation anpassen. Dazu ist als Besitzer für das Verzeichnis "nextcloud_data" die Gruppe "http" einzutragen:

Im Reiter "Berechtigungen" darf ausschließlich die Gruppe "http" berechtigt sein:

Abschluss der Grundinstallation
Nach einem weiteren Refresh der Seite öffnet sich schließlich die Loginmaske von Nextcloud:

Installation optimieren
Nach dem Login kann oben rechts auf das Benutzeravatar und auf "Einstellungen" geklickt werden. Unter "Verwaltung" und "Übersicht" kann schließlich ein Check gestartet werden, der bestimmte Parameter prüft. Diese Punkte sollten auch nicht ignoriert, sondern der Reihe nach abgearbeitet werden:

Die erste Warnung "Die PHP-Speichergrenze liegt unterhalb des empfohlenen Wertes von 512MB." kann behoben werden, indem das PHP-Profil bearbeitet wird. Konkret muss im Reiter "Kern" der Wert für memory_limit auf mindestens 512M gesetzt werden. Bevor diese Einstellung gemacht wird, sollte sich aber vergewissert werden, dass die DiskStation über genügend Arbeitsspeicher verfügt.
Die zweite Warnung "Für Deine Installation ist keine Standard-Telefonregion festgelegt." lässt sich über eine zusätzliche Einstellung in der Konfigurationsdatei "config/config.php" beheben. Es ist die folgende Zeile hinzuzufügen:
'default_phone_region' => 'DE',
Es bleibt die Meldung "Es wurde kein PHP Memory Cache konfiguriert.". Um dies zu beheben, ist in der Konfigurationsdatei "config/config.php" die folgende Zeile hinzuzufügen:
'memcache.local' => '\\OC\\Memcache\\APCu',
Nach einem erneuten Check sind alle Warnungen verschwunden:

Die eigentliche Installation von Nextcloud ist somit abgeschlossen. Es empfiehlt sich aber nach künftigen Updates von Nextcloud erneut zu prüfen, ob neue Warnungen vorhanden sind.
Zugriff aus dem Internet
Die aktuelle Installation läuft zwar, ist allerdings nur im lokalen LAN zugänglich. In dieser Anleitung möchte ich ein paar Vorgehensweisen vorstellen, wie Nextcloud im Internet hinter einer FRITZ!Box mit Dual-Stack Lite Internetanschluss verfügbar gemacht werden kann.
Portfreigabe erstellen
In der FRITZ!Box kann unter "Internet" -> "Freigaben" -> "Portfreigaben" eine Portfreigabe erstellt werden, damit Nextcloud im Internet erreichbar ist. Dafür muss zunächst auf "Gerät für Freigaben hinzufügen" geklickt werden. Es kann jetzt entweder manuell ein Gerät angegeben werden oder ein der FRITZ!Box bekanntes Gerät ausgewählt werden. In meinem Beispiel kennt die FRITZ!Box meine DiskStation und ich kann sie einfach auswählen. Unten ist noch auf "Neue Freigabe" zu klicken. Ich gebe für dieses Beispiel nur Port 8443 für HTTPS frei. Ja richtig 8443 und nicht 443. Das liegt daran, dass der Standardserver der Synology Web Station bereits portbasiert auf Port 443 lauscht. Auch erstelle ich die Freigabe nur für IPv6, da ich einen Dual-Stack Lite Internetanschluss für diese Anleitung verwende:

Die Portfreigabe ist erstellt, der Zugriff aus dem Internet funktioniert aber immer noch nicht. Grund ist der VirtualHost, der nur Anfragen für diskstation01.fritz.box verarbeitet, nicht aber Anfragen für die IPv6-Adresse der DiskStation. Außerdem lauscht er noch auf Port 443, ich habe die Portfreigabe in der FRITZ!Box aber für Port 8443 erstellt, da Port 443 für einen portbasierten VirtualHost bei mir bereits belegt ist. Im VirtualHost muss jetzt die Einstellung auf Portbasiert geändert werden, weil wir sonst keine Chance haben Anfragen auf einer IP-Adresse zu verarbeiten, denn einen externen DNS-Namen haben wir noch nicht:

Der Zugriff aus dem Internet über die IPv6-Adresse der Synology DiskStation funktioniert jetzt. Du kannst die IPv6-Adresse der DiskStation in der Systemsteuerung unter "Netzwerk" -> "Netzwerkschnittstelle" -> "LAN" herausfinden:

Per Browser lässt sich Nextcloud jetzt mit folgender URL aufrufen: "https://[IPv6]:8443" bzw. in meinem Fall "https://[2axx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]:8443"
Da wir jetzt unter einer anderen URL auf Nextcloud zugreifen als bei der Installation, erscheint die Fehlermeldung "Zugriff über eine nicht vertrauenswürdige Domain":

Vertrauenswürdige Domains hinzufügen
Über die Konfigurationsdatei "config/config.php" können beliebig viele vertrauenswürdige Domains gepflegt werden. Dort tragen wir jetzt die IPv6-Adresse ein (siehe Zeile 9):

2 => 'meinedomain.tld',
Weitere Beispiele sind hier zu finden: https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html#default-config-php-examples
Ein erneutes Laden der Seite führt uns schließlich zur Loginseite. Damit ist Nextcloud grundsätzlich im Internet erreichbar. Allerdings noch mit zwei Haken: Eine IPv6-Adresse ist schwer zu merken und in den meisten Fällen wird sie sich nach einer gewissen Zeit ändern. Diese Punkte schauen wir uns in den nächsten Abschnitten gemeinsam an und überlegen, wie wir diese lösen können.
Variante 1: Externen DNS-Namen konfigurieren bei fester IPv6
Im letzten Absatz habe ich zwei Nachteile des aktuellen Setups erklärt: Eine IPv6-Adresse ist schwer zu merken und in den meisten Fällen wird sie sich nach einer gewissen Zeit ändern. Wenn du eine feste IPv6-Adresse hast, lese hier weiter. Hast du aber eine dynamische IPv6-Adresse (was bei den meisten Privatinternetanschlüssen standardmäßig der Fall ist), überspringe diesen Abschnitt und fahre direkt mit dem nächsten Abschnitt DDNS konfigurieren fort.
Ich zeige in diesem Abschnitt, wie sich ein externer DNS-Eintrag für Nextcloud konfigurieren lässt. Voraussetzung ist, dass du eine eigene Domain besitzt. Du kannst dann die Hauptdomain oder eine beliebige Subdomain für Nextcloud verwenden. An dieser Stelle kann ich leider keine detaillierte Anleitung geben, weil das Vorgehen bei jedem Anbieter etwas unterschiedlich ist. Es ist aber in jedem Fall ein AAAA-Record zu erstellen, der auf die IPv6-Adresse der DiskStation zeigt:

Eventuell vorhandene weitere DNS-Einträge für meine Nextcloud-Domain habe ich gelöscht, da ich in diesem Fall ausschließlich einen AAAA-Record für IPv6 benötige.
Jetzt muss natürlich der VirtualHost wieder angepasst werden. Außerdem kann jetzt wieder der Standard HTTPS-Port 443 verwendet werden, weil ein Zugriff über die IPv6-Adresse nicht mehr erforderlich ist. Zur Erinnerung: Wir mussten den Port im VirtualHost auf 8443 ändern, weil Port 443 für portbasierte VirtualHosts im Standard bereits belegt ist. An dieser Stelle muss die Portfreigabe in der FRITZ!Box natürlich auch auf Port 443 geändert werden.
Der VirtualHost wird auf Namensbasiert geändert und als Hostname wird der vorhin erstellte externe DNS-Eintrag (AAAA-Record) eingetragen. Auch kann jetzt wieder der Standardport für HTTP/HTTPS genutzt werden.

Variante 2: DynDNS konfigurieren bei dynamischer IPv6
Im vorletzten Abschnitt habe ich zwei Nachteile des aktuellen Setups erklärt: Eine IPv6-Adresse ist schwer zu merken und in den meisten Fällen wird sie sich nach einer gewissen Zeit ändern. In diesem Abschnitt schauen wir uns an, wie wir beide Probleme lösen können und schauen uns dafür den DDNS-Dienst von Synology an und erstellen einen CNAME-Eintrag bei einem DNS-Anbieter. Wenn du aber eine feste IPv6-Adresse hast, ist der vorherige Abschnitt für dich besser geeignet. Dieser Abschnitt ist für dich geeignet, wenn du eine dynamische IPv6-Adresse hast.
Wer über eine FRITZ!Box verfügt, kann alternativ über diese DynDNS für die DiskStation einrichten, damit der Ruhezustand weiterhin funktioniert: https://nocksoft.de/tutorials/dyndns-fuer-ipv6-server-hinter-fritzbox-konfigurieren/
In der DiskStation kann in der Systemsteuerung unter "Externer Zugriff" -> "DDNS" eine neue DDNS-Konfiguration angelegt werden. Ein Klick auf Hinzufügen öffnet die Maske:

Als Anbieter wähle ich Synology. Der Hostname ist frei zu wählen, muss weltweit aber einmalig sein. Die externe IPv4-Adresse lösche ich, weil Nextcloud hinter dem Dual-Stack Lite Internetanschluss in diesem Setup nur über IPv6 erreichbar ist. Wahlweise kann hier der Haken für das Let´s Encrypt Zertifikat direkt gesetzt werden, damit über ein offiziell gültiges Zertifikat per HTTPS auf Nextcloud zugegriffen werden kann. Ich lasse diese Option jedoch deaktiviert, weil ich später ein eigenes Let´s Encrypt Zertifikat erstellen möchte, welches für mehrere DNS-Einträge gültig ist.
Ein Klick auf "Verbindung testen" prüft, ob die eingegebenen Daten gültig sind. Als Status wird dann "Normal" angezeigt. Ein Klick auf "OK" legt den DDNS-Eintrag schließlich an:

Sollte sich die IPv6-Adresse der DiskStation künftig ändern, wird der DDNS-Eintrag automatisch aktualisiert.
Als nächstes muss natürlich der VirtualHost wieder angepasst werden. Außerdem kann jetzt wieder der Standard HTTPS-Port 443 verwendet werden, weil ein Zugriff über die IPv6-Adresse nicht mehr erforderlich ist. Zur Erinnerung: Wir mussten den Port im VirtualHost auf 8443 ändern, weil Port 443 für portbasierte VirtualHosts im Standard bereits belegt ist. An dieser Stelle muss die Portfreigabe in der FRITZ!Box natürlich auch auf Port 443 geändert werden.
Der VirtualHost wird auf Namensbasiert geändert und als Hostname wird der vorhin erstellte Synology DDNS-Eintrag eingetragen. Auch kann jetzt wieder der Standardport für HTTP/HTTPS genutzt werden.

Eigene Domain verwenden
Zusätzlich zu dem Synology DDNS-Eintrag kann noch ein eigener DNS-Eintrag (CNAME bei Subdomain wie nextcloud.meinedomain.de oder Weiterleitung bei Hauptdomain wie meinedomain.de) erstellt werden. Je nach DNS-Anbieter ist das Vorgehen hier etwas unterschiedlich, daher verzichte ich an dieser Stelle auf eine detaillierte Anleitung. In jedem Fall ist aber ein CNAME-Eintrag (für eine Subdomain) oder eine Weiterleitung (für eine Hauptdomain) zu erstellen, der auf den Synology DDNS-Eintrag zeigt. Da ich für diese Nextcloud-Installation eine Subdomain verwenden möchte, lege ich einen CNAME an:

Der CNAME (oder die Weiterleitung) ist erstellt. Der VirtualHost muss aber noch angepasst werden. Hier ist eine Entscheidung zu treffen: Soll die Synology DDNS-Domain weiterhin funktionieren oder soll nur der eigene Domainname (CNAME oder Weiterleitung) funktionieren? Wenn nur der eigene Domainname funktionieren soll, ist lediglich der Hostname im VirtualHost auf die neue Domain abzuändern. Sollen beide DNS-Namen funktionieren, ist ein neuer VirtualHost mit den gleichen Einstellungen wie der bereits vorhandene VirtualHost zu erstellen. Lediglich der Hostname ist dann anzupassen. Es gibt in diesem Fall also zwei VirtualHosts: Einen für die xyz.synology.me DDNS-Domain und einen für die eigene Domain.
Anpassungen nach Domainänderungen nicht vergessen
Bei Variante 1 und 2 haben wir eine eigene Domain und/oder eine Synology DDNS-Domain erstellt. Funktionieren wird das Setup so aber noch nicht:
- Nach jeder Domainänderung muss der neue DNS-Eintrag (z.B. AAAA-Record, CNAME oder Synology DDNS-Hostname) auch zu den vertrauenswürdigen Domains hinzugefügt werden. Siehe dazu weiter oben den Abschnitt Vertrauenswürdige Domains hinzufügen.
- In der Konfigurationsdatei "config/config.php" von Nextcloud sollte der Parameter overwrite.cli.url angepasst werden, wenn sich die URL von Nextcloud ändert. Siehe auch https://docs.nextcloud.com/server/19/admin_manual/configuration_server/config_sample_php_parameters.html?highlight=overwrite%20cli%20url#proxy-configurations.
- Versuchst du an dieser Stelle Nextcloud über eine externe Domain zu erreichen, wird es wahrscheinlich noch nicht funktionieren, weil der DNS-Name im internen Netzwerk hinter der FRITZ!Box nicht aufgelöst werden kann. Weiter unten gehe ich auf das Thema mit dem FRITZ!Box DNS-Rebind-Schutz ein und zeige, wie es sich lösen lässt.
Alternativ kann natürlich auch Port 80 in der FRITZ!Box freigeschaltet werden. Port 80 wird übrigens später auch für Let`s Encrypt benötigt.
Nach dem Anpassen der Konfigurationsdatei sieht sie in meiner Testumgebung wie folgt aus (siehe trusted_domains in Zeile 6 bis 11 und overwrite.cli.url in Zeile 15):

FRITZ!Box DNS-Rebind-Schutz konfigurieren
Wer jetzt versucht https://meinedomain.tld, https://nextcloud.meinedomain.de oder https://meinddns.synology.me im Browser aufzurufen, stößt höchstwahrscheinlich auf ein weiteres Problem: Die FRITZ!Box versucht einen öffentlichen DNS-Namen aufzulösen, der auf ein Gerät zeigt, das hinter der FRITZ!Box liegt, also eigentlich intern ist. Die FRITZ!Box unterbindet das standardmäßig mit dem DNS-Rebind-Schutz. Der Browser wird eine Fehlermeldung wie "Seite wurde nicht gefunden" anzeigen. Da wir jetzt aber genau das möchten, müssen wir in der FRITZ!Box unter "Heimnetz" -> "Netzwerk" -> "Netzwerkeinstellungen" -> "DNS-Rebind-Schutz" eine Ausnahme für unsere Domain(s) erstellen. Dazu muss jede gewünschte Domain einfach in einer eigenen Zeile in das Feld "Hostnamen-Ausnahmen" eingetragen werden:

Let´s Encrypt Zertifikat erstellen
An dieser Stelle bleibt jetzt nur noch ein unschöner Zertifikatsfehler, weil die Web Station standardmäßig ein selbstsigniertes Zertifikat verwendet:

Die DiskStation bietet die Möglichkeit, ein offizielles Zertifikat über Let´s Encrypt zu erstellen. Das sollte auch getan werden. Allerdings braucht Let´s Encrypt Zugriff auf Port 80, um das Zertifikat zu erstellen. Es ist also in der FRITZ!Box an dieser Stelle noch eine zusätzliche Portfreigabe für Port 80 zu erstellen, falls noch nicht geschehen.
In der DiskStation in der Systemsteuerung unter "Sicherheit" -> "Zertifikat" kann über die Schaltfläche "Hinzufügen" ein neues Zertifikat erstellt werden:

Im nächsten Fenster ist eine Beschreibung anzugeben, sowie die mittlere Option auszuwählen:

Schließlich ist als Domainname und als alternativer Name der neue DNS-Name einzutragen. Soll Nextcloud später über mehrere DNS-Namen erreichbar sein, können sämtliche Domains im Feld "Betreff Alternativer Name", getrennt durch ein Semikolon, eingetragen werden. E-Mail ist leider ein Pflichtfeld. Es kann aber auch eine Fake-Adresse eingetragen werden.

Ein Klick auf "Fertig" erstellt schließlich das Zertifikat. Allerdings ist es noch keinem Dienst zugewiesen. Wir müssen das Zertifikat also dem VirtualHost für Nextcloud zuweisen. Das geht über den Button "Einstellungen":

An dieser Stelle ist die Installation und Konfiguration von Nextcloud inklusive Erreichbarkeit im Internet abgeschlossen.
Zugriff auf Nextcloud von IPv4-Clients
Es bleibt nur noch das Problem, dass viele Clients noch ausschließlich IPv4 verwenden und Nextcloud daher nicht erreichen können. Sollte dies für dich kein Problem darstellen, weil du an allen relevanten Orten mit einer IPv6-Adresse unterwegs bist: Herzlichen Glückwunsch! Hast du allerdings das Problem, dass immer mal wieder nicht auf Nextcloud zugegriffen werden kann, weil keine IPv6-Adresse vorhanden ist, möchte ich hier einmal einige mögliche Strategien und Techniken vorstellen, um einen Zugriff eventuell dennoch zu ermöglichen:
Ein Portmapper ist ein Dienst im Internet, welcher sich zwischen dem IPv4-Client und IPv6-Server schaltet, um zu übersetzen. In meinem Artikel Server im Heimnetz über FRITZ!Box mit DS-Lite aus dem Internet erreichen habe ich beispielsweise einen solchen Dienst vorgestellt.
Wer keinen Drittanbieterdienst verwenden möchte, kann sich auch selber einen "Übersetzerserver" installieren. Dazu eignet sich ein einfacher virtueller Server, der über eine IPv4- und eine IPv6-Adresse verfügt. Solche "vServer" bietet beispielsweise IONOS an (keine Werbung). In den meisten Fällen reichen diese Server auch in der kleinsten Ausführung aus, wie im Falle von IONOS der "VPS S" für 1€ monatlich (Stand 29.12.2021). Der Anbieter spielt dabei aber keine Rolle und es kann auch ein anderer Anbieter verwendet werden. Auf einem solchen Server kann dann mit dem Paket 6tunnel Traffic zwischen IPv4-Client und IPv-6-Server "übersetzt" werden:
- https://brehmen.com/2019/10/09/6tunnel/
- https://voiceoverit.de/blog/allgemein/eigene-ipv4-trotz-ipv6-dslite-nat-6tunnel-4to6/1065/
Alternativ ließe sich bestimmt auch ein Reverse Proxy installieren, der zwischen IPv4 und IPv6 vermittelt:
Zu der Thematik "Zugriff auf Nextcloud von IPv4-Clients" habe ich jetzt nur ein paar Ideen gegeben. Ich hoffe, dass da für dich die richtige Idee dabei ist, falls du Nextcloud auch unter IPv4 erreichen möchtest.
Weiterführende Links
https://docs.nextcloud.com/server/latest/admin_manual/installation/harden_server.html
https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html
Quellen
https://docs.nextcloud.com/server/latest/admin_manual/installation/source_installation.html
https://docs.nextcloud.com/server/latest/admin_manual/configuration_database/linux_database_configuration.html#configuring-a-mysql-or-mariadb-database
https://docs.nextcloud.com/server/23/admin_manual/configuration_server/caching_configuration.html
https://frank-hilft.de/knowledge-base/lets-encrypt-zertifikat-automatisch-verlaengern/
18 Antworten auf „Nextcloud auf Synology NAS hinter FRITZ!Box und DS-Lite installieren“
Hallo Rafael
Vielen Dank für das tolle Tutorial. Ich habe Punkt für Punkt durchgearbeitet und nach etwa 2 Stunden konzentrierter Arbeit läuft Nextcloud auf meinen NAS. Es gab den einen oder anderen Stolperstein, den ich aber überwinden konnte. Via DynDNS Adresse von Noip ist meine Installation von aussen erreichbar. Im Router sind der Port 80/443 ans NAS weitergeleitet. Frage: Ist das ein Sicherheitsrisiko? Oder kann man das so lassen? Und noch eine Anregung: wie wäre es, ergänzend zu diesem Tutorial ein Tutorial zu veröffentlichen, das die Integration von OnlyOffice erläutert 😉 Beste Grüsse aus der Schweiz, Erich
Hallo Erich,
cool, dass deine Installation soweit läuft 🙂
Grundsätzlich stellt jeder Port, den man von außen erreichbar macht, ein Sicherheitsrisiko dar. Aber mit Port 80 und 443 hast du dich ja zumindest auf die wirklich notwendigen fokussiert und anders geht es halt leider auch nicht. Nextcloud erfüllt schon hohe Sicherheitsstandards, weswegen die deutsche Bundesregierung dies sogar einsetzt. Wichtig sind auf jeden Fall regelmäßige Updates und Backups, regelmäßiges Prüfen der Sicherheitswarnungen in Nextcloud und wenn möglich Multifaktor-Authentifizierung.
OnlyOffice steht auch auf meiner ToDo-Liste, dass ich es mir mal ansehe 😉
Liebe Grüße aus dem Ruhrgebiet
Rafael
Guten Tag Rafael,
vielen Dank für die geschätzte Rückmeldung. Das passt so für mich.
In der Zwischenzeit habe ich auch die Nacharbeiten an der config.php durchgeführt. Auch hier keine Probleme. Der Sicherheits-Check gibt meiner Installation ein (grünes) A+.
Bin schon gespannt, ob/wann der Teil "OnlyOffice" erscheint 😉
Noch eine Frage: Wo müsste ich ansetzen, wenn ich die Installation von aussen nur via VPN erreichbar machen wollte. VPN für den grundsätzlichen Zugang zu meinem Netz ist eingerichtet.
Beste Grüsse und guten Tag. Erich
Hallo Erich,
wenn du Nextcloud nur per VPN erreichen möchtest, musst du eigentlich nichts mehr machen, da dein VPN ja schon grundsätzlich funktioniert. Du kannst dann einfach auf Nextcloud zugreifen, als wärst du zu Hause 🙂
Du solltest lediglich in deinem Router den Port 80 und 443 sperren. Falls du allerdings Lets Encrypt verwendest, brauchst du Port 80 für die Erneuerung des Zertifikats.
LG Rafael
Vielen Dank, Rafael, für diese Klarstellung. Das bestätigt meine laienhafte Annahme. Auch hierzu: für mich passt das so.
Beste Grüsse, Erich
Hallo Rafael,
hier eine kleine Information. OnlyOffice (CommunityEdition) läuft ergänzend zu der von Dir beschriebenen Installation von Nexcloud seit etwa 2 Stunden einwandfrei.
Vorgehen: Als erstes habe ich die App 'Community Document Server' heruntergeladen und aktiviert. Als nächstes dann die App 'ONLYOFFICE' heruntergeladen und ebenfalls aktiviert.
In den Einstellungen der App 'ONLYOFFICE' war der korrekte Link schon drin. Nur noch bestätigen (speichern) und es hat funktioniert.
Allerdings funktionierte es nicht mit Safari, sondern lediglich mit Firefox, Edge und Chrome. Warum Safari Probleme macht, kann ich nicht sagen. Sorry für die laienhafte Beschreibung 🙂
Beste Grüsse, Erich
Hallo Erich,
vielen Dank für deine Hinweise! 🙂
LG Rafael
Hallo Rafael,
ich habe einen kleinen Stolperstein gefunden, der beim Konfigurieren des virtuellen Hosts entsteht, sich aber erst etwas später bemerkbar macht.
Zumindest bei mir weist die Web Station darauf hin, dass beim erstmaligen Erstellen des virtuellen Hosts eine Leseberechtigung für den User http auf den Root-Ordner gesetzt werden muss. Und es wird tatsächlich auch nur die Leseberechtigung gesetzt.
Bei der späteren Installation von Nextcloud sind dann jedoch auch Schreibrechte des Users http für den root Ordner erforderlich.
Ansonsten heißt der Fehler schon während der Installation:
"Dependencies not found.
Can't write to the current directory.
Please fix this by giving the webserver user write access to the directory."
Viele Grüße, Toby
Hallo Rafael,
super Anleitung, vielen Dank! Ich habe allerdings ein Problem bei der Installation von Nextcloud, denn ich erhalte folgende Fehlermeldung nach bestandenem "Dependency check":
Nextcloud is NOT installed
download of Nextcloud source file failed.
SSL certificate problem: certificate has expiredSSL certificate problem: certificate has expireddeleting of nc.zip failed.
Leider bringt mir diese Fehlermeldung nichts, da ich sie nicht verstehe. Hast du oder irgendwer ne Idee?
moin,
tja ich scheiter leider an der SQL Anbindung. Sprich wenn ich das Admin-Konto bei Nextcloud erstellen möchte bekomme ich die Fehlermeldung das ich keine Anbindung an die SQL Datenbank bekomme:
"Error while trying to create admin user: Failed to connect to the database: An exception occurred in the driver: SQLSTATE[HY000] [2002] No such file or directory"
Nur kann ich über phpmyAdmin auf die Datenbank mit dem User zugreifen.
Hardware ist eine Synology DS1621+
Gruß
Stand gerade vor demselben Problem. Laut dem Link https://help.nextcloud.com/t/nextcloud-installation-error-while-trying-to-create-admin-user/20775 wird das Ganze behoben, wenn ich statt "localhost:3307" "127.0.0.1:3307" eingebe. Hat bei mir (bis zum nächsten Fehler) auch funktioniert.
Hallo Rafael,
auch von mir ein riesiges Dankeschön für das tolle How-To!
Wie ich sehe, kommst du bei der Installation vollkommen ohne Modifikationen am DSM über das Terminal aus. Auch die Vergabe der Berechtigungen läuft vollständig über das DSM und nicht, wie bei anderen Tutorials, über die Konsole.
Dazu habe ich eine Frage:
Ich habe bereits mehrfach nextCloud-Installationen auf Synology-NAS durchgeführt. Stets nach Anleitungen aus dem Internet. Hierbei gab es aber stets das Problem (wahrscheinlich durch die Berechtigungsvergabe über das Terminal), dass die Installation nach dem nächsten DSM-Update nicht mehr funktionierte. Die Installation an sich schon, jedoch verschwanden sämtliche Benutzer und Berechtigungen. Wie schaut es da bei dir aus? Nachdem das Tutorial noch recht jung ist: Hast du schon ein Update hinter dir? Hat dir das DSM-Update irgendwelche Berechtigungen oder Pfade "zerlegt"?
Hallo Stefan,
ich habe seitdem kein großes DSM-Update gemacht. Da ich aber generell öfters auf diesem Wege Berechtigungen anpassen, erwarte ich keine Probleme 🙂
Generell versuche ich immer Anpassungen über das Terminal bei meinem Synology NAS zu vermeiden.
LG Rafael
Hallo Rafael,
großen Dank für dein Tutorial - hat mir echt geholfen! Habe mich dadurch ausgiebig auf meinem NAS ausgetobt und mein Nextcloud läuft dank dir und den Kommentaren hier, ganz gut!
Hallo Martin,
danke für das Feedback! 🙂
LG Rafael
Hallo,
bei mir hat's leider nicht funktioniert. Der Webinstaller mündet nach etwa zwei Minuten in einer Seite mit einem dicken "504" und dem lapidaren Kommentar: "Bei der Verarbeitung dieser Anforderung ist ein Fehler aufgetreten."
Im Verzeichnis nextcloud_app kann man währenddessen dem Download eines Zip-Files zusehen, das aber mit Erscheinen der Fehlerseite dann wieder verschwindet.
Habe daraufhin mal das Timout im PHP-Profil von 60 auf 600 geändert. Damit kommt er immerhin soweit, das zip komplett zu laden, bleibt aber dann offenbar beim auspacken hängen und landet wieder auf der Fehlerseite.
Ich habe wie angegeben den externen DNS-Namen vergeben und bis zu diesem Schritt hat alles einwandfrei funktioniert, doch jetzt bekomme ich immer eine Fehleranzeige. Ich weiß nicht was hier falsch gelaufen ist, hast du eventuell eine Idee?
Hallo. Auch ich komme bei Eingabe meines Hostnamen "https://MeinServer" leider nicht mehr weiter. Trotz der Sicherheitseinstellungen im Browser und als sicheres Einstufen der Servers per Hostnamen, erhalte ich den Fehler "403" ....