Forgot your password?

Forgot your username?

All about IT, Web and Development.
By users for users.

ownCloud mit Nginx und APC auf dem Raspberry Pi



Das Raspberry Pi eignet sich dank der geringen Ausmaße und dem niedrigen Stromverbrauch perfekt für den Betrieb einer eigenen Cloud mit ownCloud.



Performance


Ohne weitere Optimierungen läuft das System recht zäh. Dies liegt vor allem an der Geschwindigkeit von PHP auf dem Raspberry.

Um Ressourcen einzusparen verwenden wir deshalb den schlanken Webserver Nginx in Verbindung mit einem PHP Accelerator APC. Dieser fungiert als Cache für häufig ausgeführte PHP Skripte und legt den kompilierten Code im Hauptspeicher ab.


Vorbereitungen


Zunächst muss das Betriebssystem auf das Board. Hier mehr dazu. Es empfiehlt sich das Standardsystem Raspbian einzusetzen.


Memory Split


Da wir auf dem ownCloud Server keine grafische Oberfläche benötigen, können wir ohne Probleme den Speicher für die GPU zurückschrauben.

Hierzu die Datei /boot/config.txt mit nano oder einem anderen Editor anpassen.

sudo nano /boot/config.txt

Jetzt die Zeile für den Memory Split der GPU einfügen.

gpu_mem=16


Nginx, PHP5, APC und MySQL


Statt MySQL kann natürlich auch das schlankere SQLite verwendet werden. Allerdings kommt es hier des öfteren zu Problemen mit ownCloud.
Zunächst werden die benötigten Pakete installiert.

sudo apt-get install nginx php5 php5-cgi php5-fpm php5-gd php-apc php5-mysql mysql-server

Während der Installation muss ein Passwort für den MySQL Root Benutzer vergeben werden.



Datenbank einrichten


Aus Sicherheitsgründen sollte ownCloud nicht mit dem Root Benutzer auf die Datenbank zugreifen. Daher erstellen wir einen extra Benutzer mit dem Namen "owncloud" und geben diesem nur Berechtigungen auf die Datenbank "owncloud".

Hierzu zunächst auf die MySQL Befehlszeile einloggen.

mysql -u root -p

CREATE DATABASE owncloud;
CREATE USER 'owncloud'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON owncloud.* TO 'owncloud'@'localhost';
FLUSH PRIVILEGES;
exit;


Damit ist die Datenbank angelegt und der Benutzer auf die Datenbank berechtigt.


ownCloud installieren


Jetzt kann ownCloud installiert werden. Hierzu in den Document Root des Webservers wechseln und ownCloud herunterladen bzw. entpacken.

cd /usr/share/nginx/www/

wget -qO - http://download.owncloud.org/community/owncloud-5.0.11.tar.bz2 | sudo tar xvjf -

Der neu entstandene Ordner owncloud enthält nun alle Komponenten. Vor dem Start des Konfigurationsassistenten müssen noch die Berechtigungen angepasst werden.

sudo mkdir /usr/share/nginx/www/owncloud/data
sudo chown -R www-data:www-data /usr/share/nginx/www/owncloud/data



Dienste starten


Nun können die benötigten Dienste beim Systemstart aktiviert werden.

sudo update-rc.d mysql defaults
sudo update-rc.d php5-fpm defaults
sudo update-rc.d nginx defaults

Im Anschluss das Raspberry Pi neustarten.


APC einrichten


Die Konfiguration des Caches wird über die /etc/php5/conf.d/20-apc.ini vorgenommen.

extension=apc.so
apc.enabled=1
apc.file_update_protection=2
apc.shm_size=32M
apc.include_once_override=0
apc.shm_segments=1
apc.gc_ttl=7200
apc.ttl=7200
apc.num_files_hint=1024
apc.enable_cli=0



Nginx konfigurieren


Im nächsten Schritt wird die Konfiguration von Nginx angepasst und der PHP Parser aktiviert.

nano /etc/nginx/sites-enabled/default

Die Datei muss wie folgt beschrieben werden.


server {
   listen 80;
   root /usr/share/nginx/www/owncloud;
   server_name localhost;
   charset utf-8;

   client_max_body_size 10G; # 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 ~ ^/(data|config|\.ht|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)(/.*)?$ {
            try_files $1 = 404;

            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$1;
            fastcgi_param PATH_INFO $2;
            fastcgi_param htaccessWorking true;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
        }

}


Nach einem Neustart von Nginx ist ownCloud einsatzbereit.

sudo service nginx restart


Reaktionszeit per Cronjob steigern


Mit allen bisherigen Anpassungen ist ownCloud teilweise noch immer recht langsam. Dies liegt u.a. daran, dass bei jedem Aufruf von ownCloud ein Hintergrundprozess gestartet wird.

Daher richten wir hierfür einen Cronjob ein, welcher jede Minute die Aktionen durchführt. Anschließend kann der Ajax Hintergrundprozess deaktiviert werden.

Zunächst gehen wir in die ownCloud Administrator Einstellungen. Diese finden sich oben rechts im einem Klick auf den Benutzernamen unter dem Punkt Administrator. Hier setzen wir statt AJAX die Option Cron.



Auf dem Raspberry Pi wird nun der Cronjob wie folgt angelegt.

crontab -u www-data -e
Hier fügen wir die nachfolgende Zeile an.

*/1  *  *  *  * php -f /usr/share/nginx/www/owncloud/cron.php

Damit sollte sich die Geschwindigkeit nochmals deutlich steigern lassen.


Optional: Upload Größe anpassen


Die maximale Größe von Uploads wird in der php.ini festgelegt.

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

upload_max_filesize = 128M
post_max_size = 132M



Fazit


Möchte man eine performante ownCloud Installation sind einige umfangreiche Schritte notwendig. Vor allem die korrekte Einrichtung von Nginx gestaltet sich sehr komplex, da ein Einsatz von .htaccess Dateien mit Nginx nicht möglich ist.

Quellen: Raspberry Pi Logo, ownCloud Logo

Michael Kostka

Fachinformatiker / Systemintegration
Ich schreibe hier regelmäßig zu den Themen Android, Web, Linux und Hardware.

Raspberry Pi Starter Kit
DataCloud

Leave a comment

I have read the privacy policy and agree to electronically store and process my input data to answer the request.

Karsten

06.06.2015 11:47

Hallo,

tolle Anleitung die auch super funktioniert. Aber.... wo binde ich denn hier einen externen Speicherpfad ein?

Grüße
Karsten

Michael Kostka

28.02.2014 08:24

Hallo Andi,

wenn du oben rechts auf deinen Benutzernamen klickst, findet sich der Eintrag "Administrator".

Hier kannst du die nötigen Einstellungen treffen. Habe das mal im Artikel ergänzt. Danke für den Hinweis.

Viele Grüße
Michael

Andi

25.02.2014 17:10

Hey,

bei mir hapert es gerade an der stelle wo man in den ownCloud Administrator Einstellungen statt AJAX die Option Cron wählen soll ... wie kommt man aber in die Einstellungen?

Grüße Andi

Michael Kostka

01.01.2014 12:03

Hallo jh,

die Umstellung auf den Cronjob habe ich auf meinem Raspberry Pi vor kurzem durchgeführt.

Habe es oben mal im Artikel ergänzt.

Danke für den Hinweis.

Viele Grüße
Michael

jh

31.12.2013 16:29

Hi Michael,

gibt es einen Grund, warum Du owncloud nicht weg von Ajax hin auf Cron umstellst?

Gruß

PS: Deine Anleitung funktioniert, soweit ich das bisher beurteilen kann, auch prima mit dem Owncloud 6 Paket.

Michael Kostka

28.12.2013 10:52

Hallo rednag,

zunächst muss ownCloud in /usr/share/nginx/www/owncloud liegen.
Um es jetzt als Unterordner aufrufbar zu machen musst Du nur den Document Root und die Rewrite Regeln im Nginx anpassen.

Hierzu die Datei /etc/nginx/sites-enabled/default editieren.

Diese Zeile:

root /usr/share/nginx/www/owncloud;

Ändern in:

root /usr/share/nginx/www

Zusätzlich sollten die Rewrite Regeln angepasst werden:

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

Abschließend die Konfiguration neu laden.

service nginx reload

Dann sollte es funktionieren.

Viele Grüße
Michael

rednag

28.12.2013 02:38

Prima Anleitung.
Hat auf Anhieb alles geklappt.
Sehr ausfürlich, sogar für Linux-Laien wie mich nachvollziehbar.
Wenn ich jedoch die Adresse XXX.myftp.org aufrufe, komme ich immer zu owncloud.

Wie kann ich jetzt aber die owncloud-Instanz in einen Ordner verschieben das ich xxx.myftp.org/owncloud eingeben muß?
Ich hätte gerne auf dem nginx eine kleine Webseite gehostet, darum wäre owncloud in einem Unterordner hilfreich.
Ich hoffe es kann mir wer helfen.

Michael Kostka

26.12.2013 14:05

Wichtig ist die nachfolgende Zeile:

CREATE USER 'owncloud'@'localhost' IDENTIFIED BY 'password';

Der Benutzername wäre dann "owncloud" mit dem Passwort "password".

Du kannst ownCloud auch den Root Benutzer der Datenbank mitgeben.
Der owncloud MySQL Benutzer wird dann automatisch angelegt.

Wenn Du das Root Kennwort für MySQL nicht mehr weißt, kannst du es auch neu setzen:

sudo dpkg-reconfigure mysql-server

Viele Grüße
Michael

rednag

25.12.2013 23:15

Immer falsches Passwort:
MySQL Benutzername und/oder Passwort ungültig Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.

Vielleicht hat ja wer einen Tipp für mich.