Boxpirates Wiki >>> Cloud

Aus Boxpirates Wiki
Version vom 29. Dezember 2014, 17:23 Uhr von Reiter (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Raspicloud.png

= Owncloud auf dem Raspberry Pi =

Vorwort

Owncloud ist inzwischen der Klassiker, wenn es darum geht, sich “eine eigene Cloud” zu installieren.

Warum liegt auf der Hand: Auf jedem Webspace zu installieren, einfach in der Installation und Handhabung, wie auch ein ausgebautes Webinterface.

Möchte man seine Daten jedoch nicht auf einem angemieteten Webspace ablegen, so bietet es sich an, Owncloud auf den Raspberry Pi oder Banana Pi zu installieren.

Voraussetzungen

Zunächst installieren wir Nginx mit PHP (genauer php5-fpm) auf dem Raspberry Pi.

Wir setzten bewusst auf Nginx anstatt auf Apache2, da dieser Webserver wesentlich weniger Ressourcen benötigt.

Systemvoraussetzungen ändern

Nun empfiehlt es sich, den Raspberry Pi noch zu übertakten (nicht zwingend notwenig), Des Weiteren müssen wir den SWAP erweitern.

Installieren von PHP-Modul

Wir installieren jetzt noch das PHP-Modul php-apc für ein einfaches Caching und sqlite3 als Datenbank.

Welche Datenbank man nun nutzt ist jedem selbst überlassen..manche werden schon MySQL installiert haben da kann man diese gleich mit nutzen.

Wir verwenden hier SQLite3 anstatt MySQL, da diese keiner weiteren Konfiguration erfordert.

man kann aber auch die grössere MySQL nehmen wo dann eine Datenbank angelegt wird, genau wie ein Datenbank-User was dann auch in der Owncloud hinterlegt werden muss

  • sudo apt-get install php-apc php5-sqlite sqlite3

Anpassen der PHP.ini

Damit wir später auch größere Dateien über Owncloud speichern können, müssen wir upload_max_filesize und post_max_size entsprechend anpassen.

Ich setzte das Limit auf 1024 MB. In dem Editor nano kann man mittels STRG + X, Y und Enter speichern.

  • sudo nano /etc/php5/fpm/php.ini
upload_max_filesize = 2M
post_max_size = 8M

ersetzen durch

upload_max_filesize = 1024M
post_max_size = 1024M

Ebenfalls in der php.ini fügen wir am Ende der Datei folgende Zeilen ein um das Caching zu aktivieren und den temporären Uploadpfad zu definieren.

  • sudo nano /etc/php5/fpm/php.ini
upload_tmp_dir = /srv/http/owncloud/data
extension = apc.so
apc.enabled = 1
apc.include_once_override = 0
apc.shm_size = 256

Temporären Ordner anlegen

Nun legen wir den Ordner, den wir gerade als temporären Uploadpfad definiert haben, an und geben diesem Ordner entsprechende Rechte beschrieben zu werden.

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

unter www erreichbar machen

Damit Owncloud später direkt unter der IP-Adresse oder DynDNS ohne Pfadangabe erreichbar ist, ersetzen wir in der Datei /etc/nginx/sites-available/default die folgende Zeile.

  • sudo nano /etc/nginx/sites-available/default
root /usr/share/nginx/www;

ersetzen durch

root /var/www/owncloud;

Einträge ersetzen

Des Weiteren müssen wir noch folgende Zeilen durch die darauf folgenden ersetzen, da nginx nicht mit der .htaccess Datei von Owncloud umgehen kann.

  • sudo nano /etc/nginx/sites-available/default
location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		try_files $uri $uri/ /index.html;
		# Uncomment to enable naxsi on this location
		# include /etc/nginx/naxsi.rules
	}

ersetzen durch

    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;
 
    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 HTTPS on;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

    # 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;
    }

Nginx und PHP restart

Nach diesen Änderungen müssen wir nginx und php5-fpm neustarten.

  • sudo /etc/init.d/nginx restart
  • sudo /etc/init.d/php5-fpm restart

Owncloud runterladen

Jetzt ist es endlich an der Zeit Owncloud herunterzuladen.

Die aktuelle Version findet man unter http://owncloud.org/install/. Dabei ist zu beachten, dass man nicht den Web Installer,

sondern das volle Paket herunterlädt. Anschließend entpacken wir Owncloud und weisen den Dateien die benötigten Rechte zu.

Owncloud Ersteinrichtung

Ruft man nun Owncloud im Browser auf, über http://IP/ (IP durch die IP-Adresse oder DynDNS Domain des Raspberry Pis ersetzen),

sollte man die Installationsoberfläche von Owncloud vorfinden. Dort tragen wir den gewünschten Benutzernamen und Passwort für den ersten Benutzer ein.

An den Datenbankeinstellungen müssen wir keine Einstellungen vornehmen, da wir eine SQLite3 Datenbank einsetzten.

Cronjob anlegen

Angekommen im Webinterface von Owncloud sind wir jedoch nocht nicht fertig. Wir legen nun einen Cronjob an,

der alle 10 Minuten zahlreiche Arbeiten im Hintergrund erledigt, sodass die Benutzung von Owncloud dauerhaft flotter laufen sollte.

  • sudo crontab -u www-data -e

Am Ende der Datei einfügen

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

Cronjob ändern in der Owncloud

Damit die, durch den Cronjob abgenommenen, Arbeiten nicht ebenfalls im Browser ausgeführt werden,

müssen wir über Dein Benutzername > Administrator > Cron die Einstellung von AJAX auf Cron ändern.

Fertig!

Der eigene Owncloud Server ist auf dem Raspberry Pi installiert und sollte eine ausreichende Performance haben.

Möchte man nun Owncloud auch noch über SSL (verschlüsselt) aufrufen, so sind noch folgende Schritte notwendig.

Am Ende der Anleitung wird noch erläutert welche Ports man freigeben muss damit Owncloud auch außerhalb des eigenen Netzwerks verfügbar ist.

SSL-Zertifikat einrichten

Zunächst müssen wir ein SSL-Zertifikat für nginx erstellen, welchem wir die benötigten Rechte zuweisen.

Bei den Fragen in der Eingabeaufforderung geben wir lediglich bei Country Name den Wert DE für Deutschland

und bei Common Name die interne IP-Adresse des Raspberry Pis oder, sofern existent, die DynDNS Domain deines Raspberry Pis für externe Zugriffe an.

Allen weiteren Fragen können wir mittels Enter den Standardwert zuweisen.

Hinweis am Rande: Sowohl der Owncloud Client als auch der Browser wird später meckern, dass das SSL Zertifikats nicht vertrauenswürdig sei,

was daran liegt, dass wir dieses selbst signiert haben. Folglich ist diese Warnung einfach zu ignorieren.

  • sudo openssl req $@ -new -x509 -days 365 -nodes -out /etc/nginx/cert.pem -keyout /etc/nginx/cert.key
  • sudo chmod 600 /etc/nginx/cert.pem
  • sudo chmod 600 /etc/nginx/cert.key

Block 1 durch Block 2 ersetzen

Nun müssen wir in folgender Datei den ersten durch den zweiten Block ersetzen.

Dabei muss im neuen Block 192.168.178.XX durch die IP-Adresse bzw., wenn eingesetzt, die DynDNS Domain des Raspberry Pis ersetzt werden.

  • sudo nano /etc/nginx/sites-available/default
server {
	#listen   80; ## listen for ipv4; this line is default and implied
	#listen   [::]:80 default_server ipv6only=on; ## listen for ipv6
 
	root /var/www/owncloud;
	index index.html index.htm index.php;
 
	# Make site accessible from http://localhost/
	server_name localhost;
 
	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;
 
	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 HTTPS on;
		fastcgi_pass unix:/var/run/php5-fpm.sock;
	}
	
	# 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;
	}
 
	location /doc/ {
		alias /usr/share/doc/;
		autoindex on;
		allow 127.0.0.1;
		allow ::1;
		deny all;
	}
 
	# Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
	#location /RequestDenied {
	#	proxy_pass http://127.0.0.1:8080;    
	#}
 
	#error_page 404 /404.html;
 
	# redirect server error pages to the static page /50x.html
	#
	#error_page 500 502 503 504 /50x.html;
	#location = /50x.html {
	#	root /usr/share/nginx/www;
	#}
 
	# pass the PHP scripts to PHP-FPM server listening on unix socket
	location ~ \.php$ {
	    try_files $uri =404;
	    fastcgi_split_path_info ^(.+\.php)(/.+)$;
	    fastcgi_pass unix:/var/run/php5-fpm.sock;
	    fastcgi_index index.php;
	    include fastcgi_params;
	}
	
	# deny access to .htaccess files
	location ~ /\.ht {
	    deny all;
	}
 
	# deny access to .htaccess files, if Apache's document root
	# concurs with nginx's one
	#
	#location ~ /\.ht {
	#	deny all;
	#}
}

ersetzen durch

server { 
    listen 80; 
    server_name 192.168.178.XX;
    rewrite ^ https://$server_name$request_uri? permanent; # enforce https 
}
 
server {
    listen 443 ssl; 
    server_name 192.168.178.XX;
    ssl_certificate /etc/nginx/cert.pem; 
    ssl_certificate_key /etc/nginx/cert.key; 
 
	root /var/www/owncloud;
	index index.php;
 
	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;
 
	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 / {
		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 HTTPS on;
		fastcgi_pass unix:/var/run/php5-fpm.sock;
	}
	
	location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
		expires 30d;
		# Optional: Don't log access to assets
		access_log off;
	}
 
	location ~ \.php$ {
		try_files $uri =404;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_index index.php;
		include fastcgi_params;
	}
 
	location ~ /\.ht {
		deny all;
	}
}

Neustart von Nginx und PHP

Zuletzt müssen wir noch einmal nginx und php-fpm neustarten.

  • sudo /etc/init.d/nginx restart
  • sudo /etc/init.d/php5-fpm restart

Kalender/Kontakte

Wenn du den Kalender und/oder die Kontakte über Owncloud synchronisieren möchte sind die folgenden URL-Strukturen noch interessant.

Die in eckigen Klammern stehenden Werte müssen einschließlich der Klammern ersetzt werden.

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]


Jetzt ist die Installation endgültig geschafft und Owncloud kann genutzt werden. Bei dem SSL-Zertifikat ist noch zu beachten,

dass dieses nicht signiert ist, wodurch der Browser beim ersten Aufruf von Owncloud meckern wird. Diese Warnung kann jedoch ignoriert werden.

Zugriff von Ausserhalb / Portfreigabe

Soll der soeben installierte Dienst auch außerhalb des eigenen Netzwerkes verfügbar sein, so müssen folgende Ports im Router freigegeben werden.

80

443 (wenn SSL verwendet wird)

Ergänzung

wer kennt das nicht, SD-Karte zu klein, Platz reicht nicht aus..

Dafür gibts die Möglichkeit die Cloud auszulagern. z.B. auf einen USB-Stick oder USB Festplatte

Ich geh mal davon aus das jetzt die Cloud auf der SD-Karte ist und man aber mehr Platz haben will

das ist ganz einfach. USB-Stick anschliessen..(wird automatisch gemountet..) Dann am besten formatieren in ein Linuxformat wie ext2

Ordner anlegen (z.B. Cloud/owncloud)

dann schnell noch die config.php von der owncloud bearbeiten (neuen Pfad angeben)

Data-Verzeichnis in der config.php anpassen (mit neuem Pfad)

sudo nano /var/www/owncloud/config/config.php

Dann verschieben wir die ganze owncloud in das neue Verzeichnis..

alte Daten verschieben

mv /var/www/owncloud/* /media/neuer/Pfad (Beispiel: /media/stick/cloud/owncloud )

dann müssen wir noch im Webserver die default bearbeiten, weil ja auch dort der Pfad nicht mehr stimmt..

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

dort suchen wir ...

root /var/www/owncloud;

und tauschen es aus : wie aus meinem Beispiel

root /media/stick/cloud/owncloud;

so fast geschafft...

jetzt setzen wir die Rechte neu und machen am besten einen Neustart das alles schön frisch hoch fährt

Rechte im neuer Verzeichnis anpassen

chown -R www-data:www-data /media/neuer/Pfad

wenn das gemacht ist..einfach den Raspi neu starten und dann sollte es komplett auf dem USB-Stick oder USB-Festplatte laufen

Viel Spass bei Eurer eigenen Cloud..

Bildschirmfoto 2014-10-21 um 22.50.49.png

Fragen und Antworten Thread</big>



Reiter 16:19, 30. Nov. 2014 (CET)