DecaTec

Home-Server | Linux | Nextcloud | Raspberry Pi | Programmierung | Fotografie

Nextcloud 21: High Performance Backend für Dateien

Nextcloud Logo

Das Update auf Nextcloud 21 bringt einige Neuerungen mit sich. Das interessanteste Feature ist dabei das High Performance Backend für Dateien. Dies ist eine in Rust entwickelte Komponente, die eine direkte Verbindung von Desktop-/Mobil-/ oder Web-Apps zur Cloud sicher stellen kann. Hierbei wird viel Last vom Server genommen, da die Client-Anwendungen nicht mehr pollen müssen, um Änderungen an Dateien mit zu bekommen. Stattdessen werden die Anwendungen durch Notifications aktiv über Dateiänderungen informiert.
Laut Nextcloud-Blog kann die Anzahl der Server-Client-Verbindungen um 90% reduziert werden. In großen Nextcloud-Umgebungen kann dies zu einer Performance-Verbesserung um den Faktor 10 führen.

Der folgende Artikel beschreibt die Installation und Konfiguration des High Performance Backends für Dateien. Als Basis dient wie immer eine Installation nach folgendem Tutorial: Nextcloud auf Ubuntu Server 20.04 LTS mit nginx, MariaDB, PHP, Let’s Encrypt, Redis und Fail2ban

Hinweis: In kleineren Umgebungen wird hier der Performance-Schub schätzungsweise deutlich geringer ausfallen. In kleineren „Familien-Clouds“ wird die Installation eines solchen High Performance Backends vermutlich gar nicht spürbar sein.

Update-Historie (letztes Update: 25.02.2021)
  • 25.02.2021:
    • Hinweise zum Update der App hinzugefügt

Voraussetzungen

Grundvoraussetzung ist natürlich eine bestehende Nextcloud-Instanz, die bereits mit Version 21 läuft. Zur Kommunikation zwischen den Komponenten wird hier Redis genutzt, daher muss die Nextcloud bereits mit einer bestehenden Redis-Instanz zusammen arbeiten.
Als Webserver nutze ich hier nginx. Allerdings funktioniert das High Performance Backend auch mit anderen Webservern/Proxy-Servern. Genaue Anweisungen dazu findet man dazu im GitHub-Repository des Projekts.

Einrichtung des High Performance Backends für Dateien

Der erste Schritt führt hierbei in den Nextcloud App Store. Unter der Kategorie Werkzeuge findet man hier die App Client Push.

Die App "Client Push" im Nextcloud App Store
Die App „Client Push“ im Nextcloud App Store

Nach der Installation und Aktivierung über den App Store sind die Tätigkeiten in der Nextcloud-Oberfläche bereits abgeschlossen.

Weiter geht es hier auf der Kommandozeile des Servers.

Als erstes braucht der virtuelle Host für Nextcloud eine kleine Erweiterung:

nano /etc/nginx/conf.d/nextcloud.meinedomain.de.conf

Hier fügen wir folgenden location-Block im Server-Block für HTTPS (am besten ganz unten) ein:

location /push/ {
	proxy_pass http://localhost:7867/;
	proxy_http_version 1.1;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection "Upgrade";
	proxy_set_header Host $host;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Anschließend muss zur Übernahme der Änderungen der Webserver einmal neu geladen werden:

service nginx reload

Anschließend muss das Setup des High Performance Backends über OCC aufgerufen werden:

cd /var/www/nextcloud
sudo -u www-data php occ notify_push:setup

Hier kann nun u.U. eine Fehlermeldung ausgegeben werden, dass die lokale IP des Servers als sog. „Trusted Proxy“ hinterlegt werden muss. Die genaue IP wird dabei vom Setup-Assistenten angezeigt (hier: 192.168.178.10).

Meldung bzgl. fehlendem Eintrag bei trusted_proxies
Meldung bzgl. fehlendem Eintrag bei trusted_proxies

Wenn dies der Fall ist, dann öffnen wir zunächst einmal die Konfiguration von Nextcloud:

nano /var/www/nextcloud/config/config.php

Hier wird nun folgende Einstellung hinterlegt:

  'trusted_proxies' =>
  array (
    0 => '192.168.178.10',
  ),

Wichtig: Hier ist darauf zu achten, dass trusted_proxies nicht doppelt definiert wird. Auch wenn diese Variable vorher noch nicht manuell angelegt war, kann dies durch den ersten Aufruf des Setups passiert sein.

Nach dieser Änderung kann das Setup nochmals per OCC aufgerufen werden:

sudo -u www-data php occ notify_push:setup

Wenn die Konfiguration in Ordnung ist, werden nun Anweisungen angezeigt, um eine systemd Unit für das Backend anzulegen.

Instruktionen zum anlegen der systemd Unit
Instruktionen zum anlegen der systemd Unit

Wichtig: Hier nun nicht einfach Enter drücken, dies würde das Setup mit einer Fehlermeldung beenden. Stattdessen öffnet man am besten eine weitere SSH-Session, um die Konfiguration der Unit hierüber abzuschließen.

Die genauen Schritte werden ja im Setup-Assistenten angezeigt, daher hier nur exemplarisch im Schnelldurchgang:

/etc/systemd/system/notify_push.service

Folgender Inhalt ist hier einzufügen:

[Unit]
Description = Push daemon for Nextcloud clients

[Service]
Environment=PORT=7867
Environment=NEXTCLOUD_URL=https://nextcloud.meinedomain.de
ExecStart=/var/www/nextcloud/apps/notify_push/bin/x86_64/notify_push /var/www/nextcloud/config/config.php
User=www-data

[Install]
WantedBy = multi-user.target

Nun wird der Service einfach nur noch aktiviert und gestartet:

systemctl enable --now notify_push

Nun kann man wieder auf die ursprüngliche SSH-Session wechseln, wo das Setup noch auf eine Eingabe wartet. Hier einfach Enter drücken und es sollte eine Erfolgsmeldung angezeigt werden.

Die Einrichtung des High Performance Backends war erfolgreich
Die Einrichtung des High Performance Backends war erfolgreich

Die Einrichtung des High Performance Backends für Dateien ist damit auch schon abgeschlossen.

Update der App „Client Push“

In regelmäßigen Abständen erscheint ein Update der App „Client Push“. Das Update wird dabei als einfaches App-Update in der Nextcloud selbst durchgeführt.

Wichtig: Mit dem App-Update kommt meist auch eine neue Version des Binaries (notify_push), welches in der App enthalten ist und von der systemd Unit als Service genutzt wird. Hier gilt: Nach jedem Update der App „Client Push“ ist der Service neu zu starten:

service notify_push restart

Fazit

Die Einrichtung des High Performance Backends erfordert zwar ein paar mehr Schritte als das einfache Aktivieren der entsprechenden App, trotzdem hält sich hier der Aufwand für die Installation in Grenzen.

Das Feature ist gerade mit Nextcloud 21 eingeführt worden und ist deshalb noch brandneu. Leider fehlen hier noch konkrete Erfahrungswerte, wie sich die Performance in der Praxis dadurch verbessert.

Habt ihr das High Performance Backend für Dateien bereits für eure Nextcloud aktiviert? Wie sind eure Erfahrungen bzgl. Performance und Stabilität? Hinterlasst mir dazu doch einfach einen Kommentar.

Weiterführende Artikel

Links

, , , , , , , ,

Kommentare: 17

  • GH sagt:

    Vielen, vielen Dank! Ich lese Ihre Anleitungen unglaublich gerne und konnte bereits viel lernen. Riesig freuen würde ich mich noch über eine Anleitung für Nextcloud 21 mit PHP 8.
    Beste Grüße aus dem Rhein Main Gebiet.

    • Jan sagt:

      Hi,

      ich bin ja kein Fan von PPAs, daher wird es vermutlich erst ein Update des Artikels geben, wenn PHP 8 in den offiziellen Paketquellen von Ubuntu enthalten ist. Ansonsten sollte sich die Konfiguration nicht all zu sehr von PHP 7.4 unterscheiden.

      Gruß,
      Jan

  • J-B sagt:

    Wie sieht es denn aus, wenn man mehr als nur eine Nextcloud Installation auf einem Server betreibt?

    • Jan sagt:

      Hi,

      hier würde ich die Backends einfach auf unterschiedlichen Ports laufen lassen. Ebenso wird dann natürlich eine zweite systemd Unit benötigt. Sollte aber funktionieren.

      Gruß,
      Jan

  • Jakob sagt:

    Super, vielen Dank.
    Kann testen, ob es richtig funktioniert?
    Gruss,
    Jakob

    • Jan sagt:

      Hi,

      wenn das Setup am Ende die Erfolgsmeldung ausgibt, sollte alles funktionieren.
      Ansonsten solltest du auch im Access-Log des Webservers Zugriffe auf /push/ sehen können.

      Gruß,
      Jan

  • Pro1712 sagt:

    Hallo!

    Vielen Dank für die Anleitung!

    Ich hab meine Cloud damals nach der alten Anleitung unter Ubuntu 18.04 aufgesetzt. Ich hab inzwischen ein Update auf Ubuntu 20.04 und auch auf Nextcloud 21 gemacht.

    Jetzt möchte ich gern das High Performance Backup einrichten bekoote abder folgenden Fehler:

    Allowing self-signed certificates in the push config.
    🗴 failed to run self-test with auto-generated config.
    test output: [2021-02-25 15:15:43.412806 +01:00] INFO [notify_push] src/main.rs:58: Running with certificate validation disabled
    [2021-02-25 15:15:43.417983 +01:00] WARN [notify_push] src/lib.rs:131: failed to detect app version app: Response was of incompatible type: „Response type not string compatible.“ (response was nil)
    [2021-02-25 15:15:43.522927 +01:00] INFO [notify_push] src/main.rs:89: shutdown signal received, shutting down
    ✓ redis is configured
    🗴 using unencrypted https for push server is strongly discouraged
    🗴 push server url is set to localhost, the push server will not be reachable from other machines
    ✓ push server is receiving redis messages
    ✓ push server can load mount info from database
    🗴 push server can’t connect to the Nextcloud server

    Wo muss ich in der Konfiguration den location-block einfügen?
    Ich hab schon verschiedene Stellen ausprobiert, aber leider kommt immer der gleiche Fehler :-(

    Viele Dank für Deine Hilfe :-)

  • Hans sagt:

    Hallo Jan,

    nach dem Ausführen sudo -u www-data php occ notify_push:setup wird ein externe IP ausgegeben.

    Habe die Config mehrmals überprüft.

    Gruß Hans

    • Jan sagt:

      Hi Hans,

      was heißt „externe IP ausgegeben“? Wie lauten die Meldungen konkret, wenn du das Setup ausführst?

      Gruß,
      Jan

      • Hans sagt:

        Hallo Jan,

        ist die gleiche Meldung wie über „ Meldung bzgl. fehlendem Eintrag bei trusted_proxies“ von deiner Anleitung, nur wird hier eine externe IP 88.xx und keine interne IP 192.169.x ausgegeben. In der NC wird die Meldung, „ Sie verwenden eine externe IP für den Push-Service“ (so ähnlich) ausgegeben.

        Gruß Hans

        • Jan sagt:

          Hi Hans,

          was passiert, wenn die die externe IP in die „trusted_proxies“ einträgst?

          Gruß,
          Jan

          • Hans sagt:

            Hallo Jan,

            dann kommt genau diese Meldung in der NC.
            „ Sie verwenden eine externe IP für den Push-Service“ (so ähnlich)“

            Gruß Hans

          • Jan sagt:

            Hi Hans,

            wie löst der Server selbst mit einem „ping“ die Domain der Cloud selbst auf? Stimmt die IP?
            Ist die Meldung vielleicht nur ein Hinweis und keine Fehlermeldung?

            Gruß,
            Jan

Schreibe einen Kommentar

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