Installation Nextcloud auf einer Synology DiskStation
Vorwort
Dieser Artikel ist an diejenigen gerichtet, die sich bereits mit LAMP-Servern und der Nextcloud auskennen. Weiterhin ist es von Vorteil, wenn einem die Synology DiskStation nicht ganz fremd ist.
Ich möchte mich vorab auch bei jenen Bloggern bedanken, u.a. David Campbell (https://luvis.se/author/luvis/) und Andreas Hofmann (https://blog.viking-studios.net/about/), von deren Seiten ich mir hauptsächlich den Input für das HowTo geholt habe.
Ziel des HowTos
Installation einer Nextcloud-Instanz auf einer Synology DiskStation auf Basis der DSM-Pakete.
Warum dieses HowTo? Es gibt bereits so viele?
Es haben mich mehrere Gründe dazu bewogen dieses Howto zu verfassen.
1. Dokumentation. Jetzt ist zumindest ein Kruschd, den ich fabriziere auch einmal dokumentiert.
2. Es ist auf deutsch. 😉
3. Je nach Verfasser liegt der Schwerpunkt häufig auf „Hauptsache es funktioniert“. Ich habe versucht ein Howto zu verfassen, dass sich Größtenteils der Boardmittel der DiskStation bedient, eine sichere Installation realisiert und die essentiellen Nacharbeiten beinhaltet.
Voraussetzung
Wir benötigen eine Synology DiskStation mit eingerichtetem Diskpool/Volume und einen Betriebssystemstand DSM 6.2 und aufwärts. Also, damit habe ich es getestet. Kann sein, dass es auch mit einer niedrigeren DSM-Version funktioniert.
Es werden Aktionen im Terminal durchgeführt, daher den SSH-Dienst der DiskStation starten.
Installation
Wir fangen an und bereiten die Synology vor. Als erstes installieren wir die notwendigen Pakete über das Package-Center:
- Web Station (Verwaltungskonsole für Webserver)
- Apache HTTP Server 2.4
- PHP 7.3
- MariaDB 10
- root-Passwort wird gesetzt
- TCP/IP-Kommunikation NICHT aktivieren, wir kommunizieren über den Mysqld-Socket
- phpMyAdmin (PHP 5.6 wird nachinstalliert)
- sollte aus Sicherheitsgründen nach erfolgter Nextcloud-Einrichtung deinstalliert werden.
Die Paketverwaltung sollte danach wie folgt aussehen:
Die Datenbank
Wir beginnen mit der MariaDB-Datenbank. Folgende Aufgaben gibt es zu erledigen:
- Datenbank-Benutzer für Nextcloud einrichten
- Nextcloud-Datenbank vorbereiten
Da das MariaDB-Paket der DiskStation keinen CLI-Client mitbringt, muss die Vorbereitung über den phpMyAdmin erfolgen.
Man loggt sich mit dem bei der Installation der Datenbank vergebenen root-User-Passwort in phpMyAdmin ein. Dann erstellt man einen neuen Benutzer, dieser sollte ausschließlich von Nextcloud genutzt werden und auch nur Zugriff auf die Nextcloud-Datenbank haben.
Hierzu im Reiter SQL folgende Befehlskette einfügen und ausführen (Go):
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY '123Polizei!';
GRANT ALL PRIVILEGES ON Nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY '123Polizei!';
FLUSH privileges;

Damit wäre die MariaDB schon mal vorbereitet.
Datenverzeichnis der Nextcloud
Die Nextcloud hat für die Benutzer-Dokumente ein eigenes Datenverzeichnis. Standardmäßig befindet sich dieses unterhalb der Document-Root des Webservers. Im Falle der DiskStation befände sich dieses unterhalb von /volume1/web/nextcloud und heißt data .
Geschützt durch die Parameter der .htaccess-Datei, sollten die Benutzer-Daten eigentlich auch vor direktem Zugriff geschützt sein. Jedoch stellt die Position der Daten per se ein Risiko dar, weshalb die Nextcloud-Entwickler auch eine Aufbewahrung der Dateien außerhalb der Document-Root des Webservers vorgesehen haben.
Folgend wird jetzt das Datenverzeichnis vorbereitet.
Dazu im Control Panel der DiskStation die Anwendung Share Folder starten und einen Ordner ncdata erstellen. Bei der Erstellung auf alle Extra-Dinge wie z.B. Papierkorb oder Verschlüsselung verzichten.
Innerhalb der Share Folder-Gui sollte der Ordner dann wie folgt aussehen

Da der Apache Webserver diesen Ordner lesen sowie beschreiben können muss, müssen wir die File Station-Anwendung öffnen, um die Berechtigung anzupassen.
Der http-Benutzergruppe geben wir alle Berechtigungen auf den Ordner. Die ACLs sollten innerhalb der File Station-Gui dann so aussehen.

Nun verbinden wir uns per SSH als Benutzer admin mit der DiskStation. In der folgenden Befehlskette wechseln wir in das ncdata-Verzeichnis und erstellen als http-Benutzer den Unterordner für die Nextcloud-Benutzerdaten.
Zum Abschluss machen wir noch einen Test, inwiefern die Berechtigung passt als Benutzer nobody. Dieser Benutzer sollte keinen Zugriff auf den Ordner haben.
cd /volume1/ncdata
sudo -u http mkdir data
sudo -u http chmod 770 data
Zum Abschluss auch der Test, ob die Berechtigung sitzt
sudo -u nobody ls
Wenn jetzt „ls: cannot open directory .: Permission denied“ erscheint ist alles richtig. Wird einem jedoch das Verzeichnis aufgelistet, dann ist die Berechtigung falsch.
Nun kann man das Terminal schließen oder minimieren.
Apache-Webserver / PHP 7.3
Als nächstes wird der Apache-Webserver sowie PHP 7.3 vorbereitet. Hier werden im groben folgende Schritte durchgeführt:
- Festlegung Webserver und PHP-Version
- Anpassung der PHP-Umgebung
- Erstellung des Virtual Hosts
Für den ersten Schritt öffnet man die Web Station und legt unter General Settings den eingesetzten HTTP-Server und die PHP-Version fest.
- Apache HTTP Server 2.4
- Default Profile ( PHP 7.3 )

Nun beginnen wir mit der Anpassung der PHP-Umgebung. Dazu editieren wir unter PHP-Settings das Default Profile für Version 7.3. Hier die folgenden Punkte, die verändert werden müssen:
- Enable PHP Cache – aktivieren
- Customize PHP open_basedir
Da das Verzeichnis der Benutzerdaten außerhalb der Document-Root liegen wird, müssen wir dessen Pfad in den Basis-Pfad mitaufnehmen. Dies geschieht, indem wir dem vorhandenen Pfad-String, den Verweis zum neuen Verzeichnis hinzufügen mit :/volume1/ncdata/data .
Nun müssen die folgenden PHP-Module (extensions) aktiviert werden:
- bz2
- curl
- gd
- iconv
- intl
- mysqli
- openssl
- pdo_mysql
- posix
- zip

In der Registerkarte Core sollten die folgenden Punkte angepasst werden
- mysqli.default_port=3307 (Standard-Port für MariaDB10)
- opcache.enable=1
- opcache.enable_cli=1
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=10000
- opcache.memory_consumption=128
- opcache.save_comments=1
- opcache.revalidate_freq=1
- mysqli.default_socket=/run/mysqld/mysqld10.sock
- memory_limit=512M
Nun erstellen wir den Virtual Host. Grund für den Virtual Host ist folgender. Jeder der schon mal die Nextcloud einfach in einem Unterordner der Document-Root seines Webservers installiert hat, kennt das Phänomen. Man ist quasi nach jedem größeren Update beschäftigt, die Sicherheitswarnungen in der Admin-Konsole zu bearbeiten. Dies endet meist damit, dass man die Webserver-Konfiguration oder die der Site massiv anpasst.
Dass muss nicht sein! Denn die Nextcloud gibt dem Webserver über die .htaccess-Dateien alle notwendigen Parameter mit. Damit der Webserver diese jedoch vollständig abarbeiten kann, muss die Nextcloud-Installation, also der Inhalt des nextcloud-Ordners, direkt in der Document-Root liegen. Und dies schaffen wir mit einem Virtual Host. 😉
Ja, ich weiß. Man könnte auch die Dateien des Nextcloud Zip-Archivs direkt nach /volume1/web extrahieren und die Nextcloud installieren. Sie funktioniert auch. Jedoch würde die Konsistenzprüfung der Nextcloud, also der Prozess, der sich umschaut, ob alle Dateien der Installation so passen, sich ständig an den systeminternen Dateien der DiskStation, die unter /volume1/web liegen, stören und Warnungen produzieren. Deswegen der Virtual Host.
Der Virtual Host wird mit den folgenden Parametern erstellt:
- Domain-Namen über den die Nextcloud angesprochen wird
- Document root, hier wird der nextcloud-Ordner erstellt
- HSTS aktivieren, sonst hat man gleich eine Sicherheitswarnung zum Bearbeiten. 😛
- HTTP-Server Apache
- PHP: 7.3

Installation der Nextcloud
In diesem Abschnitt werden die folgenden Arbeitsschritte durchgeführt:
- Herunterladen und entpacken der Nextcloud-Dateien
- Anpassung der Ordner-Berechtigungen
- Ausführung des Installations-Assistenten
Als erstes meldet man sich per SSH als admin an der DiskStation an. Anschließend wechselst man in die Document-Root des Webservers.
cd /volume1/web
Wenn man jetzt die Berechtigung des nextcloud-Ordners betrachtet (ls -lh), so stellt man fest, dass diese Nichts mit den Empfehlungen des Handbuchs zu tun hat. Also, zu root werden und weg mit dem Ordner!
sudo su -s /bin/bash -
cd /volume1/web
rm -rf nextcloud
Nun laden wir die Nextcloud-Installationsdateien herunter
wget https://download.nextcloud.com/server/releases/nextcloud-18.0.4.zip
Leider kennt die Synology auf der Kommandozeile kein unzip. Aus diesem Grund öffnen wir erneut die File Station-Anwendung und wechseln in den web-Ordner. Dort sehen wir das Zip-Paket, rechte Maustaste Extract ==> Extract to Here

Nach einem kurzen Moment sind die Dateien entpackt.
Nun mit den folgenden Befehlen den Webserver als Eigentümer festlegen und die empfohlenen Berechtigungen einrichten.
chown -R http:http nextcloud
find ./nextcloud -type d -exec chmod 755 {} \;
find ./nextcloud -type f -exec chmod 644 {} \;
…der dauert ein bisschen!
Jetzt wird es Zeit die Früchte unserer Arbeit zu ernten. Mit dem Browser auf die Virtual Host-Url und los geht‘s!
- Benutzername und Passwort für den Nextcloud-Admin
- Datenverzeichnis /volume1/ncdata/data
- Datenbank-Anbindung
- Username
- Passwort
- Name der Nextcloud-Datenbank
- Anbindung über Unix-Socket localhost:/run/mysqld/mysqld10.sock
- Ich installiere immer ohne die empfohlenen Apps und installiere das benötigte Feature bei Bedarf nach.
Werte eingeben und Installation abschließen!

Es kann sein, dass man während der Einrichtungsprozess läuft in einen Browser-Timeout hineinrennt. Dies ist aber kein Grund zur Panik. Einfach warten bis die DiskStation aufhört zu rattern. Ein top auf der Kommandozeile unterstützt einen dabei festzustellen, wann der Installationsprozess abgeschlossen sein könnte.
Nach etwas Zeit und ggf. F5-Drücken im Browser hat man auch schon den Anmeldebildschirm der Nextcloud. Unter dem Punkt Übersicht bekommt man nun auch schon einen ersten Eindruck über den Zustand der Installation.
Nacharbeiten
Unter dem Punkt Übersicht bekommt man nun auch schon den ersten Eindruck über den Zustand der Installation.

Jetzt stehen die Nacharbeiten an.
Punkt 1: kein PHP-Memory-Cache
Also, als root per SSH die Nextcloud config.php bearbeiten
vi /volume1/web/nextcloud/config/config.php
Und die folgende Zeile syntaktisch korrekt einfügen:
'memcache.local' => '\OC\Memcache\APCu',
Punkt 2 und Punkt 4, die Datenbank fixen:
per SSH einwählen und zum http-Benutzer werden. Anschließend die angegebenen occ-Kommandos absetzen.
sudo su http -s /bin/bash -
cd /volume1/web/nextcloud
php73 occ db:add-missing-indices
php73 occ db:convert-filecache-bigint
Das fehlende imagick bekommt man leider nicht weg. Die Bibliothek wird seit langem nicht mehr weiterentwickelt und fehlt daher häufig in neueren PHP-Versionen. Diese ist für die Bildverarbeitung notwendig.
Nachteile sind die fehlenden Pictogramm-Ansichten im Dateibrowser, aber mehr ist mir nicht bekannt.
Da imagick mangels Weiterentwicklung von vielen als Sicherheitsproblem eingestuft wird, ist davon auszugehen, dass die Abhängigkeit der Nextcloud in mittlerer Zukunft aufgelöst wird.
Zyklische Wartungsjobs einrichten
Per SSH anmelden, root werden und in die /etc/crontab folgenden Eintrag einfügen:
*/5 * * * * http php73 -f /volume1/web/nextcloud/cron.php
Und im Web-Interface die Grundeinstellungen von AJAX auf Cron umstellen. Abschließend die DiskStation neu starten, damit die Änderungen wirksam werden.

Aufräumen
Das Zip-Paket mit den Nextcloud-Dateien in der Document-Root des Webservers kann weg.
PhpMyAdmin kann deinstalliert werden, ebenso sowie PHP-5.6.
So, jetzt läuft das Ding erst mal rund! Und wenn man sich an den Zertifikatswarnungen nicht stört, so kann man auch gleich loslegen.
Für diejenigen, die sich an den Warnungen stören: Die DiskStation hat einen Let‘s encrypt-Client, der wirklich leicht zu konfigurieren ist. Dieser Tauscht auch gleich die Zertifikate im Webserver aus.
Viel Spaß beim Nachmachen!
Schreibe einen Kommentar