Nextcloud bauen mit Jet #06

      21 Kommentare zu Nextcloud bauen mit Jet #06

Restarbeiten für die Optimierung der Cloud

Damit die Cloud nun auch wirklich rund läuft, haben wir noch einige Einstellungen anzupassen.

Hierzu werden wir uns um folgende Fehler kümmern:

  • Die PHP-Speichergrenze liegt unterhalb des empfohlenen Wertes von 512MB.
  • Der HTTP-Header „Strict-Transport-Security“ ist nicht auf mindestens 15552000 Sekunden eingestellt. Für mehr Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in den Sicherheitshinweisen erläutert ist.
  • Dein Web-Server ist nicht richtig eingerichtet um „/.well-known/caldav“ aufzulösen. Weitere Informationen findest Du in der Dokumentation.
  • Dein Web-Server ist nicht richtig eingerichtet um „/.well-known/carddav“ aufzulösen. Weitere Informationen findest Du in der Dokumentation.
  • Es wurde kein PHP-Memory-Cache konfiguriert. Zur Erhöhung der Leistungsfähigkeit kann ein Memory-Cache konfiguriert werden. Weitere Informationen findest Du in der Dokumentation.
  • In der Datenbank fehlen einige Indizes. Auf Grund der Tatsache, dass das Hinzufügen von Indizes in großen Tabellen einige Zeit in Anspruch nehmen kann, wurden diese nicht automatisch erzeugt. Durch das Ausführen von „occ db:add-missing-indices“ können die fehlenden Indizes manuell hinzugefügt werden, während die Instanz weiter läuft. Nachdem die Indizes hinzugefügt wurden, sind Anfragen auf die Tabellen normalerweise schneller.
    • Fehlender Index „calendarobject_calid_index“ in der Tabelle „oc_calendarobjects_props“.
    • Fehlender Index „schedulobj_principuri_index“ in der Tabelle „oc_schedulingobjects“.
  • Dieser Installation fehlen einige empfohlene PHP-Module. Für bessere Leistung und bessere Kompatibilität wird dringend empfohlen, diese zu installieren.
    • intl
    • imagick
  • Bei einigen Spalten in der Datenbank fehlt eine Konvertierung in big int. Aufgrund der Tatsache, dass das Ändern von Spaltentypen bei großen Tabellen einige Zeit dauern kann, wurden sie nicht automatisch geändert. Durch Ausführen von „occ db:convert-filecache-bigint“ können diese ausstehenden Änderungen manuell übernommen werden. Diese Operation muss ausgeführt werden, während die Instanz offline ist. Weitere Einzelheiten findest Du auf der zugehörigen Dokumentationsseite.
    • mounts.storage_id
    • mounts.root_id
    • mounts.mount_id

Um die gezeigten Fehlermeldungen und Warnungen wegzubekommen, installieren wir erst einmal folgende Module nach, aktivieren ein bereits vorandenes Apache Modul und laden den Apache2 neu:

sudo apt install php-intl php-imagick php-apcu
a2enmod headers
systemctl reload apache2

In der PHP Konfiguration erhöhen wir das Speicherlimit und bereiten alles für die OPCachenutzung vor. Dazu suchen wir in der Datei /etc/php/7.3/apache2/php.ini nach den untenstehenden Einträgen und bearbeiten sie wie folgt (Sollte die Zeile mit einem ; beginnen, dann muss dieses entfernt werden:

memory_limit = 512M
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1 
opcache.save_comments=1

Nun passen wir unsere Apachekonfiguration unter /etc/apache2/sites-available/000-default.conf wie folgt an:

Vorher

<VirtualHost *:80>
 DocumentRoot /var/www/nextcloud
 <IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{HTTPS} off
 RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 </IfModule>
</VirtualHost>
<IfModule mod_ssl.c>
 <VirtualHost *:443>
  DocumentRoot /var/www/nextcloud
  SSLEngine on
  SSLCertificateFile /var/cert/server.crt
  SSLCertificateChainFile /var/cert/server.csr
  SSLCertificateKeyFile /var/cert/server.key
 </VirtualHost>
</IfModule>

Nachher

<VirtualHost *:80>
 DocumentRoot /var/www/nextcloud
 <IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{HTTPS} off
 RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 </IfModule>
</VirtualHost>
<IfModule mod_ssl.c>
 <VirtualHost *:443>
  DocumentRoot /var/www/nextcloud
  SSLEngine on
  SSLCertificateFile /var/cert/server.crt
  SSLCertificateChainFile /var/cert/server.csr
  SSLCertificateKeyFile /var/cert/server.key
  <IfModule mod_headers.c>
   Header always set Strict-Transport-Security "max-age=15768000; preload"
   Redirect 301 /.well-known/carddav /remote.php/dav
   Redirect 301 /.well-known/caldav /remote.php/dav
  </IfModule>
 </VirtualHost>
</IfModule>

Nun müssen wir noch wir noch die Datenbank optimieren. Hierzu stellt aber die Nextcloud die passenden Tools bereits selber zur Verfügung:

cd /var/www/nextcloud
sudo -u www-data php occ db:add-missing-indices
sudo -u www-data php occ db:convert-filecache-bigint

Nun fehlt nur noch die Aktivierung des PHP Caches. Diesen schalten wir in der Konfiguration der Nextcloud selber frei. Dazu bearbeiten wir die Datei /var/www/nextcloud/config/config.php und fügen folgende Zeile in das Array ein. (Bitte hier sehr drauf achten, dass keine Schreibfehler sich einschleichen. Am Besten an den bestehenden Zeilen orientieren)

'memcache.local' => '\OC\Memcache\APCu',

Zum Schluss laden wir noch einmal den Apache neu und die Fehlermeldungen und Warnungen sollten geschichte sein.

systemctl reload apache2

21 thoughts on “Nextcloud bauen mit Jet #06

  1. Fred

    Dann möchte ich mal einen Kommentar schreiben.
    Meist schreibt man ja nur, wenn es Probleme gibt, aber die gab es nicht, also bis hier hin alles OK. Schauen wir mal wann und wie es weiter geht. Ich habe mal mit NexcloudPi angefangen, nun das ich mich sehr gut damit angefreundet habe, wollte ich mal von Grund auf alles selber machen, was wie ja schon gesagt, nach deiner Anleitung super funktioniert hat. Evtl schreibe ich noch mal was zum Certifkat, da stellen sich noch eineige Fragem da ich die in NextcloudPi mit Letscrypt auch schon erstellt hatte, um von außern erreicbar zu sein.

    Danke

    1. jet0jlh Post author

      Vielen Dank für die netten Worte.
      Wenn du bereits LetsEncrypt Zertifikate hast ist das um ein vielfaches besser.
      Da ich in meiner Tutorialserie möglichst vielen Leuten das Mitmachen ermöglichen wollte, hab ich mich für selbst ausgestellte Zertifikate entschieden.
      Bei LetsEncrypt benötige ich eine öffentliche Domain (Entweder mit ner Statischen IP + Domain, oder über DynDNS) + eine Portweiterleitung. Da scheitern leider viele daran.

        1. jet0jlh Post author

          Wenn eine dynamische DNS Adresse bereits eingerichtet ist, kannst du den Certbot von LetsEncrypt installieren und diesen für deine DNS Domain ein Zertifikat ausstellen lassen.
          Dies kann dann Anstelle des eigen ausgestellten Zertifikats verwendet werden.

  2. Wolfgang Arnhold

    Hallo,
    herzlichen Dank für Deine super leicht verständlichen Anleitungen und Deine Arbeit!! Hat alles super geklappt, bis auf das ich kein Schloß im Google Chrome Browser bekomme! Die Verbindung ist nicht sicher und ich habe keinen Plan. Könnte es helfen die 3 Dateien in cert nochmal neu zu generieren?

    1. jet0jlh Post author

      Die Zertifikate sind selbst ausgestellt und sind daher immer nicht vertrauenswürdig. Die Seite ist dadurch allerdings keineswegs unsicher. Die verschlüsselte Verbindung ist trotzdem aktiv.

    1. jet0jlh Post author

      Gute Frage. 😅
      Spontan klingt das wieder nach einer Apache Webserver Einstellung.
      Du könntest versuchen folgendes in die Einstellung deines Virtualhosts (/etc/apache2/sites-available/000-default.conf) hinzuzufügen: RewriteRule ^\.well-known/webfinger /public.php?service=webfinger [QSA,L]
      Dort gibt es ja bereits die 301 Weiterleitungen für Webdav und Caldav. Ich kann dir leider nichts versprechen, da ich den Fehler selber nicht habe um es selbst auszutesten.

  3. Harald

    Hallo Jet,

    Ich war so stolz das ich die Nextcloud nach deiner tollen Anleitung ohne Fehlermeldungen zum laufen gebraucht hatte. „Vielen Dank“
    Jetzt hab ich aber ein Problem das ich alleine nicht lösen kann und hoffe du kannst mir hier weiterhelfen.
    Anscheinend existiert die Datei .ocdata nicht mehr und ich weis nicht wie ich das lösen kann. (Google verwirrt mich nur)

    Nextcloud Sicherheits & Einrichtungswarnung:
    „Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten:“
    „Dein Datenverzeichnis ist ungültig Stelle sicher, dass eine Datei „.ocdata“ im Wurzelverzeichnis des data-Verzeichnisses existiert.“

    Danke

    1. jet0jlh Post author

      Das klingt so, als ob du die Einstellung der Hintergrund-Aufgaben von AJAX auf Cron umstellen wolltest und es nun deswegen crasht. Kann das sein?
      Ich selbst hab meine große Cloud auch immer noch auf AJAX laufen, sollte das aber eventuell echt bald mal anpassen. Dann wirds da vermutlich auch ein Video, bzw. Artikel zu geben.
      Ich hab mir die Datei auf meiner Cloud mal angesehen. Sie existiert wirklich im Datenverzeichnis, ist aber leer. Daher könntest du diese Datei vermutlich einfach wieder erzeugen und eventuell damit den Fehler beheben.
      Die Befehle sind wie folgt, wenn du die Cloud nach den Artikeln/Videos erstellt hast (Ansonsten halt die Pfade anpassen):
      touch /media/festplatte/nextcloud/.ocdata
      chown www-data:www-data /media/festplatte/nextcloud/.ocdata

      Damit erzeugst du die Datei und berechtigst den Benutzer des Webservers darauf.
      Ich hoffe damit löst sich das Problem 😊

      1. Harald

        Danke für deine Schnelle Antwort,

        hat leider nicht funktioniert.
        Evtl. hat es mir als ich Webmin installiert habe etwas durcheinander gebracht.
        Könnte es daran liegen?
        Habe zuerst Maria dann Webmin und dann die Cloud installiert.

        Werd wohl wieder einen Tag damit verbringen, die Cloud neu aufzusetzen ohne Webmin.

        Besten Dank

        1. jet0jlh Post author

          Mist, dass heißt die Meldung bleibt erhalten? Obwohl die Datei dort nun liegt? Das klingt aber eher danach, dass der Pfad nicht passt, oder die Rechte nicht stimmen.
          Eigentlich sollte es nicht an Webmin liegen. Webin läuft im normalfall auf einem seperaten Webserver auf einem seperaten Port. Von alleine sollte sich da nichts zerstören?

          1. Harald

            Egal, bin schon ziemlich mit meinen Nerven down für heute.
            Werd morgen die Cloud neu Aufsetzen und hoffen das alles glatt läuft.

            Danke dir

  4. Harald

    Morgen Jet,

    hab jetzt die Nextcloud in 2,5h neu aufgesetzt 🙂
    Status: Alle Überprüfungen bestanden.
    Bevor ich mir die Nextcloud wieder zerstöre habe ich vorab einige fragen.
    Kann ich Wenmin jetzt noch installieren?

    Ich würde zusätzlich gerne eine zweite Festplatte dran hängen und diese Spiegeln, damit meine Daten falls die sda1 kaputt geht diese gesichert sind.
    Wenn Ja wie geht das?

    Letzte Frage: kann man neben der Nextcloud noch das Pihole installieren?
    Der Pi4/4G sollte das von der Leistung her packen oder?
    Nextcloud und Pihole nutzen die gleichen ports 80/443?
    Kann man das in der /etc/apache2/sites-available/000-default.conf ändern ohne das es zu Crash kommt?

    Sry für die vielen Fragen

    1. jet0jlh Post author

      Uii, da hast du ja echt was vor.
      Hier mal die Antworten auf deine Fragen:

      1: Kann ich Wenmin jetzt noch installieren?
      Eigentlich ja. Webmin bringt seinen eigenen Webserver auf dem Port 10000 mit und sollte daher nicht stören.

      2: Zweite Festplatte als Hardwaresicherheit
      Ja das geht und ist eine sehr gute Idee. Allerdings mit etwas konfigurationsaufwand verbunden. Hierbei muss ein sogenanntes RAID über z.B. die Software mdadm eingerichtet werden und zum Schluss wird halt das RAID anstelle der Festplatte eingehängt.
      Gute Nachrichten. Hierzu hab ich vor einer ganzen Weile ein Video erstellt. Es hat sich an der vorgehensweise aber nicht viel geändert. Das machts vielleicht einfacher: https://www.youtube.com/watch?v=-0FEG3jegvg

      3: Kann man neben der Nextcloud noch das Pihole installieren?
      Ja, dass ist von der Leistung her keinerlei Problem und kann ohne weiteres nebenbei laufen.
      Den Knackpunkt hast du allerdings schon selber festgestellt. Die Ports 80 und 443 sind belegt.
      Es gibt hier verschiedene Möglichkeiten die Sache anzugehen.
      Die schönste ist vermutlich den mini Webserver des PiHoles gar nicht erst in Betrieb zu nehmen, sondern Apache direkt den Job mitmachen zu lassen.
      Hier wäre es dann Möglich das Pihole entweder über eine spezielle Domain, Port oder URL erreichbar zu machen. Allerdings muss man sich da etwas mehr einlesen wie man das im Detail umsetzen müsste.
      Der unschönere Weg (weil dann zwei Webserver laufen) wäre es den Apache abzuschalten „systemctl stop apache2“, dass Pihole zu installieren, dem Webserver des PiHoldes in seiner Konfiguration einen anderen Port zu geben (Das geht nämlich) und dann den Apache wieder einzuschalten „systemctl start apache2“
      Klar könnte man auch dem Apache andere Ports zuweisen, aber dass halte ich für wenige Zielführend der Hauptanwendung nicht die Standardports zu gönnen.

      Ich hoffe ich konnte dir deine Fragen einigermaßen zufriedenstellend beantworten 😅

      1. Harald

        Danke für deine ausführliche Antwort.

        Webmin dürfte kein Problem sein 🙂
        Das Raid dürfte ich nach deinem tollen Video auch noch schaffen, sonst meld ich mich nochmal 😉
        USB oder SSD was würdes du empfehlen?

        Nur beim Pihole steig ich echt aus*face palm* das ist als Anfänger wie ich es bin ein Kampf gegen Windmühlen.
        Das wäre doch ein guter Stoff für ein neues Video *grins*

        Es wird darauf rauslaufen, das ich mir noch einen Pi kaufen muss/werde und dann das Pihole auf dem betreibe.
        Geht das dann auch wegen den gleichen Ports oder gibts Konflikte?

        sry für die vielen Fragen

        1. jet0jlh Post author

          Gerne doch, mich freuts wenn ich helfen konnte. 😊

          Klar meld dich wenns Probleme geben sollte.
          Du meinst vermutlich HDD oder SSD. Für den Raspberry würde ich immer noch bei HDDs bleiben. Die haben zwar den Nachteil mit der Anlaufgeschwindigkeit. Sind aber noch deutlich günstiger. Der Raspberry kann die Geschwindigkeitsvorteile der SSD sowieso nicht vernünftig nutzen.

          Ist nicht schlimm wenn du jetzt erst mal einen weiteren Pi dafür verwendest. Ich hab früher auch für alle möglichen Dienste einen seperaten Pi hergenommen, da mir das zu hoch war.
          Fürs Pi Hole reicht aber bereits ein Pi der ersten Generation. Also muss das nichts teures sein.
          Ja diese Videos mit X Dienste auf einem Raspberry parallel, sind sehr gefragt und ich werd früher oder später nicht mehr drum rum kommen. Allerdings wird das echt noch ein Aufwand, dass soweit runter zu brechen, dass die Zuschauer grob verstehen was sie da eigentlich tun. Wird lustig da alle zufrieden zu stellen 😅

          Gleiche Ports auf verschiedenen Geräten schließen sich nicht aus. Das PiHole macht daher keinerlei Probleme wenn es auf einem seperaten Pi läuft.

          Kein Problem für die Fragen. Ich helf gerne wenn ich kann 😊

  5. Markus

    Hallo Jet
    1. das tutorial ist erstklassig.
    Folgendes: ich bin dauernd am basteln und ausprobieren mit Nextcloud, Raspi usw.. Ich habe auch noch keine wichtigen Daten usw. auf der NC-Festplatte. Was ist passiert? ich habe meine SD-Karte im Raspi zerschossen.
    Wie komme ich nun an meine Daten auf der Festplatte?
    Gruss aus der Schweiz
    Markus

    1. jet0jlh Post author

      Vielen lieben Dank.
      Zu deinem Problem: Die Daten sind ja nach wie vor auf der Festplatte. Da du vermutlich das Backup Skript noch nicht umgesetzt hast (Sorry, ist noch eine sehr neue Anleitung) wirst du deine Konfiguration der Cloud nicht mehr haben. Aber die Daten sind als Dateien natürlich noch auf der Festpaltte vorhanden. Da wir aber ein Linux Filesystem verwenden, kannst du dies nicht einfach unter Windows lesen. Hierzu benötigst du ein Linux (Reicht auch von einem Stick gebootet aus). Vermutlich kann aber auch Apple das Filesystem ohne weiteres lesen.
      Alternativ kannst du natürlich den Raspberry neu aufsetzen und über diesen dann auf die Daten auf der Festplatte zugreifen.

  6. Florian

    Hey Jet,
    du hast alles soweit sehr gut und verständlich erklärt. Ich habe jedoch noch folgende Fehler Meldung
    „PHP configuration option output_buffering must be disabled“
    Die Nextcloud hat die Version 20.0.1
    Wie kann ich dieses Problem lösen?

    Mit freundliche Grüßen
    Florian

    1. jet0jlh Post author

      Das scheint ein „Fehler“ zu sein, der erst mit der Version 20 auftritt. Sobald Version 20 als stable Update zur Verfügung steht werde ich einen Beitrag/Video dazu machen.

Schreibe einen Kommentar