Website-Icon RandomBrick.de

Raspberry Pi: Owncloud Server installieren und einrichten

Die Cloud für Zuhause anstatt auf einen kommerziellen Anbieter angewiesen zu sein, lässt sich zwischenzeitlich einfacher den je realisieren. Wer eine Alternative zu Dropbox sucht und mit Google Drive und Co nicht glücklich wird, findet zahlreiche alternative Lösungen. Dieser Artikel erklärt, wie sich auf einem Raspberry Pi Owncloud installieren und anschließend einrichten lässt.

Die Gründe für das Hosten eines eigenen Cloudservers sind zahlreich und es gibt viele unterschiedliche Hard- und Softwarelösungen. Eine erste Auswahl wurde mit dem Vergleich von Owncloud, Seafile und BitTorrent Sync getroffen. Es wird eine Software gesucht, die auf dem super günstigen, kleinen und stromsparenden Raspberry Pi läuft.

Owncloud auf dem Raspberry Pi installieren (Bild: Owncloud.com)

Raspberry Pi: Owncloud Server installieren und einrichten

Owncloud ist eine auf PHP entwickelte freie Software für das Speichern von Daten auf einem eigenen Server. Das kann ein gehosteter Webserver oder ein entsprechend konfigurierter privater Computer sein. Der Funktionsumfang von Owncloud ist gigantisch und würde den Rahmen des Beitrags sprengen. Kurz gefasst, über Owncloud lässt sich von Dateien über Kalender bis zu Kontakte alles synchronisieren. Eine der Besonderheiten ist die Dateiversionierung, die das Zurücknehmen von Änderungen ermöglicht. Wer Überlegungen zur Hardware anstellt, findet in der Raspberry Pi 3 Kaufberatung einige brauchbare Tipps und Links.

Für die Installation von Owncloud auf einem Raspberry Pi muss man ein kein eingefleischter Linux-Profi sein, sondern lediglich etwas gesunde Neugierde mitbringen und diese Anleitung Schritt für Schritt durcharbeiten. Diese Anleitung setzt ein lauffähiges Raspbian oder eine ähnliche Distribution voraus. Die Artikel Raspberry Pi 3 unter OS X einrichten sowie Raspberry Pi 3 unter Windows einrichten helfen bei der Erstinstallation.

Schritt 1: Betriebssystem updaten

Vor der Installation von Owncloud auf dem Raspberry Pi werden alle Pakete des Betriebssystems auf den aktuellen Stand gebracht. Das erfolgt mit folgendem Befehl über den Terminal:

sudo apt-get update && sudo apt-get upgrade

Schritt 2: Webserver Nginx und PHP installieren

Die Installation von Nginx auf dem Raspberry Pi ist eine eigene Anleitung. Diese muss vor der Installation von Owncloud ausgeführt werden.

Schritt 3: SWAP erweitern

Der SWAP ist ein Zwischenspeicher und wird ähnlich wie der Arbeitsspeicher behandelt. Die SWAP-Datei wird dabei auf einem permanenten Speichermedium (beim Raspberry Pi ist es die SD-Karte) abgelegt. Eine Erweiterung der SWAP ist kostengünstiger als beispielsweise den Arbeitsspeicher zu erweitern, dafür nicht so reaktionsschnell wie der RAM.

Zuerst muss die SWAP-Datei erzeugt werden. Als Faustregel wird gerne RAM * 2 = SWAP genommen. Für die meisten Anwendungen auf dem Raspberry Pi genügt der Arbeitsspeicher plus 1024 MB an SWAP. Für den Raspberry Pi 3 Model B sollten 1024 MB auf der SD-Karte für den SWAP reserviert werden.

sudo su -c 'echo "CONF_SWAPSIZE=1024" > /etc/dphys-swapfile'
sudo dphys-swapfile setup

Nachdem die SWAP-File erzeugt wurde, ist diese einmalig zu aktivieren.

sudo dphys-swapfile swapon

Schritt 4: Datenbank installieren

In Schritt 2 wurde mit dem Nginx Webserver nur PHP installiert. Zusätzlich wird für die Owncloud Installation auf dem Raspberry Pi auch eine Datenbank benötigt. Während der Installation des MySQL-Server ist ein root-Passwort für den MySQL-Server zu vergeben. Dieses sollte ausreichend sicher sein, da root alle Rechte hat. Wie aus Schritt 2 bekannt, erfolgt auch hier die Installation aus dem stretch Release.

sudo apt-get install -t stretch php-apc mysql-server php7.0-mysql

Schritt 5: Upload-Größe von Dateien anpassen

Wer große Dateien über Owncloud hochladen möchte, muss dazu zwei Einträge in der php.ini entsprechend anpassen. Die upload_max_filesize und post_max_size können hier um beliebig große Werte erweitert werden. Gleichzeitig empfiehlt es sich den Standard-Zeichensatz von PHP auf UTF-8 ändern. Das verhindert Probleme mit Umlauten in Dateinamen.

sudo nano /etc/php/7.0/fpm/php.ini

Die alten Werte sehen beispielsweise wie folgt aus:

upload_max_filesize = 2M
post_max_size = 8M
;default_charset = "UTF-8"

Ich habe diese durch folgendes ersetzt:

upload_max_filesize = 20480M
post_max_size = 20480M
default_charset = "UTF-8"

Zusätzlich sind folgende Zeilen zu suchen:

;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

Hier müssen die „;“ am Zeilenanfang entfernt werden:

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Die php.ini ist sehr lang. Mit Strg + W lässt sich diese nach den gewünschten Werten durchsuchen. Mit Strg + X, Y und Enter speichern und schließen. Das ermöglicht das Hochladen von bis zu 20 GB große Dateien.

Schritt 6: Caching aktivieren und temporären Uploadpfad definieren

Die php.ini wird um weitere Zeilen erweitert um das Caching zu aktivieren und den temporären Uploadpfad zu definieren.

sudo nano /etc/php/7.0/fpm/php.ini

Hier sind folgende Zeilen ganz am Ende der php.ini einzufügen. Tipp: Strg+V halten, damit scrollt man ganz nach unten.

upload_tmp_dir = /srv/http/owncloud/data
extension = apc.so
apc.enabled = 1
apc.include_once_override = 0
apc.shm_size = 256

Mit Strg + X, Y und Enter speichern und schließen.

Schritt 7: Ordner für Uploadpfad anlegen

Der Ordner, der in Schritt 6 als temporärer Uploadpfad festgelegt wurde, muss noch angelegt und mit entsprechenden Rechte für den Benutzer www-data ausgestattet werden.

sudo mkdir -p /srv/http/owncloud/data
sudo chown www-data:www-data /srv/http/owncloud/data

Schritt 8: SSL-Zertifikat für Nginx erstellen

Damit die Verbindung zum Webinterface und die Datensynchronisation verschlüsselt abläuft, ist ein SSL-Zertifikat für Nginx zu erstellen. Diesem SSL-Zertifikat sind die benötigten Rechte zuzuweisen. Bei den Rückfragen bei der Erstellen genügt es lediglich dem Country Name den Wert DE für Deutschland und bei Common Name die interne IP-Adresse des Raspberry Pis oder, falls vorhanden, die DynDNS Domain des Raspberry Pis für externe Zugriffe anzugeben. Alle weiteren Fragen erhalten mittels Enter den Standardwert.

sudo mkdir /etc/nginx/ssl
sudo openssl genrsa -out /etc/nginx/ssl/owncloud.key 4096
sudo openssl req -new -sha256 -key /etc/nginx/ssl/owncloud.key -out /etc/nginx/ssl/owncloud.csr
sudo openssl x509 -req -sha256 -days 3650 -in /etc/nginx/ssl/owncloud.csr -signkey /etc/nginx/ssl/owncloud.key -out /etc/nginx/ssl/owncloud.crt

Information: Später werden sich der Owncloud Client als auch der Browser beschweren, dass das SSL Zertifikats nicht vertrauenswürdig sei. Das liegt daran, dass dieses von euch selbst signiert wurde. Folglich ist diese Warnung einfach zu ignorieren.

Schritt 9: Konfigurationsdatei von Nginx erstellen

Diese Anleitung setzt auf Nginx und nicht Apache als Server. Die Konfigurationsdatei von Nginx ist umfangreich anzupassen, damit Owncloud auf dem Raspberry Pi problemlos funktioniert und später direkt unter der IP-Adresse oder DynDNS Domain ohne Pfadangabe erreichbar ist. Dazu ist die Angabe des root-Pfades zu ändern. Zusätzlich sind einige Zeilen zu ersetzen, da Nginx nicht mit der .htaccess Datei von Owncloud umgehen kann. Und abschließend ist die SSL-Verbindung in der Konfiguration zu aktivieren.

Hierfür erstellen wir eine neue Konfigurationsdatei mit dem Namen owncloud.

sudo nano /etc/nginx/sites-available/owncloud

In der Konfiguration ist die IP 192.168.0.XX durch die IP-Adresse bzw., falls vorhanden, die DynDNS Domain, des Raspberry Pis zu ersetzen.

upstream php-handler {
 server 127.0.0.1:9000;
 #server unix:/var/run/php/7.0-fpm.sock;
 }

server {
 listen 80;
 server_name 192.168.0.XX;
 return 301 https://$server_name$request_uri; # enforce https
 }

server {
 listen 443 ssl;
 server_name 192.168.0.XX;

ssl_certificate /etc/nginx/cert.pem;
 ssl_certificate_key /etc/nginx/cert.key;

# Path to the root of your installation
 root /var/www/owncloud;

client_max_body_size 1000M; # set max upload size
 fastcgi_buffers 64 4K;

rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
 rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
 rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

index index.php;
 error_page 403 /core/templates/403.php;
 error_page 404 /core/templates/404.php;

location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }

location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README) {
 deny all;
 }

location / {
 # The following 2 rules are only needed with webfinger
 rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
 rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
 rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;

rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;

try_files $uri $uri/ index.php;
 }

location ~ \.php(?:$|/) {
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 fastcgi_param HTTPS on;
 fastcgi_pass php-handler;
 }

# Optional: set long EXPIRES header on static assets
 location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
 expires 30d;
 # Optional: Don't log access to assets
 access_log off;
 }

}

Mit Strg + X, Y und Enter speichern und schließen.

Schritt 10: Konfigurationsdatei umhängen

Aktuell ist noch die default Konfiguration aus Schritt 2 für den Nginx-Server hinterlegt. Diese muss jetzt entfernt werden. Dabei wird nur den Hinweis auf die Konfiguration gelöscht und nicht die Datei selbst:

sudo rm /etc/nginx/sites-enabled/default

Anschließend Nginx einmal neu laden:

sudo service nginx reload

Jetzt wird die neue Konfigurationsdatei mit dem Namen owncloud in das Verzeichnis sites-enabled verlinken:

sudo ln -s /etc/nginx/sites-available/owncloud /etc/nginx/sites-enabled/owncloud

Schritt 11: PHP 7.0 Konfiguration ändern

Die Konfiguration der PHP 7.0 FPM benötigt ebenfalls eine Anpassung:

sudo nano /etc/php/7.0/fpm/pool.d/www.conf

Suche folgende Zeile:

listen = /run/php/php7.0-fpm.sock

Und ändere diese in:

listen = 127.0.0.1:9000

Mit Strg + X, Y und Enter speichern und schließen.

Schritt 12: Nginx Neustart

Nach dem Speichern der Änderungen sollte Nginx und php7.0-fpm neugestartet werden.

sudo /etc/init.d/nginx restart
sudo /etc/init.d/php7.0-fpm restart

Schritt 13: MySQL Datenbank anlegen

Für die Installation von Owncloud auf dem Raspberry Pi ist eine eigene Datenbank notwendig. Dazu wird eine MySQL Datenbank angelegt. Die Datenbank nenne ich hier in dieser owncloud. Die Datenbank mit einem Benutzer für Owncloud angelegt, der hier ebenfalls owncloud heißt. Das in Schritt 4 definierte Passwort root-Passwort wird bei der Anlage der Datenbank benötigt.

Nachfolgend werden die notwendigen Eingaben und die Antworten vom System angegeben. Die von euch zu tätigenden Eingaben sind in fett markiert. Den Ausdruck PASSWORD fast zum Schluss ist zwingend durch ein möglichst sicheres Passwort für den Benutzer zu ersetzen.

mysql -u root -p

 

pi@raspberrypi /var/www $ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.30-1 (Raspbian)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

 

Type ‚help;‘ or ‚\h‘ for help. Type ‚\c‘ to clear the current input statement.

  mysql> CREATE DATABASE owncloud CHARACTER SET utf8; Query OK, 1 row affected (0.00 sec) mysql> GRANT ALL ON owncloud.* TO ‚owncloud’@’%‘ IDENTIFIED BY ‚PASSWORD‘ WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye

Schritt 14: Owncloud herunterladen

Bis zu diesem Schritt wurde der Raspberry Pi für die Installation von Owncloud vorbereitet. Jetzt kann Owncloud heruntergeladen und für die Installation vorbereitet werden. Die neuste Version von Owncloud ist zum Zeitpunkt dieser Anleitung die Version 9.1.0.

Die aktuelle Version findet sich unter http://owncloud.org/install/. Für diese Anleitung ist es wichtig, dass nicht der Web Installer sondern das volle Paket als .tar.bz2 herunterladen wird. Anschließend wird diese entpackt und den Dateien die benötigten Rechte zugewiesen.

sudo mkdir /var/www
cd /var/www
sudo wget https://download.owncloud.org/community/owncloud-9.1.0.tar.bz2
sudo tar -xf owncloud-9.1.0.tar.bz2
sudo rm owncloud-9.1.0.tar.bz2
sudo chown -R www-data:www-data /var/www

Schritt 15: Owncloud auf dem Raspberry Pi installieren

Für die Installation auf dem Raspberry Pi ist Owncloud im Browser über die von euch oben festgelegte IP oder DynDNS Domain aufzurufen. Die Installationsoberfläche sollte automatisch erscheinen. Dort ist der gewünschte Benutzernamen und das Passwort für den ersten Benutzer festzulegen. Unter Speicher & Datenbank -> Datenbank einrichten ist die in Schritt 13 erstellte Datenbank als Datenbank-Benutzer und Datenbank-Name anzugeben. Hier im Beispiel habe ich dafür owncloud verwendet. Das Datenbank-Passwort ist das in Schritt 13 von euch definierte Passwort.

Schritt 16: Cronjob anlegen

Nach der Installation wird über das Webinterface von Owncloud noch ein Cronjob angelegt, der alle 15 Minuten unterschiedliche Aufgaben im Hintergrund erledigt. Das beschleunigt die Benutzung von Owncloud erheblich.

sudo nano crontab -u www-data -e

Am Ende der Datei einfügen

*/15  *  *  *  * php -f /var/www/owncloud/cron.php

Schritt 17: Von AJAX auf Cron

Damit durch den Cronjob erledigte Aufgaben nicht ebenfalls im Browser ausgeführt werden, sind die Einstellungen von AJAX auf Cron zu ändern. Diese finden sich unter Dein Benutzername -> Administrator -> Cron.

Cron für Owncloud aktivieren (Bild: Screenshot).

Jetzt ist der Owncloud Server auf dem Raspberry Pi installiert und konfiguriert.

Abschließende Hinweise

Wie unter Schritt 8 schon angemerkt, ist das SSL-Zertifikat von euch selbst erstellt und signiert. Euer Browser und Owncloud Client wird beim ersten Aufruf die Unsicherheit des SSL-Zertifikats anmerken. Diese Warnung kann ignoriert werden. Wen das stört, kann beispielsweise bei StartSSL ein kostenloses SSL-Zertifikat beantragen.

Mehr Speicherplatz

Genügt der Speicherplatz auf der SD-Karte des Raspberry Pis nicht aus, kann unter Speicher & Datenbank > Datenverzeichnis der Pfad zum Speichermedium eingetragen werden. Wie sich ein USB-Stick oder eine USB-Festplatte auf dem Raspberry Pi einbinden lässt, erklärt der verlinkte Beitrag. Die Installation dauert wenige Minuten in denen der Browser nur lädt.

Kalender/Kontakte

Wer seinen Kalender und/oder die Kontakte über Owncloud synchronisieren möchte, benötigt für den Abruf die entsprechenden URLs. Die in eckigen Klammern stehenden Werte sind einschließlich der Klammern zu ersetzen.

Ohne SSL

CalDAV (allgemein): http://[IP/DynDNS]/remote.php/caldav/
CalDAV (für iOS/OS X): http://[IP/DynDNS]/remote.php/caldav/principals/[username]/

CardDAV (alle Geräte)

http://[IP/DynDNS]/remote.php/carddav/addressbooks/[username]/[cal name]

Mit SSL

CalDAV (allgemein): https://[IP/DynDNS]/remote.php/caldav/
CalDAV (für iOS/OS X): https://[IP/DynDNS]/remote.php/caldav/principals/[username]/

CardDAV (alle Geräte)

https://[IP/DynDNS]/remote.php/carddav/addressbooks/[username]/[cal name]

Zugriff auf Owncloud außerhalb des eigenen Netzwerks

Soll Owncloud auch außerhalb des eigenen Netzwerks verfügbar sein, ist eine Portfreigabe am Router notwendig. Dazu sind folgende Ports freizugeben:

Owncloud Installation Fehlerbehebung

Nach der erfolgreichen Installation können folgende Fehler bei Owncloud gemeldet werden (unter Security & Setup Warnings):

  1. PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv („PATH“)
  2. The „Strict-Transport-Security“ HTTP header is not configured to at least „15552000“ seconds.

Lösung zu Fehler 1:

sudo nano /etc/php/7.0/fpm/pool.d/www.conf

Zeile suchen: Strg+W

;clear_env = no
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

An allen Zeilen das Semikolon entfernen und mit Strg + X, Y und Enter speichern und schließen.

sudo /etc/init.d/nginx restart
sudo /etc/init.d/php7.0-fpm restart

Lösung zu Fehler 2
Ein neuer Eintrag ist in der onwcloud Konfiguration vorzunehmen:

sudo nano /etc/nginx/sites-available/owncloud

Hier ist ganz am Ende folgende Zeile einzutragen:

add_header Strict-Transport-Security max-age=31536000;

Mit Strg + X, Y und Enter speichern und schließen. Anschließend:

sudo /etc/init.d/nginx restart
sudo /etc/init.d/php7.0-fpm restart

Tipp: Einrichtung der dynamischen IP-Adresse & Routereinstellung

Vei twodns (oder anderen Anbieter suchen) die dyn. IP Adresse erstellen und die Router Konfiguration durchführen!

Beispielsweise unter www.twodns.de registrieren. „Melden Sie sich nun bei einer dieser Seiten für einen kostenlosen Tarif an. Dort werden Sie einen sogenannten Hostnamen anlegen, z.B. „muellercloud.twodns.de“. Über diesen Namen ist Ihre Cloud später erreichbar. Auf der Seite des dynamischen DNS-Anbieters werden Sie häufig auch Informationen vorfinden, um diesen Anbieter in Ihrem Router einzurichten.“

Zitat aus http://eigene-cloud-einrichten.de/

Freigaben am Router:

Beispiel an einer Fritzbox 7390:
Menü -> Heimnetzübersicht -> Alle verbundenen oder angemeldeten Heimnetz-Geräte (Tabelle) -> Raspberry rechts auf Details -> Häkchen machen bei -> Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen.

Menü -> Internet -> Freigaben -> Portfreigaben -> Neue Portfreigabe -> Portfreigabe aktiv für (Häkchen setzen und andere Anwendungen auswählen):

Menü -> Internet -> Freigaben -> Dynamic DNS -> Dynamic DNS benutzen (Häkchen machen)

Persönliche Meinung

Die Installation von Owncloud auf dem Raspberry Pi ist ein Kraftakt und im Vergleich zur Installation von Seafile auf dem Raspberry Pi deutlich aufwendiger. Es gibt einige Stolpersteine. Zudem ist der Performancebedarf von Owncloud im Vergleich zu Seafile nicht zu unterschätzen. Für Leser denen beide Anwendungen zu kompliziert sind und die nicht ganz so viel Funktionsumfang benötigen wie Seafile oder Owncloud sollten einen Blick auf die Installation von BitTorrent Sync auf dem Raspberry Pi werfen. Die Pro-Version kostet für Privatpersonen einmalig 35 Euro dafür die Installation ist deutlich einfacher.

Vielen Dank an den Leser Viktor Mitic, der sich sehr viel Zeit genommen hat. Viktor ist Schritt für Schritt durch die Anleitung und hat dabei einige Fehler gefunden und diese für mich korrigiert. Viktor liest in den Kommentaren mit und hilf sicher, solltet ihr Fragen zum Thema haben.

Die mobile Version verlassen