Nextcloud 15, Apache, PHP, MariaDB auf einem Raspberry Pi 3 – oder auch nicht!

 

Es muss nicht immer der Server im Rechenzentrum oder ein Stromfresser sein, wenn man als Privatmensch auch seine private Cloud aufbauen möchte. Aktuell lagere ich persönlich immer mehr aus, für die ein oder andere Demo-Umgebung habe ich dann aber immer noch das ein oder andere System daheim. Unverzichtbar ist die eigene, kleine Nextcloud geworden, die ich mittlerweile auf einem Raspberry Pi hoste – sie muss auch nicht viel können, sondern schlichtweg ein Sync-Ziel für diverse Dinge und eben mein Demo-System sein. Wer also einen Raspberry Pi besitzt und Lust hat, ähnlich wie bei meiner aktuell ein Jahr alten Anleitung eine eigene Nextcloud aufzusetzen, darf auf Wunsch gerne direkt loslegen. Der Unterschied zu damals: Wir versuchen es ohne Snap, sondern bauen die Umgebung mit Apache, PHP und der MariaDB-Datenbank selbst – und können diese Erfahrungen auch später auf anderen, Nicht-Raspberry Pi-Systemen, verwenden: Etwa auf einem klassischen Linux-Server mit Ubuntu oder einer Debian-Installation.

Im Praxisbeispiel haben wir einen Raspberry Pi 3 samt einer (hier:) 64 GB großen MicroSD-Karte zur Hand, auf der wir zunächst einmal das Grundsystem installieren müssen. Das ist aktuell das schlanke Raspbian Stretch Lite vom 13. November 2018, welches Ihr Euch hier herunterladen könnt – nicht das offizielle, für die Snaps von Nextcloud genutzte Snappy Ubuntu Core (die Variante folgt irgendwann!). Das ZIP-Image entpackt Ihr anschließend und bekommt eine 1,87 GB große Image-Datei, die irgendwie auf die MicroSD-Karte gelangen muss. Hier gilt: Viele Wege führen nach Rom und neben der klassischen Shell hat bei mir vor allem der ApplePi Baker immer einen guten Dienst geleistet, bringt er doch auch eine tolle GUI mit. Die letzte Version 1.95 vom 30. September 2017 hat zwar schon ein paar Jahre auf dem Buckel, verrichtet aber auch unter aktuellen macOS-Versionen noch wunderbar ihren Dienst.

Vorbereitungen

Das Procedere zum Schreiben des Images ist so intuitiv wie schnell erledigt. Programm starten, Euer Kennwort eingeben, MicroSD-Karte auswählen (das sollte eigentlich Standard sein), Image-Datei auswählen und „Restore Backup“ klicken: Los geht die Reise!

Raspbian ApplePi Baker Starta

Ist das Schreiben erledigt, folgt – sofern der „Auto Eject“-Haken aus dem vorherigen Bildschirm so belassen worden ist, postwendend die Meldung, dass das Image geschrieben und der Datenträger ausgeworfen wurde.

Raspbian ApplePi Baker Finish

Der erste Start

Dieser wandert nun direkt in den Raspberry Pi – zusammen mit Strom, Monitor, Tastatur und Netzwerk initialisiert sich das kleine Helferlein nun erstmalig, maximiert vollautomatisch die Root-Partition und begrüßt Euch dann mit dem Login-Bildschirm. Wer mag, darf sich nach Erstanmeldung mit den Standard-Zugangsdaten (User „pi“, Kennwort „raspberry“) über den Befehl

mit der grundlegenden Konfiguration beschäftigen oder aber das tun, nachdem man sicherheitshalber das Standard-Kennwort geändert hat. Die Erstkonfiguration macht Sinn, um beispielsweise den Host-Namen zu ändern, die lokalen Einstellungen, Zeitzone oder eben das standardmäßige UK-Tastaturlayout anzupassen. Unter „Interfacing Options“ (Hauptmenü-Punkt 5) solltet Ihr zudem noch im darauffolgenden Untermenü den Punkt „P2“ beachten, um den SSH-Dienst für den folgenden Fernzugriff zu aktivieren: Nichts ist ärgerlich, als den Raspberry Pi nur mit Strom und Netzwerk versehen irgendwo zu verbauen, um dann festzustellen, dass man aus der Ferne nicht auf das Gerät kommt!

Sofern Ihr die Netzwerkkonfiguration nicht manuell angepasst habt oder das vor dem finalen Aufbauen tun wollt (am Ende brauchen wir ja in unserer Firewall respektive unserem Router eine Portweiterleitung für die Ports 80 und 443 Richtung Raspberry), schaut Euch einmal die Datei /etc/dhcpcd.conf mit dem Editor Eurer Wahl an. Um beispielsweise dem verkabelten Netzwerk eine feste interne IP zuzuweisen, müsst Ihr die folgenden Zeilen auskommentieren und mit den gewünschten Daten Eures Hausnetzes und der gewünschten IP des Raspberry Pi versehen:

Sofern das geschehen, die Beispielwerte auf Eure Umgebung angepasst sind und entweder der DHCPCD-Dienst oder eben der ganze Raspberry Pi neu gestartet ist, solltet Ihr überprüfen, ob Ihr via

oder dem SSH-Client Eurer Wahl (unter Windows ist Putty meiner Meinung nach nach wie vor unschlagbar!) Euren Raspberry Pi erreichen könnt. Ist dies geschehen und Ihr befindet Euch auf der Shell, sind alle Voraussetzungen geschaffen, Nextcloud auch Raspbian auch ohne Snap ein wenig individueller zu gestalten. Klassische Updates via

sollten vor jeder weiteren Arbeit am System ebenso folgen wie das (optionale) Firmware-Update mit nachfolgendem Neustart:

Weiter im Text: LAMP

Der nachfolgende Weg funktioniert übrigens auch wunderbar, wenn Ihr nicht mit einem Raspberry Pi, sondern einem aktuellen Debian- oder Ubuntu-System unterwegs seid. Alles, was nun kommt, ist also nicht mehr Raspberry Pi-spezifisch, sondern der für mich (!) beste Weg, eine Nextcloud auf einem Linux-System zu installieren. Mit dabei: Der immer noch von mir favorisierte Apache-Webserver, PHP 7.X, die MariaDB-Datenbank und der Redis-Server zum Cachen. Legen wir also los, ausgehend von der Konsole, auf der wir uns gerade befinden und installieren den ersten, wichtigen Rutsch:

Nach der erfolgten Installation des klassischen „LAMP“-Stacks aus Apache, MySQL/MariaDB und PHP sollten wir zunächst die grundlegende Sicherheitskonfiguration der Datenbank durchführen. Dies geschieht durch Eingabe von

und leitet Euch via eines Dialogs zur obligatorischen Änderung des bisher leeren MariaDB-Root-Kennwortes sowie dem Löschen der Testdatenbanken, Entfernen des obligatorischen anonymen Zugriffs und Verhindern des Root-Logins aus der Ferne. Dann legen wir die Nextcloud-Datenbank an:

Gebt anschliessend Euer neues Kennwort ein und Ihr solltet Euch erfolgreich in der MariaDB-Shell eingeloggt haben. Nun legen wir Zeile für Zeile die leere Datenbank und den Nutzer dafür an, gewähren ihm alle Rechte darauf, lassen die Rechtestruktur der Datenbank noch einmal neu einlesen und verlassen die Shell dann wieder. Notiert Euch bitte die Werte, die Ihr hier eintragt und speziell die Kennwörter – all diese Daten brauchen wir gleich für die initiale Einrichtung der „frischen“ Nextcloud-Instanz!

Download und Installation von Nextcloud

Wechseln wir nun in das Hauptverzeichnis des Apache-Webservers und laden uns direkt die aktuellste Nextcloud-Version herunter:

Anschließend entdecken wir das Archiv und löschen es direkt wieder:

Nun löschen wir das bisherige Webroot (var/www/html), legen ein Nextcloud-Datenverzeichnis (hier: /var/nextcloud_data) an und geben dem Webserver entsprechende Rechte auf die wichtigen Verzeichnisse:

Der Apache-Webserver

Nun müssen wir die Standard-Konfigurationsdatei des Apache-Webservers anpassen. Ausgehend davon, dass wir auf diesem System nur einen Host – nämlich unsere Nextcloud – bedienen, legen wir keine neue Konfigurationsdatei an, sondern ändern einfach die Standard-Konfiguration des Webservers ab. Dies geschieht (bei mir unter Zuhilfenahme des „vi“-Editors) durch Eingabe von

Löscht anschließend den vorhandenen Inhalt und ersetzt ihn durch den folgenden, natürlich jeweils angepasst an Euer individuelles System:

Ein Neustart des Apache-Webservers aktiviert die just getätigten Änderungen:

Zertifikats-Sachen

Nun gilt es, diese Installation auch durch ein SSL-Zertifikat abzusichern. Das geschieht in meinem klassischen Anwendungsfall auch ohne Kosten für ein entsprechendes Root-Zertifikat via Let’s Encrypt. Da die Pakete für die eigene Zertifizierungsstelle auf dem Raspberry Pi noch nicht vorhanden sind, müssen wir diese durch den Befehl

erst einmal installieren. Dann geht es direkt daran, ein erstes Zertifikat anzufordern.

Ihr werdet nun wieder durch einen Dialog geführt, angefangen von der Angabe einer E-Mail-Adresse für wichtige Benachrichtigungen wie Zertifikatsabläufen, der Bestätigung der „Terms of Service“, die Frage, ob Ihr Eure E-Mail-Adresse in den Newsletter der Electronic Frontier Foundation eintragen wollt und schlußendlich der Frage, für welchen Host Ihr das Zertifikat beantragen wollt. Auch die Frage, ob alle http-Anfragen normal weiter behandelt werden sollen (hier Option 1) oder immer Richtung https (Option 2) weitergeleitet werden soll, muss von Euch beantwortet werden. Sofern Ihr hier nicht plant, unverschlüsselte Verbindungen als Option zuzulassen, würde ich persönlich immer die direkte Weiterleitung bevorzugen.

Hier kommt die erste Hürde – die Ports 80 und 443 sollten in der Firewall respektive im Router Eures Vertrauens freigegeben sein und auf die interne IP des Raspberry Pi zeigen. Ist dies (noch) nicht der Fall, muss diese Voraussetzung erst geschaffen werden – andernfalls ist hier erst einmal Schluß mit allen guten Vorsätzen!

Da die Let’s Encrypt-Zertifikate alle 90 Tage auslaufen und wir natürlich nicht immer daran denken wollen, die entsprechend manuell zu verlängern, automatisieren wir das. Wie von Linux schon bekannt, machen wir das über den klassischen Weg eines sogenannten Cron-Jobs. Durch Eingabe von

öffnen wir die Tabelle der bisherigen Jobs – diese sollte relativ leer sein – und fügen die Zeile

am Ende ein. Speichern und auch diese Hürde haben wir erfolgreich gemeistert.

Apache-Tuning

Wenden wir uns nun also noch zweier Anpassungen des Apache-Webservers zu. Das betrifft einmal die HSTS-Header, einmal HTTP/2 – beide Einstellungen werden via dem Editor Eurer Wahl (hier wieder „vi“) in der neu entstandenen Apache-Konfigurationsdatei der mit einem Zertifikat versehenen Webseite durchgeführt:

Unter der Zeile

innerhalb der Datei setzen wir nun den Passus

ein, unter der Zeile

packen wir zudem noch die Zeile

dazu. Anschliessend aktivieren wir beide Module („Headers“ und „HTTP2“) durch Eingabe von

und starten den Webserver noch ein letztes Mal durch den Befehl

neu.

Ready to rock?

Damit kann erst einmal Eure Webseite aufgerufen werden, um die eigentliche Nextcloud-Installation weiter fortzuführen. Habt Ihr alles richtig gemacht und auch die Portweiterleitung passt, ist die Seite durch Aufruf von „https://<<meine.cloud.de>>“ erreichbar und der initiale Setup-Bildschirm erscheint.

Nextcloud 15 Installation

Nun seid Ihr gefordert, unten die Datenbank-Zugangsdaten für die zuvor erstellte Nextcloud-Datenbank einzutragen und Euch einen Benutzernamen für den Nextcloud-Administrator samt Kennwort auszudenken. Das standardmässig eingestellte Datenverzeichnis /var/www/nextcloud/data müßt Ihr zudem auch noch anpassen, wenn Ihr die Anleitung von oben an durchgearbeitet hat. Ich persönlich lege Datenverzeichnisse ungern in den Bereich, wo auch Webseitendaten liegen – ergo wäre der richtige Pfad /var/nextcloud_data! Dann kann diese Reise losgehen und nach ein wenig automatisierter Konfigurationsarbeit (und unter Berücksichtigung der Tatsache, dass die Datenbank-Credentials korrekt angegeben wurden) sollte Euch zeitnah der Willkommensbildschirm einer frischen Nextcloud-Installation begrüßen!

Nextcloud 15 neue Installation

Gut gemacht!

Damit wäre dieses Tutorial (egal, ob das nun auf einem Raspberry Pi oder einem eher vollwertigen Gerät geschehen ist) an sich erfolgreich abgearbeitet. Eure Nextcloud wird so problemlos laufen, aber es gibt da immer wieder ein paar Stellschrauben, an denen man drehen sollte – einfach, um noch ein wenig Performance aus dem System zu kitzeln – der Raspberry Pi in meinem Fall ist zwar keine Rakete, muss aber auch nicht zwingend laufen wie der sprichwörtliche „Sack Nüsse“.Nextcloud 15 Warnungen

In den Sicherheits- und Einrichtungs-Warnungen unser jungfräulichen Nextcloud-Installation finden wir nun die ein oder andere Warnung, die wir ignorieren oder aber – viel besser! – optimieren sollten. Wer als mag, kann hier weiterlesen und sich anschliessend direkt ans Werk machen!

Cron-Jobs

Nextcloud verarbeitet im Hintergrund diverse Tasks, die auch ohne Nutzer-Interaktion laufen können und auch sollten. Ob das nun Wartungsarbeiten an der Datenbank oder sonstige Aufräumarbeiten sind – diese sind auf drei Wegen einzurichten. Der beste Weg, weil er meistens einmal eingerichtet wird und dann läuft, ist auch hier der Weg über den Cron-Job, der schön brav alle fünf Minuten automatisiert gestartet wird. Öffnet daher den Cron-Editor via

und fügt am Ende die Zeile

hinzu, sofern sich Eure Nextcloud-Installation in diesem Pfad – eigentlich der Standard, von dem man eher selten abweicht – befindet.

Nach dem Speichern könnt Ihr durch Eingabe von

testen, ob für den Webserver-Nutzer (hier: „www-data“ – oftmals ebenfalls Standard) dieser Cron-Job erfolgreich eingetragen worden ist. Das sollte der Fall sein und dieser Task läuft nun alle fünf Minuten unter eben diesem Nutzer – fertig!

PHP-Optimierungen

Um den OPCache, der Nextcloud deutlich beschleunigt, zu aktivieren, müßt Ihr wie folgt verfahren:

Editiert die Datei

und nehmt das Semikolon vor den folgenden Zeilen weg, idealerweise passt Ihr in einem Rutsch auch die gewünschten Parameter an. Die stören ein gewöhnliches System nicht, treiben den Raspberry Pi aber in Sachen Speicher schon ein wenig an seine Grenzen. Hier sollte man trotz der Empfehlung von Nextcloud auch bedenken, welchen Hardware-Unterbau man hat. Nichtsdestotrotz funktionieren diese Parameter erst einmal:

Wo wir gerade dabei sind, stellen wir fest, dass das Upload-Limit von 2 MB bei einem Cloud-Server vielleicht ein wenig klein geraten ist. Mit den Werten (und den nachfolgenden) sollte man im Rahmen der eigenen technischen Möglichkeiten (hier ist es halt ein Raspberry Pi als Basis) einmal arbeiten und den besten Mittelweg für sich finden. Entscheidend sind die Werte

Es folgt der obligatorische Neustart des Webservers und die Werte sollten greifen – Haken dran!

Tabellenpflege

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.

    • 1.) Fehlender Index “parent_index” in der Tabelle “oc_share”.

    • 2.) Fehlender Index “owner_index” in der Tabelle “oc_share”.

    • 3.) Fehlender Index “initiator_index” in der Tabelle “oc_share”.

    • 4.) Fehlender Index “fs_mtime” in der Tabelle “oc_filecache”.

Lange Rede, kurzer Sinn – dem wollen wir natürlich auch nachkommen und erlangen das durch einmalige Eingabe von

nach dem zweiten Befehl bestätigen wir die Umwandlung und natürlich geht diese (dank eines neuen, frisch aufgesetzten Systems) entsprechend schnell. Check!

PHP-Memory-Cache

Ein PHP-Memory-Cache sollte ebenfalls zur Erhöhung der Leistungsfähigkeit eingesetzt werden. Auch bei kleineren Systemen wie hier (auch, wenn es in Sachen Speicherauslastung kritisch wird), nutze ich Redis. Den Redis-Server samt des passenden PHP-Moduls könnt Ihr durch Eingabe von

installieren. Anschliessend müssen in der config.php – der globalen Nextcloud-Konfigurationsdatei – die folgenen Parameter eingetragen werden. Wir öffnen die Datei also zum Editieren

und fügen ab der vorletzten Zeile die folgenden Variablen ein:

Ladet Eure Nextcloud-Webseite einmal neu und sofern dort kein weißer Bildschirm erscheint, sondern eben Eure Instanz, sollte die Änderung bereits gegriffen haben. Auf der Seite der Sicherheits – und Konfigurationswarnungen sollte nun die Meldung hinsichtlich des PHP-Memory-Cache nicht mehr auftauchen.

Was bleibt übrig?

Im Idealfall sollte man hier noch Hand an die PHP-Version legen, da der Performance-Sprung ab Version 7.2 schon sehr beachtlich ist. Das ist ohne Umwege beim Raspberry Pi und Raspbian Stretch Lite nicht so ganz trivial, da wir hier noch aufgrund der ARM-Architektur auf PHP 7.0 festgelegt sind. Das Ganze werde ich mir aber einmal in Ruhe anschauen und das Tutorial an dieser Stelle erweitern. Ein aktuelles Ubuntu beispielsweise fährt von Haus aus mit PHP 7.2, so dass diese letzte „Unschön“-Meldung im Backend von nextcloud nach Abarbeitung aller Schritte hier nicht auftauchen sollte.

Am Ende habt Ihr hiermit aber ein hoffentlich recht vollständiges Tutorial, wie Ihr Nextcloud in der aktuellen Version 15.0.5 auf einen Raspberry Pi (oder eben ein anderes Linux-System) lauffähig installieren könnt. Als Webserver fungiert ein aktueller Apache, hier ist PHP 7.0 und die MariaDB an Bord. Alle notwendigen Module sind ebenfalls installiert und auch der PHP-Memory-Cache in Form von Redis wurde nicht vergessen. Abgesichert wird das Ganze wunderbar durch Let’s Encrypt-Zertifikate – was will man mehr?

Ich hoffe, das Tutorial bringt den ein oder anderen weiter und freue mich auf Eure Kommentare, Euer Feedback und Eure eigenen Erfahrungsberichte! Postet diese gerne als Kommentar unter diesen Artikel! Solltet Ihr keine Lust oder keine Zeit haben, Eure eigene Nextcloud einzurichten, kommt gerne auf mein individuelles Angebot im Rahmen meiner Nextcloud-Services zurück und sprecht mich hinsichtlich Eurer persönlichen Lösung gerne an!

Viel Spaß!

 

Oliver Pifferi

Stolzer Familienvater. Digital Native und Cloud-Evangelist. Multimedia-Freak. Bekennender USA- und UK-Fan. Blogger mit stets zu wenig Zeit. Hobbyphilosoph. #JustMetal. Querdenker. Zyniker. Hauptberuflicher IT-Consultant- & Vertriebler. Auch zu finden bei LinkedIn. Dieser Artikel hat einen Job oder zumindest Euren Seelenfrieden gerettet und gegebenenfalls sogar für Kurzweil gesorgt? Die PayPal-Kaffeekasse freut sich - dankeschön!

Schreibe einen Kommentar

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

*

%d Bloggern gefällt das: