Die eigene Cloud: Nextcloud Optimierung auf einer Synology DiskStation mit DSM 6

Im letzten Beitrag ging es darum Nextcloud auf der DiskStation zu installieren. Nach der Installation sollten aber noch einige Anpassungen gemacht werden, damit Nextcloud optimal läuft bzw. um die Sicherheit zu erhöhen. Außerdem können, je nach Umgebung, einige Fehlermeldungen auftauchen. Und genau darum geht es in diesem Beitrag.

Hinweis: Dieses Tutorial funktioniert auch mit Owncloud 8 und 9 sowie für Nextcloud 9.x und 10.x

Update: 9. August 2017 – Seit Version 12.0 nutzt Nextcloud PHP opcache, daher kommt es zu einer neuen Einrichtungswarnung. Mehr dazu hier
Update: 12. Juli 2017 – Nextcloud funktioniert auf der DiskStation mittlerweile auch halbwegs gut mit Apache 2.4 und PHP 7. Ladet die Pakete Apache 2.4 und PHP 7 herunter. Nach der Installation von Nextcloud könnt ihr unter Web Station -> PHP-Einstellungen -> Erweiterungen -> HTTP Backend Server und PHP auf die neuen Versionen setzen. Deinstalliert die alten Pakete nicht, derzeit werden sie noch für das Update der Nextcloud benötigt.

Vorbereitung

Nextcloud ist auf der DiskStation installiert und läuft.

Optimierung und Fehlerbehebung

Zuerst loggen wir uns in das Webinterface von Nextcloud ein und wechseln in das Administrator-Menü, dort führt Nextcloud selbst einige checks aus und teilt uns mit welche Fehler bestehen und wo noch Optimierungspotential besteht.

Nextcloud Sicherheitswarnungen
Nextcloud Sicherheitswarnungen im Administrationsmenü

Die Warnungen die angezeigt werden hängen davon ab wie Nextcloud installiert wurde bzw. welche Konfigurationen schon vorher am Webserver durchgeführt wurden. Ich werde auf die gängigsten Meldungen eingehen und wie man sie beheben kann. Noch eine kleine Anmerkung, diese Warnungen bedeuten nicht das Nextcloud nicht funktioniert, sie deuten lediglich auf Sicherheitsrisiken und mögliche Performanceoptimierungen hin.

Hinweis: Änderungen an Konfigurationsdateien und Rechten sollten immer über putty oder WinSCP erfolgen. Erstens trägt der DSM-Texteditor immer den root als Besitzer der bearbeiteten Datei ein und zweitens sind nicht alle User und Gruppen in der Rechteauswahl der DSM verfügbar.

Datenverzeichnis

Solltet ihr euch an diese Anleitung oder an die Nextcloud-Dokumentation gehalten haben, solltet ihr diese Meldung nicht zu Gesicht bekommen. Habt ihr aber keinen eigenen Ordner für eure Daten angegeben nutzt Nextcloud den Standardordner data der dann im web-Verzeichnis eurer DiskStation liegt. Die Meldung „Dein Datenverzeichnis und deine Dateien sind wahrscheinlich vom Internet aus erreichbar.“ weist euch auf diesen Umstand hin. Natürlich kann jetzt der Zugriff auf den data-Ordner einschränken, am besten ist es aber, die Dateien aus dem web-Verzeichnis herauszunehmen.

HSTS

Diese Meldung wird euch mit ziemlicher Sicherheit begegnen: „Der ‚Strict-Transport-Security‘ HTTP-Header ist nicht auf mindestens „15768000“ Sekunden eingestellt. Um die Sicherheit zu erhöhen, empfehlen wir das Aktivieren von HSTS, wie es in unseren Sicherheitshinweisen erläutert ist.“
Dieses Problem zu beheben ist etwas tricky. Da seit DSM 6 ngingx als Standard-Webserver verwendet wird, muss man etwas suchen bis man die richtige Stelle gefunden hat um HSTS zu aktivieren. In DSM 5 gab es noch eine Option die man aktivieren konnte. An dieser Stelle geht ein Dankeschön an FalkenaugeMihawk und das deutsche Synology-Forum für diese Lösung.

  1. Verbindet euch über SSH mit eurer DiskStation, loggt euch mit euren Administrator ein.
  2. Erlangt root Rechte mit sudo su – und erneut dem Passwort.
  3. Erstellt eine neue Datei in /etc/nginx/conf.d mit dem Namen „http.*.conf“ (den Stern ersetzt durch einen Namen der euch logisch erscheint) und öffnet diese (z.B. Kommando vi /etc/nginx/conf.d/http.hsts.conf).
  4. Fügt folgende Zeile ein: add_header Strict-Transport-Security „max-age=15768000; includeSubDomains; preload;“;
  5. Datei speichern und schließen.
  6. nginx Config neu laden lassen mit nginx -s reload
HSTS im nginx aktivieren
HSTS im nginx aktivieren

Alternativ kann man einen virtual Host einrichten und dort HSTS aktivieren.

Solltet ihr Nextcloud auf einem Apache laufen haben (entweder noch unter DSM 5 oder ihr habt den Apache manuell ausgewählt) dann fügt folgenden Textblog in die Datei /volumeX/web/Nextcloud/.htaccess ein:

Alternativ könnt ihr auch hier wieder einen virtual Host anlegen.

Memcache

Auch die nachfolgende Meldung liest man recht häufig.

Memory-Cache Warnung
Memory-Cache Warnung im Administratormenü

Diese Meldung lässt sich beheben, indem man eine der 4 möglichen Memory-Cache-Varianten aktiviert. Die DiskStation bietet glücklicherweise 2 davon an: APC und APCu. Um den Memory-Cache zu aktivieren loggt euch in den DSM ein. Öffnet über das Menü den Webserver und geht auf PHP Einstellungen, dort hakt ihr „PHP Cache aktivieren“ an und speichert die Änderung ab.

PHP Cache aktivieren
PHP Cache aktivieren im DSM

Jetzt müsst ihr noch die Nextcloud-Konfigurationsdatei bearbeiten.

  1. Verbindet euch über SSH mit eurer DiskStation, loggt euch mit euren Administrator ein.
  2. Erlangt root Rechte mit sudo su – und erneut dem Passwort.
  3. Öffnet die Nextcloud-Konfigurationsdatei mit vi /volumeX/web/Nextcloud/config/config.php
  4. Fügt folgende Zeile innerhalb der Klammern hinzu: ‚memcache.local‘ => ‚\\OC\\Memcache\\APCu‘,
  5. Speichert und schließt die Datei.
Nextcloud config.php
Nextcloud config.php

PHP Opcache

Seit 12.0 nutzt Nextcloud PHP Opcache. Diese PHP-Erweiterung soll für eine höhere Geschwindigkeit von Nextcloud sorgen. Ist Opcache nicht konfiguriert, kann man im Admin-Menü folgende Meldung sehen:

The PHP Opcache is not properly configured. For better performance we recommend to use following settings in the php.ini:
opcache.enable=On
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

Wie die Meldung schon sagt, wird Opcache normalerweise in der php.ini konfiguriert. Auf der DiskStation läuft das etwas anders. Es gibt mehrere php.ini und Änderungen sind oft nicht wirksam, bzw. werden sie bei Updates wieder überschrieben. Noch dazu hat sich ein kleiner Fehler in die Meldung eingeschlichen, es muss heißen opcache.enable=1 und nicht On.
Diesmal brauch ihr auch keine Konsole. Öffnet im DSM die Web Station, geht dort auf „PHP Einstellungen“. Wählt die PHP-Version, die ihr für Nextcloud verwendet und öffnet dann „Erweiterte Einstellungen“. Im Tab „Erweiterungen“ seht ihr eine Liste mit allen Variablen die ihr editieren könnt. Scrollt runter, bis ihr zu den opcache-Enträgen kommt und tragt dort die vorgeschlagenen Werte ein (1 statt On nicht vergessen). Die Werte die von Nextcloud nicht erwähnt werden, lasst ihr unverändert.
Startet die DiskStation oder zumindest den Webserver neu, die Meldung sollte dann verschwunden sein.

Rechte und Ownership

Als letztes passen wir noch die Rechte der Ordner und Dateien an, diese werden so strikt wie möglich gesetzt. Am besten ihr legt euch ein Script an (Endung .sh), welches ihr auf der DS ablegt. Für ein Update der Nextcloud müsst ihr die Rechte wieder lockern. Mit einem Script können sie danach schnell wieder angepasst werden. Inhalt des Scripts ist folgender:

Das Script führt ihr mit sh /volumeX/Pfad/zum/Script.sh aus.
Ihr habt jetzt die wichtigsten Einstellungen vorgenommen. Ruft erneut das Nextcloud Webinterface auf und loggt euch ein. Kontrolliert auf der Administrator-Seite ob alle Meldungen verschwunden sind.

Mögliche Fehlerquellen

Sollten die Rechte für den data-Ordner nicht richtig gesetzt sein, und der Webserver das Verzeichnis nicht lesen können, wird eine entsprechende Meldung auf der Administrator-Seite angezeigt.
Sollte der Aufruf von Nextcloud nur eine weiße Seite oder einen Error 500 liefern, liegt das Problem meist in der Konfigurationsdatei von Nextcloud. Sollte beim Einfügen der Zeile das Format verfälscht worden sein, kann die Datei nicht mehr gelesen werden. Kontrolliert ob ihr die Zeile innerhalb der Klammern hinzugefügt habt. Kontrolliert ob die Zeile mit einem Komma abgeschlossen wird, sollten sich danach noch weitere Einträge befinden.
Kontrolliert ob Rechte und Besitzer richtig gesetzt wurden.
Ich selbst hatte ein Problem mit den Rechten, diese waren schon gehärtet, als ich die config.php (über putty) bearbeitet habe. Obwohl auch danach die Rechte immer noch gestimmt haben, konnte die Datei von Webserver nicht gelesen werden. Das Entfernen der Zeile hat den Aufruf von Nextcloud wieder möglich gemacht. Um die Zeile dennoch hinzuzufügen habe ich die Rechte mit dem Script aus diesem Artikel aufgelockert, die Zeile hinzugefügt und die Rechte wieder strikter gesetzt.

 

Hapt ihr noch andere Fehlermeldungen oder Hinweise? Hinterlasst ein Kommentar und ich übernehme sie in den Artikel.
Im nächsten Artikel werde ich erklären wie ihr eure Nextcloud updaten könnt.

16 thoughts on “Die eigene Cloud: Nextcloud Optimierung auf einer Synology DiskStation mit DSM 6

  1. Hallo
    danke für die Anleitung!! Alles prima soweit, aber die Skripte funktionieren bei mir leider nicht.
    Hier ein Beispiel
    *.sh: line 12: $’\r‘: command not found
    chown Directories
    chown: invalid user: ‘root\r:http\r’
    chown: invalid user: ‘http\r:http\r’
    chown: invalid user: ‘http\r:http\r’
    chown: invalid user: ‘http\r:http\r’
    chown: invalid user: ‘http\r:http\r’
    Irgendwie hängt der sowohl an die Variablen als auch die User ein \r und dadurch findet er nix. Hab auf veschiedene Art und Weise versucht das Script zu erzeugen (unter Windows)
    Danke und viele Grüße Stephan

    1. Hallo,

      Leg das Script direkt auf der DiskStation an, entweder über putty und vi oder mit dem Texteditor der DiskStation. Windows und Linux haben unterschiedliche Textformatierungen und je nachdem welches Programm du unter Windows benutzt, kommen diese Formattierungen mit in den Klartext und Linux weiß damit nichts anzufangen.

      Grüße
      Andreas

  2. Hallo und erstmal vielen Dank für die genaue Anleitung, funktioniert soweit auch alles!!

    Habe aber noch 2 generelle Frage zu dem Thema:
    nach der dem EInrichten ist das Data Verzeichnis nicht mehr über die FileStation auffinbar, das ich denke ich ein Rechteproblem?

    Gibt es auch die Möglichkeit, sowohl die gemeinsamen Ordner des Synologys NAS zu nutzen und einen Hardlink in den Data Ordner zu setzen, sodass die Daten nicht doppelt gespeichert werden müssen??

    Besten Dank und nochmals Daumen Hoch für die gelungene Anleitung!

    1. Ja, das liegt an den gesetzten Rechten. Solltest du unbedingt Zugriff über die FileStation brauchen könntest du die Rechte anpassen. Sicherer ist es aber die Rechte wie angegeben zu lassen.

      Was meinst du mit Daten doppelt speichern? Um welche Daten handelt es sich und was genau willst du damit machen?
      Prinzipiell sollten die Daten nur über die Nextcloud verwaltet werden. Daten die direkt über das Filesystem gespeichert werden, werden von der Nextcloud nicht erkannt. Solltest du aber Anwendungsfälle haben wo du das brauchst, kannst du einen beliebigen Ordner/Shared Folder als externe Quelle in Nextcloud einbinden. Das geht im Nextcloud Webinterface.

      1. Hallo Andreas, danke für die schnelle Antwort!

        OK das google ich mal. Würde gern die Daten unter dem Volume lassen und die Nextcloud als Add On nutzen, da ich die die SynoCLoud Lösung nicht optimal finde, aber gern weiterhin das Active Directory nutzen möchte!
        Vielleicht kannst du auch kurz aufzeigen, wo das im Webinterface zu finden ist.

        Danke und wie gesagt Daumen hoch!!!

        1. Hallo,

          Du gehst rechts oben auf dein Profil und dort unter Apps installierst du external Storage support.
          Dannach gehst du wieder auf dein Profil und auf Verwaltung. Dort hast du links den zusätzlichen Punkt Externer Speicher. Schau ob dort das Hinzufügen von externen Speicher erlaubt ist.

          Ab jetzt musst du etwas herumprobieren, das letzte mal das ich das gemacht habe war noch unter Owncloud.
          Das Hinzufügen direkt im Adminbereich hat nicht geklappt, du kannst alternativ im Benutzerbereich (klick auf dein Profil und dann auf Persönlich) ebenfalls externen SPeicher hinzufügen, das hat dann funktioniert.
          Ist aber wie gesagt lange her und wenn du mehrere Benutzer hast dann wärs natürlich praktische den externen Speicher im Admin-Bereich hinzuzufügen.
          Ich habs damals als SMB und als WebDav getestet, ich glaube mit WebDav hats am besten funktioniert. Du musst in der DiskStation aber vorher auch einstellen, dass der Zugriff über SMB bzw. WebDav erlaubt ist.
          Wenn du auf der sicheren Seite sein willst, leg dir auf der DS einen eigenen Nutzer an, der nur auf das enstprechende Verzeichnis Zugriff hat und benutze den dann für die Authentifizierung des externen Speichers.

          Grüße
          Andreas

  3. Sauber! 1000 Dank für deine Beiträge zu nextcloud und Synology. Nextcloud läuft jetzt auf meinem NAS und meldet „Alle Überprüfungen bestanden“.

  4. Hallo Jonathan,

    ich habe mir auch einen Wolf gesucht wegen der Opcache-Meldungen.

    Bei mir hat das Eintragen der geforderten Werte in der Datei /usr/local/etc/php56/conf.d/opcache.ini zur Beseitigung der Meldungen geführt.

    $HTTP_RAW_POST_DATA-Meldungen habe ich auch im nextcloud.log und suche noch.

    In welcher Log-Datei taucht denn die DBA_DEFAULT-Meldung auf?

  5. Hallo,
    danke für die Anleitung.

    ich habe noch ein paar Fehler, die ich nicht weg bekomme.

    Erstens bekomme ich unter Administration folgendes angezeigt:

    PHP Opcache ist nicht korrekt eingerichtet. Für bessere Leistung empfehlen wir ↗ folgende Einstellungen in der php.ini:

    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

    Zweite Fehlermeldung (im Logging):
    Error Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set ‚always_populate_raw_post_data‘ to ‚-1‘ in php.ini and use the php://input stream instead. at Unknown#0

    Drittens (im Logging):
    PHP Startup: No such handler: DBA_DEFAULT at Unknown#0

    Ich habe schon zwei php.ini bearbeitet und hatte leider kein erfolg.
    Vielleicht könnt ihr mir ja bei diesen Fehlern helfen

    Appache HTTP Server 2.2
    PHP 5.6
    MariaDB 5
    Nextcloud 12.0.0

    1. Hallo,

      Tut mir Leid für die späte Antwort. Ich habe heute erst 12.0.1 als stable installiert. opcache wird seit 12.0 benutzt.
      Geh dazu in die WebStation auf PHP Einstellungen. Dort wähle die PHP Version aus die du nutzt (5.6 in deinem Fall).
      Geh dann auf „Erweiterte Einstellungen“ und dort auf den Tab „Erweiterungen“ (Extensions).
      Dort kannst du dann runterscrollen bis zu den opcache-Werten.
      Stell dort die Werte so ein wie Nextcloud sie vorschlägt. Die Werte die Nextcloud nicht angibt lass einfach wie sie sind.
      Starte dann den Webserver neu (oder die DiskStation), dannach sollte die Meldung verschwunden sein.

      always_populate_raw_post_data = -1 hab ich in der .user.ini im Nextcloud-Verzeichnis schon eingetragen sowie in der .htaccess

      „PHP Startup: No such handler: DBA_DEFAULT at Unknown#0“ – Hast du dein Nextcloud data Verzeichnis außerhalb von /web/Nextcloud? Uns wenn ja, hast du es in open_basedir eingetragen?

  6. Danke für alles! Du hast 2 Fehlermeldungen beseitigt, die ich nie (1 Jahr lang) wegbekommen habe UND du hast mir mit diesen ekligen Berechtigungen geholfen.
    Mein Problem ist jetzt noch folgendes:
    Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu beheben finden Sie in unserer Dokumentation. (Liste der ungültigen Dateien… / Erneut scannen…)
    Bitte überprüfen Sie noch einmal die Installationsanleitungen emoji unicode: 2197 und kontrollieren Sie das Log auf mögliche Fehler oder Warnungen.

    Und die Dateien sind alle diese /@eaDir/help.php@SynoEAStream-Dateien…

    Hängen offenbar mit der Photostation zusammen. Wie kann ich ihm sagen, dass diese Dateien nicht schlimm sind?!

    1. Freut mich dass es dir geholfen hat.
      Hast du den /photo Ordner als externen Speicher eingebunden oder benutzt du den direkt als Ordner für die Nextcloud?
      Die Photostation verwendet nur den /photo Ordner.

  7. Danke für die wirklich tolle Anleitung!
    Soweit funktioniert Nextcloud auf meiner DS214+, mittlerweile unter DSM 6.1, auch schon ganz gut. Um das ganze ein wenig zu optimieren, wollte ich das Ganze nun auf Virtual Host umstellen. Dazu habe ich den (externen) FQDN als Virtual Host eingetragen, als Document Root „web/nextcloud“ (ich habe im Pfad bewusst nur Kleinbuchstaben verwendet). Meine Daten liegen, gem. deiner Anleitung, unter einem eigenen Share „nextcloud/data“. Über den herkömmlichen Aufruf (*meinExternerFQDN*/nextcloud) funktioniert es weiterhin. Wenn ich NC aber über den Namen des Virtual Host öffnen will (nc.meinExternerFQDN), bekomme ich vom Nextcloud die folgende Meldung:

    Daten-Verzeichnis (/volume1/nextcloud/data) ist ungültig
    Bitte stellen Sie sicher, dass das Datenverzeichnis auf seiner ersten Ebene eine Datei namens „.ocdata“ enthält.
    Erstellen des „data“-Verzeichnisses ist nicht möglich (/volume1/nextcloud/data)
    Dies kann normalerweise repariert werden, indem dem Webserver Schreibzugriff auf das Wurzelverzeichnis gegeben wird.

    Dies ist aber definitiv gegeben, da über den herkömmlichen Domainnamen weiterhin alles gut funktioniert. Kannst du dir darauf einen Reim machen?

    1. Update für die Nachwelt:
      Ich habe die Lösung für mein Problem an anderer Stelle gefunden.
      Und zwar musste in meinem Fall (Datenverzeichnis ausgelagert nach nextcloud/data, Betrieb mit Virtual Host) folgende Angabe im PHP open_basedir angehängt werden (falls dort etwas drinsteht, zuerst mit einem Doppelpunkt : abtrennen):
      /dev/urandom:/volume1/nextcloud

      1. Freut mich, dass du die Lösung gefunden hast.
        Ich selbst habe derzeit keinen virtuellen host eingerichtet, werde das aber demnächst vielleicht umsetzen und den Artikel aktualisieren. Da werd ich dann deine Lösung erwähnen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.