- Werbung -

Der erste Versuch eine eigene Datencloud aufzusetzen, begann vor drei Jahren mit der Installation von Owncloud auf einem RaspberryPi 1. Soweit lief das alles ganz gut, aber die Perfomance ließ manchmal zu wünschen übrig. Dass dies nicht nur am Raspi lag, sondern auch an dem Programm Owncloud selbst, zeigte sich später bei meinem zweiten Versuch. In einem Blog-Artikel auf Seafile aufmerksam geworden, beschloss ich einen Test damit auf einem weiteren RaspberryPi 1.

Die Installation war ähnlich aufwendig wie die von Owncloud, aber an einem Samstag Nachmittag geschafft. Seit nunmehr knapp zweieinhalb Jahren läuft Seafile jetzt bei mir. Einmal gab es damit ein Problem, als ich unbedacht die NAS runterfuhr, die den Netzwerkspeicher für Seafile zur Verfügung stellte, ohne zuvor den Seafile-Server herunter zu fahren. Das Ergebnis waren beschädigte Dateirepositorys und ich musste alles neu aufsetzen. Dateiverluste gab es dabei keine, weil die Daten jeweils noch in den lokalen Ordnern der Clients lagen. Aus diesem Schaden klug geworden, bekam Seafile eine eigene Festplatte und hängt außerdem an einer USV. Seitdem läuft es rund um die Uhr und stellt sechs private und geschäftlich genutzte Repositorys zur Verfügung, die zwischen einem und fünf Nutzer bedienen. Die Performance ist erheblich besser als die von Owncloud. Und im Gegensatz zum kommerziellen dropbox kann Seafile Ordner an beliebiger Stelle verwalten – man muss diese also nicht erst in einen Sammelordner platzieren.

Zur Ehrenrettung von Owncloud sei noch gesagt, dass es nicht nur Dateisynchronisierung bietet, sondern auch weitere Dienste, wie einen Kalender, eine Kontaktverwaltung oder das gemeinsame Bearbeiten von Rich-Text-Dokumenten (ähnlich Google Drive). Auch ist das Webinterface um einiges besser als das von Seafile. Wer jedoch nur die Dateisynchronisierungsdienste benötigt und eher selten über das Webinterface auf seine Dateien zugreifen möchte, ist meiner Meinung nach mit Seafile besser bedient. Da es Clients für Windows, Linux, Mac OS X, Android und iPhone/iPad gibt, kann man seine Daten praktisch von jedem Gerät aus synchronisieren. Neben der kostenlosen Community-Version, deren Installation ich im Folgenden beschreiben werde, gibt es auch eine kostenlose gehostete Version für bis zu 3 User und eine Bezahlversion.

Funktionsumfang von Seafile

  • Synchronisation von Dateien
  • Teilen von Dateien mit Freunden
  • Dateiversionierung um Änderungen zurückzunehmen
  • Clientseitige Verschlüsselung der Dateien ist möglich
  • Weboberfläche zur Verwaltung von Dateien
  • Messenger und Wiki im Webinterface verfügbar
  • Clients zur Synchronisation für Windows, Mac OS X und Linux
  • Apps für Android und iOS zum Aufruf und Hochladen von Dateien

Vorteile von Seafile

  • Stabile Software
  • Höhere Sicherheit durch clientseitige Verschlüsselung
  • Synchronisation läuft in der Regel auch bei großen und vielen Dateien problemlos
  • Ressourcensparend
  • Einfache und problemlose Updates
  • Synchronisation von Kalender und Kontakten via CalDav und CardDav

Nachteile von Seafile

  • Installation auf dem Raspberry benötigt etwas Vorarbeit
  • Standardkonfiguration verwendet spezielle Ports, die von Routern/Firewalls standardmäßig blockiert werden

Benötigte Hard- und Software

Ich beschreibe die Installation auf einem RaspberryPi, aber natürlich ist auch andere Hardware geeignet, auf der Linux oder Windows läuft. Der Raspi ist aber aufgrund seines günstigen Preises und niedrigen Stromverbrauchs gerade für den privaten Einsatz eine gute Wahl. Mein Seafile (zur Zeit Version 5) läuft problemlos mit einem alten Raspi 1, wer aber einen neuen kauft, sollte zu einem Raspi 3 greifen, da dieser die höchste Rechenleistung bietet und man so auch noch andere Dienste darauf laufen lassen kann. Ob auch ein Raspi Zero W geeignet ist, kann ich nicht sagen. Da dessen Ausstattung aber etwas magerer ist (nur 512 MB RAM) könnte es eng werden.

Hardware

  • 1 Raspberry Pi (Raspi) 1, 2 oder 3
  • 1 Satz Kühlkörper, 3 €
  • 1 SD-Karte 8 GB oder größer
  • 1 SD-Kartenleser
  • 1 USB-Festplatte mit eigener Energieversorgung und USB-Anschlusskabel
  • 1 geeignetes Netzteil (5 V 2,5 A) mit USB-Kabel
  • 1 Netzwerkkabel

Software

Der Zusammenbau des Raspis und die Installation von Raspbian wird in Martinas Artikel ausführlich beschrieben, weshalb ich das hier nicht wiederhole. Im Weiteren gehe ich davon aus, dass der Raspi läuft, via SSH im lokalen Netz erreichbar ist und die USB-Festplatte permanent eingebunden ist.

Seafile installieren

Wir loggen uns zunächst via SSH auf unserem Raspi ein (in der Regel als User Pi) und los geht’s…

Schritt 1: Betriebssystem updaten

Vor der Installation von Seafile auf dem Raspberry Pi bringen wir alle Pakete des Betriebssystems auf den aktuellen Stand. Diesen Schritt sollte man grundsätzlich vor jeder Installation von Software auf dem Raspi durchführen!

Dazu geben wir folgendes im Terminalfenster ein:

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

Das kann, je nach Raspi-Modell, eine Weile dauern.

Schritt 2: Python installieren

Vor der Installation müssen noch einige Pakete für Seafile installiert werden:

sudo apt-get install python2.7 python-setuptools python-simplejson python-imaging python-requests sqlite

Schritt 3: Eigener Seafile-Benutzer

Anschließend legen wir für Seafile einen eigenen Benutzer an. Bei diesem Benutzer deaktivieren wir den SSH-Login.

sudo adduser seafile --disabled-login

Die folgende Abfrage „Enter the new value, or press ENTER for default“ kann mit der Enter-Taste übersprungen werden. Jetzt wechseln wir von unserem aktuellen RaspberryPi-Nutzer auf den eben angelegten User seafile und arbeiten ab jetzt mit diesem weiter:

sudo su – seafile
 

Schritt 4: Seafile herunterladen

Als nächstes laden wir die aktuelle Version des Seafile-Servers für den Raspberry Pi per wget herunter. Die derzeit aktuelle Seafile Serverversion ist die 6.1.2. Das kann sich natürlich schnell ändern, daher sollte man vor dem eigenen Installationsversuch zunächst einen Blick auf die Seafile-Seite werfen und den Download-Link in der folgenden Zeile anpassen.

wget https://github.com/haiwen/seafile-rpi/releases/download/v6.1.2/seafile-s...

Dann entpacken wir Seafile mit

tar -xvf seafile-server_stable_6.1.2_pi.tar.gz

und entfernen zum Abschluss noch das jetzt überflüssige Archiv

rm seafile-server_stable_6.1.2_pi.tar.gz

Schritt 5: Seafile installieren

Als nächstes starten wir die Installation. Dazu wechseln wir in das Seafile-Verzeichnis, das wir zuvor mit dem tar-Befehl erstellt haben:

cd seafile-server-6.1.2

Das man bei neueren Seafile-Versionen in den Befehlszeilen jeweils die Versionsnummer anpassen muss, muss ich nicht noch mal erwähnen oder? Wink

Wir starten die Installation mit folgendem Kommando:

./setup-seafile.sh

Und bestätigen die folgende Abfrage mit Enter. Jetzt sollte uns das Installationsskript nach dem Namen des Seafile-Servers fragen. Dieser kann beliebig gewählt werden, aber man muss die angezeigten erlaubten Zeichen unbedingt beachten!

Danach erfragt das Skript den Domainnamen oder die IP-Adresse des RaspberryPis. Wenn man eine DynDNS-Domain verwenden möchte, so wird sie hier eingetragen - andernfalls die IP-Adresse Raspis. Die Frage zum default port bestätigen wir mit Enter.

Das Installationsskript fragt jetzt nach dem Speicherpfad für die Seafile-Dateien. Hier müssen wir darauf achten, wohin die Daten gespeichert werden sollen. In der Regel wird dies nicht die Micro-SD-Card des Raspis sein, sondern eine externe USB-Festplatte oder ein SSD-Speicher. In unserem Beispiel ist eine Festplatte unter dem Verzeichnis /media gemountet und daher geben wir folgenden Pfad ein

/media/seafile-data

Alle weiteren Fragen bestätigen wir wieder mit Enter. Am Ende der Seafile-Installation bestätigen wir alle Eingaben noch einmal per Enter. Nun wird der Server fertig eingerichtet, was je nach Hardware einige Sekunden dauert.

Schritt 6: Seafile Server starten

Nach erfolgreicher Installation müssen wir noch Seafile (den File-Synchronisationsdienst) und Seahub (das Webinterface) starten. Beim ersten Start von Seahub müssen wir zunächst eine E-Mail-Adresse sowie ein (möglichst sicheres) Passwort für den Administrator-Account  vergeben.

./seafile.sh start
./seahub.sh start 8000

Jetzt können wir die Weboberfläche von Seafile über einen beliebigen Browser im Netzwerk aufrufen:

http://ip-adresse-des-raspi:8000/

bzw.

http://meine.dyndns.domain:8000/
 

Den Wert ip-adresse-des-raspi bzw. meine.dyndns.domain ersetzen wir durch die in Schritt 5 vergebene IP-Adresse oder DynDNS-Domain des Raspis. Beispielsweise http://192.168.1.100:8000/

Die Logindaten, die jetzt abgefragt werden, sind die Admin-Logindaten von oben.

Damit wäre Seafile eigentlich fertig eingerichtet. Jetzt sind wir als Administrator auf dem Seafile-Server angemeldet und können Benutzer, Gruppen und Bibliotheken (so heißen die zu synchronisierenden Ordner) anlegen.

Für die eigentliche Nutzung benötigen wir noch einen Seafile-Client für Windows, Mac, iOS oder Android. Diese finden sich auf der Download-Seite des Herstellers.

Schritt 7: Seafile auf dem Raspberry Pi automatisch starten

Damit Seafile nicht jedes Mal manuell auf dem Raspberry Pi gestartet werden muss, wenn dieser mal heruntergefahren wurde, richten wir noch ein Autostart für Seafile ein.

Dazu loggen wir uns zunächst als User Pi auf unserem Raspi ein und öffnen die Datei rc.local:

sudo nano /etc/rc.local

In rc.local tragen wir am Ende der Datei vor exit 0 folgende Zeile ein

Ohne SSL:

su seafile -c '/home/seafile/seafile-server-6.1.2/seafile.sh start && /home/seafile/seafile-server-6.1.2/seahub.sh start 8000'

Mit SSL (siehe Schritt 10):

su seafile -c '/home/seafile/seafile-server-6.1.2/seafile.sh start && /home/seafile/seafile-server-6.1.2/seahub.sh start-fastcgi'

Mit Strg+X, Y und Enter speichern und schließen wir die Datei. Ab sofort werden bei jedem Raspi-Start sowohl seafile als auch seahub automatisch gestartet.

Seafile auf verschlüsselte SSL-Verbindung umstellen

Unser Seafile-Server ist jetzt voll funktionsfähig, allerdings erfolgt die gesamte Kommunikation noch unverschlüsselt. Das ist kein Problem, wenn Seafile nur innerhalb des eigenen lokalen Netzwerkes verwendet wird. Wer aber über das Internet auf seinen Seafile-Server zugreifen möchte (dazu hat man ja schließlich die DynDNS-Domain Wink ), sollte dies ändern

Schritt 8: Seahub Service-URL ändern

Zunächst ändern wir in der Seahub Konfigurationsdatei ccnet.conf das Protokoll der Variable SERVICE_URL von http auf https und den Port von 8000 auf 8001. (Hinweis: In den nachfolgende Kommandos muss  ip-adresse-des-raspi durch die reale IP-Adresse oder DynDNS Domain des RaspberryPis ersetzt werden):

sudo nano /home/seafile/conf/ccnet.conf

Hier die Zeile

SERVICE_URL = http://ip-adresse-des-raspi:8000

durch folgende Zeile ersetzen

SERVICE_URL = https://ip-adresse-des-raspi:8001

Anschließend wie üblich mit STRG+X, Y und Enter speichern.

Schritt 9: Seahub Server-URL ändern

Zusätzlich müssen wir noch für Seahub die Konfigurationsdatei seahub_settings.py anpassen. Dazu öffnen wir diese mit

sudo nano /home/seafile/conf/seahub_settings.py

tragen folgende Zeile am Ende ein:

HTTP_SERVER_ROOT = 'https://ip-adresse-des-raspi:8001/seafhttp'

Und speichern mit STRG+X, Y und Enter.

Schritt 10: Seahub im FastCGI Modus starten

Jetzt sorgen wir noch dafür, dass Seahub im FastCGI Modus startet. Dazu geben wir folgende Kommandos ein:

/home/seafile/seafile-server-6.1.2/seahub.sh stop

Dies beendet den Seafile-Server

/home/seafile/seafile-server-6.1.2/seahub.sh start-fastcgi

Startet ihn neu im FastCGI-Modus.
 
Wer in Schritt 7 den Eintrag in der rc.local-Datei für „Ohne SSL“ vorgenommen hat, muss diese jetzt noch ändern!

Schritt 11: Installation von Nginx Webserver

Zusätzlich benötigen wir noch den Webserver Nginx. Dieser ist schlanker und performanter als Apache und damit für einen Raspi gut geeignet. Die Installation erfolgt wieder über den Paketmanager im Terminalfenster:

sudo apt-get install nginx

Wer einen älteren Raspi 1 benutzt, muss jetzt noch einige Werte in der Nginx-Konfiguration anpassen, damit der Raspi nicht überlastet wird

sudo sed -i „s/worker_processes 4;/worker_processes 1;/g“ /etc/nginx/nginx.conf
 
sudo sed -i „s/worker_connections 768;/worker_connections 128;/g“ /etc/nginx/nginx.conf

Wer einen Raspi2 oder 3 benutzt kann diese Schritte auslassen.

Jetzt starten wir den Webserver mit

sudo /etc/init.d/nginx start
 

Schritt 12: SSL-Zertifikat erstellen

Als nächstes erstellen wir ein selbst signiertes SSL-Zertifikat.

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

Bei der Ausführung der Befehle werden einige Fragen gestellt. Davon sind nur diese zwei wichtig:

Country Name: DE (oder eben das Land in dem ihr seid)
Common Name: Die verwendete IP-Adresse oder DynDNS Domain unseres Raspis

Alle anderen Felder können wir mit Enter überspringen.

Hinweis: Beim Aufruf wird später der Browser als auch der Seafile Client eine Warnmeldung ausgeben, dass das SSL-Zertifikat nicht vertrauenswürdig ist. Das liegt daran, dass dieses von uns selbst signiert wurde. Diese Warnung kann ignoriert werden. Damit sie nicht jedesmal wiederkommt, sollte jedoch im Browser eine Ausnahmeregel für dieses Zertifikat eingerichtet werden – die meisten Browser bieten das mehr oder weniger offen an.

Außerdem muss im Seafile-Client unter Einstellungen -> Erweitert ein Häkchen bei der Option „Server-Zertifikat bei HTTP-Synchronisation nicht überprüfen“ gesetzt werden, da das Zertifikat sonst nicht akzeptiert wird.

Schritt 13: SSL-Zertifikat durch Webserver bereitstellen

Nun müssen wir noch Nginx so konfigurieren, dass er ebenfalls eine SSL-Verbindung anbietet. Dazu legen wir eine neue Konfigurationsdatei mit folgendem Inhalt an. In der Zeile mit meine.dyndns.domain wird wieder die IP-Adresse oder DynDNS-Domain unseres Raspi eingetragen.

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

Anschließend tragen wir die folgenden Zeilen in die Datei ein:

server {
  listen 8001;
  ssl on;
  ssl_certificate /etc/nginx/ssl/seahub.crt;
  ssl_certificate_key /etc/nginx/ssl/seahub.key;
  server_name meine.dyndns.domain;
  error_page 497 https://$host:$server_port$request_uri;
 
  client_max_body_size 10G; # set max upload size
  location / {
        fastcgi_pass 127.0.0.1:8000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_param SERVER_ADDR $server_addr;
        fastcgi_param SERVER_PORT $server_port;
        fastcgi_param SERVER_NAME $server_name;
        fastcgi_param HTTPS on;
        fastcgi_param HTTP_SCHEME https;
        access_log /var/log/nginx/seahub.access.log;
        error_log /var/log/nginx/seahub.error.log;
  }
  location /seafhttp {
        rewrite ^/seafhttp(.*)$ $1 break;
        proxy_pass http://127.0.0.1:8082;
        proxy_read_timeout 300;
        client_max_body_size 0;
  }
}

Und speichern wie üblich mit STRG+X, Y und Enter.

Schritt 14: Konfigurationsdatei aktivieren

Für die Aktivierung der Konfigurationsdatei brauchen wir noch eine Verknüpfung, die wir mit folgendem Befehl erstellen

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

Schritt 15: Nginx neustarten

Abschließend starten wir nginx einmal neu, damit die Änderungen wirksam werden:

sudo /etc/init.d/nginx restart

Jetzt erfolgt die Kommunikation mit Seafile verschlüsselt mit dem selbst signierte SSL-Zertifikat.

Schritt 16: Portfreigaben im Router einrichten

Wie schon erwähnt benutzt Seafile einige Ports, die von Routern standardmäßig nicht weitergeleitet werden. Um die Seafile-Dienst auch außerhalb des heimischen Netzwerkes nutzen zu können, müssen daher folgende Ports im Router freigeben werden (Stichwort Portforwarding):

8000 (nur wenn kein SSL verwendet wird)
8001 (nur wenn SSL eingerichtet wurde)
8082
10001
12001

Wie das gemacht wird ist von Router zu Router verschieden, daher bitte in der Bedienungsanleitung des jeweiligen Routers nachlesen.

Wenn alles richtig gemacht wurde, haben wir jetzt einen eigenen Dateisynchronisierungsdienst, der außerordentlich perfomant ist, verschlüsselte Verbindungen bietet und sicherstellt, dass unsere Daten auch uns gehören.

Links

Seafile: https://www.seafile.com/en/download/

DynDNS-Domains: http://selfhost.eu/cgi-bin/selfhost

Owncloud: https://owncloud.org/