Vor einiger Zeit habe ich DAViCal auf meinem Raspberry Pi installiert, damit ich meinen Kalender und meine Kontakte lokal in meinem Neztwerk syncen kann. Dabei hatt DAViCal den Vorteil, dass es nur wenig Ressourcen benötigt. Allerdings hat sich gezeigt, dass das Webfront-End InfCloud, das ich verwendet habe, seine Macken hat. Daher habe ich mich entschlossen auf meinem Raspberry ownCloud 8.1 zu installieren.

01| nginx und PHP installieren

Da nginx bietet mehr Optionen als lighttpd und benötigt weniger Ressourcen als der Apache. Also habe ich mich für nginx entschieden. Sollte bereits ein anderer Web-Service laufen, muss der ggf. zunächst deaktiviert oder deinstalliert werden. Mit dem Kommando update-rc.d apache2 disable  wird z.B. ein automatischer Start des Apache unterbunden.

Die Installation basierend auf nginx ist nicht die einfachste Methode die ownCloud auf den Raspberry zu bekommen. Der einfachste Weg wohl ist die vom ownCloud-Team empfohlene Installation per OpenSuse Repository. Diese setzt allerdings auf Apache auf, so dass ich hier nicht weiter darauf eingehe. Neben der oben genannnten Anleitung owncloud.org gibt es zahlreiche andere Beschreibungen im Internet (siehe z.B. raspberry.tips).

Die grundlegende Installation des nginx (inkl. PHP) ist denkbar einfach:

02| nginx konfigurieren

Die nginx-Konfiguration, die im  ownCloud 8.1 Administrationshandbuch vorgeschlagen wird,  habe ich als Ausgangsbasis verwendet und in der Datei  /etc/nginx/sites-available/owncloud  gespeichert. Anschließend werden zuerst die grundlegenden Parameter angepasst:

Soll die ownCloud später in einem separaten Pfad liegen (z.B. https://raspberry/owncloud), dann müssen in der Konfiguration auch noch alle Weiterleitungen (rewrite) entsprechend angepasst werden.

Für eine SSL/TLS-Verschlüsselung muss wie auch für den DAViCal-Server ein Schlüssel und ein Zertifikat erstellt werden. Ich verwende für die Schlüsselverwaltung XCA und habe das Vorgehen in einem eigenen Artikel beschrieben: Private CA für interne Web-Server erstellen. Für nginx muss der private Schlüssel und das zugehörige Zertifikat in separaten Dateien für dei Konfigurationsparameter   ssl_certificate_key  vorliegen. Ich habe den Server-Key daher in der Datei /etc/nginx/ssl/server.key  gespeichert und die Berechtigungen auf den Schlüssel entsprechend eingeschränkt ( chmod 400 server.key ). Das zum Schlüssel gehörende Zertifikat wird über den Konfigparameter  ssl_certificate  festgelegt. Hier erwartet nginx eine Datei, die alle Zertifikate der Zertifikatskette enthält. Dabei muss das erste Zertifikat in der Datei das passende Zertifikat zum Schlüssel sein. Alle weiteren Zertifikate (z.B. Intermediate-CA- und CA-Zertifikate) kommen dann danach. Eine solche Datei kann beispielsweise folgendermaßen aus einzeldateien erzeugt werden:

Danach können folgende Zeilen in der nginx-Konfig ergänzt werden:

Danach sollte der nginx per TLS erreichbar sein ohne eine Fehlermeldung im Browser zu erzeugen (voraussgetzt die Root-CA ist bereits im Browser installiert; siehe auch Private CA erstellen).

Für eine sichere TLS-Verbindung sollten die vom Server unterstützten Cipher-Suiten eingeschränkt werden:

Normalerweise werden die unten aufgeführten Security-Header schon in der vorgeschlagenen Konfiguration von ownCloud berücksichtigt. Um auf Nummer Sicher zu gehen, ist eine kurzer Gegencheck zu empfehlen:

Um die HTTPS-Performance zu verbessern sollten folgende Parameter gesetzt werden:

Wenn DH-Suiten mit einer Schlüssellänge > 1024 Bit verwendet werden sollen, dann kann wie bei der DAViCal Installation zusätzlich noch ein spezielles DH-File erzeugt werden:

Das Kommando erzeugt einen File für 2048Bit. Sollten 2048-Bit nicht ausreichen und lieber auf 4096 -Bit zurückgegriffen werden, so kann das Kommando entsprechend angepasst werden. Ich empfehle das Kommando auf einem System mit mehr Rechenleistung auszuführen und die Datei anschließend zu kopieren, da dier Erzeugung der Datei auf dem Raspberry einige Zeit in Anspruch nehmen kann. Mit der folgende Zeile wird die Datei in die Konfiguration aufgenommen:

Damit die Konfiguration aktiv wird muss noch ein symbolischer Link auf die Datei im Verzeichnis angelegt werden:

03| PHP konfigurieren

Eigentlich muss bei PHP nicht mehr viel angepasst werden. In der Regel möchte man in der ownCloud jedoch auch Dateien hochladen können, die größer als 513MB sind. Daher müssen an unterschiedlichen Stellen die Werte für die Parameter  upload_max_filesize  und  post_max_size  angepasst werden.

03.a| Maximale Upload-Größe anpassen

Da bei nginx  php-fpm  genutzt wird, sind die Parameter in der Datei /etc/php5/fpm/php.ini zu ändern. Bei mir habe ich eine Upload-Größe auf 2 GB eingestellt:

Da der ownCloud CRON jobs php-cli verwendet muss ggf. auch noch die Datei /etc/php5/cli/php.ini angepasst werden. Zusätzlich wird die Datei-Upload-Größe auch noch .htaccess  im Root-Verzeichnis der ownCloud-Installationeingstellt werden:

Für eine nginx-Installation ist das leider immer noch nicht ausreichend, da bei nginx die PHP-Parameter in der .htaccess  per Default nicht berücksichtigt werden. Die einfachste Lösung: die Parameter in der Datei .user.ini im ownCloud-Root-Verzeichnis anpassen. Damit sollte dann auch die der Upload für große Dateien möglich sein. Alternativ kann auch die PHP-Modul (PECL-Extension)  htscanner  installiert werden,  das die PHP-Einstellungen in der .htaccess  ausliest.  Die PECL-Erweiterung htscanner kann folgendermaßen installiert werden:

Wurde das Modul entsprechend fehlerfrei übersetzt muss es abschließend noch aktiviert werden. Dazu wird die Datei  /etc/php5/mods-available/htscanner.ini  mit folgendem Inhalt angelegt:

Ein Link auf diese Datei sorgt dafür, dass das Modul beim nächsten Start von PHP-fpm geladen wird:

Mit einem Service-Restart wird das Modul dann geladen:

03.b| Systempfade in PHP-fpm aktivieren

Manchmal erscheint nach der Installation folgende Fehlermeldung auf der Administrationsseite:

PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (“PATH”) liefert nur eine leere Antwort zurück. Bitten überprüfe die Installationsdokumentation auf Hinweise zur PHP-Konfiguration sowie die PHP-Konfiguration Deines Servers, insbesondere dann, wenn Du PHP-FPM einsetzt.
Um diese Meldung zu beseitigigen müssen in der Datei /etc/php5/fpm/pool.d/www.conf lediglich folgende Zeilen durch entfernen des Semikolons aktiviert werden:

Danach muss nur noch php5-fpm neu gestartet werden:

Weitere Informationen in der Dokumentation zur ownCloud.

04| MySQL installieren und konfigurieren

Grundsätzlich kann ownCloud auch ohne eine vollwertige Datenbank betrieben werden. In diesem Fall greift die ownCloud dann auf SQLite zurück, was für eine normale Umgebung zuhause eigentlich ausreichend sein sollte. Ich habe mich allerdings für die Verwendung von ownCloud mit MySQL entschieden:

Bei der Installation sollte direkt ein Passwort für den root-Zugriff auf die Datenbank angegeben werden. Dieses Passwort bitte gut merken – es wird gleich noch benötigt. Wenn die Installation abgeschlossen ist muss die Datenbank noch eingerichtet werden. Dazu zunächst mit mysql -u root -p  eine Verbindung zur Datenbank aufbauen und mit dem root-Passwort aus der Installation an der Datenbank anmelden. Danach muss eine Datenbank und ein User angelegt werden. Danach müssen dem User noch entsprechende Berechtigungen zugeordnet werden:

Damit ist die Datenbank für die ownCloud vorbereitet und es kann mit der ownCloud-Installation begonnen werden.

05| ownCloud installiern und konfigurieren

Zwar kann ownCloud auch per apt-get installiert werden, wenn das entsprechende Repository eingebunden wird (siehe ownCloud 8.1 Administrationshandbuch). Da ich allerdings auf nginx setze habe ich die owncloud nach der Anleitung auf owncloud.org manuell installiert:

  1. Archiv inkl. sh256-Checksum von owncloud.org herunterladen:
  2. Checksumme des Archivs prüfen:
  3. Ist die Prüfsumme OK, dann das Archiv entpacken:
  4. Berechtigungen des owncloud-Verzeichnis anpassen:

Danach kann auch schon der Setup-Assistent im Browser unter der URL https://<IP des RasPi>/owncloud  aufgerufen werden. In dem Dialog kann dann der Admin-Account für die ownCloud angelegt werden. Im Abschnitt Speicher und Datenbank kann das Verzeichnis zur Speicherung der ownCloud-Daten angegeben werden. Hier könnte zum Beispiel auch ein Pfad zu einer externen Festplatte angegeben werden, wenn z.B. auch Dateien auf der Owncloud gespeichert werden sollen und nicht nur Kontakte und Termine. Im Abschnitt Datenbank einrichten muss jetzt nur noch MySQL ausgewählt und die Informationen für den Verbindungsaufbau zur Datenbank angegeben werden:

  • User: owncloud
  • Passwort: <passwort_des_db_users>
  • Datenbank: owncloud
  • Server: localhost

Mit dem Button “Installation abschließen” läuft die Konfiguration dann hoffentlich problemlos durch. Damit die Kalender und Kontakte verwaltet werden können müssen zu guter Letzt nur noch die Apps “Calender” und “Contacts” über den +-Button im Datei-Menü aktiviert werden.

06| ownCloud-Probleme beseitigen

Nach der Installation treten gerne ein paar Warnungen im Menü “Adminsitration” auf. Diese können folgendermaßen behoben werden:

06.a| Caching aktivieren

Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer Dokumentation.
Damit das Caching aktiviert werden kann muss zunächst das entsprechende PHP-Modul installiert werden (falls das nicht bereits oben schon passiert ist): Anschließend wird nginx neu gestartet ( service nginx restart) und folgende Zeile in der ownCloud-Config ( config/config.php) hinzugefügt: Detaillierte Information zum Caching sich im ownCloud-Blog.

06.b| HTTP Strict Transport Security aktivieren

“The “Strict-Transport-Security” HTTP header is not configured to least “15768000” seconds. For enhanced security we recommend enabling HSTS as described in our security tips.”
Wenn die nginx Konfiguration korrekt durchgeführt wurde (siehe Abschnitt 01), sollte diese Meldung eigentlich nicht mehr auftauchen. Kommt die Fehlermeldung dennoch, dann sollte kurz überprüft werden, ob SSL in aktiviert wurde und der Eintrag in dem SSL-Abschnitt der entsprechenden Konfig-Datei vorhanden ist.