Raspberry Pi: Seafile installieren und einrichten
Welche Clouddienste nutzt ihr? Dropbox? Oder setzt ihr auf ein privates NAS? Die Zahl der Nutzer von Clouddiensten steigt aber auch die Skepsis gegenüber den Anbietern und dem Umgang mit den Daten. Gerade Nutzer die größere Datenmengen speichern, lohnt sich die Überlegung einen kleinen Cloudspeicher selbst aufzubauen. Ein Raspberry Pi, eine externe Festplatte und das kostenlose Seafile genügen um eine Alternative zu Dropbox zu bauen.
Für das Installieren und Einrichten von Seafile auf einem Raspberry Pi muss man kein Computerprofi sein, sondern nur ein bisschen neugierig. Leser, die in Seafile nicht die richtige Lösung sehen, sollten einen Blick in den Vergleich zwischen BitTorrent Sync, Seafile und ownCloud werfen. Es sind zahlreiche Lösungen auf dem Markt vorhanden, die aus dem Raspberry Pi einen Cloudserver machen.
Raspberry Pi: Seafile installieren und einrichten
Durch die Entwicklung in C und Python läuft Seafile sehr flüssig auf dem Raspberry Pi. Zur Installation von Seafile auf dem Raspberry Pi müssen Nutzer einige Kommandos über den Terminal eingeben. Diese Anleitung erklärt dabei ausführlich alle notwendigen Schritte, so dass nach moderatem Aufwand ein eigener Server zur Verfügung steht.
Diese Anleitung zur Installation von Seafile auf dem Raspberry Pi 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 Seafile 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: Python installieren
Vor der Installation werden einige Pakete für Seafile auf dem Raspberry Pi über den Paketmanager APT installiert.
sudo apt-get install python2.7 python-setuptools python-simplejson python-imaging sqlite
Schritt 3: Seafile Benutzer
Anschließend wird ein extra seafile Benutzer angelegt und auf diesen gewechselt. Bei diesem Benutzer wird der Login deaktiviert, da die Arbeiten mit diesem nicht über SSH sondern nur via su erledigt werden.
sudo adduser seafile --disabled-login
Die Abfrage Enter the new value, or press ENTER for default kann einfach per Enter-Taste übersprungen werden. Der nachfolgende Befehl wechselt von eurem aktuellen RaspberryPi Nutzer auf den eben angelegten User seafile im Terminal:
sudo su - seafile
Schritt 4: Download Seafile
Jetzt wird die aktuelle Version des Seafile-Servers für den Raspberry Pi via wget heruntergeladen. Die neuste Version findet sich über die Downloadseite von Seafile. Zur Zeit ist das die Version 5.1.3. Vor dem Download schaut bitte hier nach der neusten Server-Version für den Raspberry Pi. Die nachfolgenden Kommandos laden Seafile herunter, entpacken das Archiv und löschen anschließend die Download-Datei.
wget https://github.com/haiwen/seafile-rpi/releases/download/v5.1.3/seafile-server_stable_5.1.3_pi.tar.gz tar -xvf seafile-server_stable_5.1.3_pi.tar.gz rm seafile-server_stable_5.1.3_pi.tar.gz
Schritt 5: Seafile Installation
Jetzt wird Seafile auf dem Raspberry Pi installiert. Dazu wird erst in das Verzeichnis von Seafile gewechselt:
cd seafile-server-5.1.3
Dort wird die Installation mit folgendem Kommando gestartet:
./setup-seafile.sh
Anschließend ist ein Check mittels Enter zu bestätigen. Wenn alles passt, fragt der Installationsvorgang nach dem Namen des Servers. Dieser kann beliebig gewählt werden. Beachtet dabei die angezeigten erlaubten Zeichen.
Danach erfragt die Installation von Seafile nach der Domain oder IP-Adresse des Raspberry Pis. Falls ihr eine DynDNS Domain verwenden möchtet, ist diese hier einzutragen. Wenn euch das nichts sagt, tragt hier die IP-Adresse der Raspberry Pis ein. Die Frage zum default port kann via Enter übersprungen werden. Eine ausführliche Benutzeranleitung zum Seafile-Server findet sich hier.
Wer Großes vor hat aber nur eine kleine mircoSD-Karte verwendet, muss die Daten auf eine externe USB-Festplatte oder USB-Stick speichern. Wie man auf dem Raspberry Pi USB-Sticks oder USB-Festplatten einbinden kann, beschreibt die Schritt für Schritt Anleitung. Dabei ist zu beachten, dass das USB-Speichermedium unter dem Benutzer seafile, den wir oben angelegt haben, eingebunden ist.
Die Installation fragt nach dem Speicherpfad für die Seafile-Dateien. Hier also darauf achten, wohin die Daten gespeichert werden sollen. Ihr müsst hier den Pfad beispielsweise zur USB-Festplatte angeben. Es empfiehlt sich am Ende des Ordnernamens ein /seafile-data anzuhängen. Alle weiteren Fragen können via Enter übergangen werden. Am Ende der Seafile-Installation sind alle Eingaben noch einmal per Enter zu bestätigen. Anschließend wird der Server eingerichtet, was einige Sekunden in Anspruch nimmt.
Schritt 6: Seafile Server starten
Nach erfolgreicher Installation sind Seafile (File-Synchronisation-Service) und Seahub (Webinterface) zu starten. Beim Start von Seahub sind eine E-Mail-Adresse sowie Passwort für den Administrator-Account zu vergeben.
./seafile.sh start ./seahub.sh start 8000
Das Weboberfläche von Seafile lässt sich jetzt wie folgt über einen beliebigen Browser im Netzwerk aufrufen:
http://IP:8000/
Der Wert IP ist durch die in Schritt 5 vergebene IP-Adresse oder DynDNS Domain des Raspberry Pis zu ersetzen. Beispielsweise http://192.168.0.12:8000/
Die Logindaten sind die Admin-Logindaten aus Schritt 5. Wer SSL verwendet, benötigt folgende Adresse. Zu SSL findet sich weiter unten mehr.
https://IP:8001/
Jetzt seid ihr als Administrator auf dem Seafile-Server angemeldet und könnt Benutzer, Gruppen und Bibliotheken (zu synchronisierende Ordner) anlegen.
Für die eigentliche Nutzung wird vom Anwender der Seafile-Client für Windows, Mac, iOS oder Android benötigt. Diese lassen sich über die Seafile Webseite herunterladen.
Sofern SSL verwendet wird, muss das im Client unter Einstellungen -> Erweitert eingetragen werden. Hier ist die Option Das Server-Zertifikat bei der HTTP-Synchronisation nicht überprüfen zu aktivieren, da das Zertifikat selbst signiert ist und sonst nicht akzeptiert wird.
Schritt 7: Seafile Autostart auf dem Raspberry Pi
Damit Seafile nicht jedesmal manuell auf dem Raspberry Pi gestartet werden muss, wird ein Autostart für Seafile auf dem Raspberry Pi eingerichtet. Dazu ist über den Terminal die Datei rc.local zu öffnen:
sudo nano /etc/rc.local
In rc.local wird eine Zeile am Ende der Datei, aber vor exit 0, eingefügt. Dadurch startet beim Booten des Raspberry Pis Seafile und Seahub gleich mit. Ersetzt das 5.1.3 durch eure Version im Ordner.
Ohne SSL:
su seafile -c '/home/seafile/seafile-server-5.1.3/seafile.sh start && /home/seafile/seafile-server-5.1.3/seahub.sh start 8000'
Mit SSL (siehe Schritt 10):
su seafile -c '/home/seafile/seafile-server-5.1.3/seafile.sh start && /home/seafile/seafile-server-5.1.3/seahub.sh start-fastcgi'
Mit Strg + X, Y und Enter speichern und schließen. Fertig. Die Dateien werden nun mittels Seafile mit dem Raspberry Pi als Server synchronisiert. Zusätzliche Client-Systeme kann jeder beliebige Computer, Tablet oder Smartphone sein.
Seafile auf verschlüsselte SSL-Verbindung umstellen
Nachfolgende Schritte sind optional und nicht zwingend notwendig. Wird Seafile beispielsweise nur in den eigenen vier Wänden im privaten Netzwerk eingesetzt, kann auf eine verschlüsselte Übertragung der Dateien verzichtet werden. Wer Seafile auch außerhalb der Wohnung einsetzt, sollte den Mehraufwand in Kauf nehmen und SSL für eine verschlüsselte Übertragung der Daten einrichten. Eine DynDNS Domain ist hierfür empfehlenswert.
Schritt 8: Seahub Service URL ändern
Dafür ist in Seahub die Konfigurationsdatei ccnet.conf abzuändern. Das Protokoll der Variable SERVICE_URL wird von http auf https und den Port von 8000 auf 8001 geändert.
Beachtet: In den nachfolgende Kommandos ist IP durch die IP-Adresse oder DynDNS Domain eures Raspberry Pis zu ersetzen.
nano /home/seafile/ccnet/ccnet.conf
Die Zeile
SERVICE_URL = http://IP:8000
durch folgende Zeile ersetzen
SERVICE_URL = https://IP:8001
Gespeichert wird mittels STRG + X, Y und anschließend Enter.
Schritt 9: Seahub HTTP Server URL anpassen
Zusätzlich ist für Seahub die Konfigurationsdatei seahub_settings.py anzupassen. Diese wird um eine Zeile erweitert. Mit folgenden Kommando über den Terminal wird die Konfigurationsdatei geöffnet:
nano /home/seafile/seahub_settings.py
Dort ist folgende Zeile einzutragen. Das IP ist durch eure persönliche IP-Adresse oder DynDNS Domain zu ersetzen.
HTTP_SERVER_ROOT = 'https://IP:8001/seafhttp'
Schritt 10: Seahub im FastCGI Modus starten
Jetzt Seahub im FastCGI Modus starten. Das wird mit folgenden Kommandos erreicht:
/home/seafile/seafile-server-5.1.3/seahub.sh stop /home/seafile/seafile-server-5.1.3/seahub.sh start-fastcgi
Zukünftig ist Seahub immer mit dem folgendem Kommando zu starten. Unter Schritt 7, für den Autostart für Seafile unter SSL, wurde das schon berücksichtigt.
/home/seafile/seafile–server–5.1.3/seahub.sh start–fastcgi
Schritt 11: Installation von Nginx Webserver
Zusätzlich wird der Webserver Nginx benötigt. Die Installation erfolgt wieder über den Paketmanager APT mit folgendem Kommando über den Terminal:
sudo apt-get install nginx
Danach sind einige Werte bezüglich der maximalen Prozesse anzupassen, damit Nginx den Raspberry Pi nicht überlastet.
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
Jetzt muss der Webserver gestartet werden:
sudo /etc/init.d/nginx start
Schritt 12: SSL-Zertifikat erstellen
Für die weitere Bearbeitung wird ein selbst signiertes SSL-Zertifikat erstellt. Bei der Ausführung der Befehle werden einige Fragen gestellt. Davon sind nur folgende wichtig:
- Country Name: DE (oder eben das Land in dem ihr seid)
- Common Name: Die verwendete IP-Adresse oder DynDNS Domain
Alle anderen Felder können mittels Enter übersprungen werden.
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
Hinweis: Beim Aufruf wird später der Browser als auch der Seafile Client feststellen, dass das SSL-Zertifikat nicht vertrauenswürdig ist. Das liegt daran, dass dieses von uns selbst signiert wurde. Diese Warnung ist einfach zu ignorieren.
Schritt 13: SSL-Zertifikat via Webserver bereitstellen
Dazu ist ein nginxSite config file mit folgendem Inhalt anzulegen. Lest euch die nachfolgenden Informationen genau durch. Die Zeile mit my-seahub-domain.tld ist durch die verwendete IP-Adresse oder DynDNS Domain zu ersetzen.
sudo nano /etc/nginx/sites-available/seahub
Anschließend sind folgende Zeilen in die Datei einzutragen und entsprechend eurer IP-Adresse oder DynDNS Domain abzuändern:
server { listen 8001; ssl on; ssl_certificate /etc/nginx/ssl/seahub.crt; ssl_certificate_key /etc/nginx/ssl/seahub.key; server_name my-seahub-domain.tld; error_page 497 https://$host:$server_port$request_uri;client_max_body_size 10G; # set max upload sizelocation / { 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; client_max_body_size 0; } }
Gespeichert wird mittels STRG + X, Y und anschließend Enter.
Schritt 14: Konfigurationsdatei aktivieren
Für die Aktivierung der Konfigurationsdatei wird eine Verknüpfung mit folgendem Befehl über den Terminal erstellt:
sudo ln -s /etc/nginx/sites-available/seahub /etc/nginx/sites-enabled/seahub
Schritt 15: Nginx neustarten
Abschließend erfolgt ein Neustart von nginx, damit die Änderungen wirksam werden:
sudo /etc/init.d/nginx restart
Jetzt erfolgt die Kommunikation über Seafile verschlüsselt via selbst signiertem SSL-Zertifikat.
Tipps zu Seafile
Seafile ist zu Beginn nicht ganz intuitiv. Wer sich einige Minuten Zeit nimmt, arbeitet sich schnell in die Logik der kostenlosen Anwendung ein. Folgende Tipps zu Seafile helfen für einen reibungslosen Start.
Verschlüsselte Ordner unter Seafile anlegen
Mit einem Klick auf Neue Bibliothek wird ein neuer Ordner für die Synchronisation angelegt. Der Name ist beliebig wählbar, die Beschreibung ebenfalls. Soll der Ordner und die Dateien vor der Synchronisation mit dem Raspberry Pi verschlüsselt werden, ist ein Haken bei Verschlüsselung zu setzen sowie ein Passwort zu wählen. Das Passwort lässt sich nachträglich nicht ändern. Zur Sicherheit empfiehlt sich ein langes Passwort mit mehr als 10 Zeichen.
Seafile Ordner verwalten
Fährt der Administrator mit der Maus über eine angelegte Bibliothek, erscheinen zwei Symbole. Das rechte Symbol löscht die Bibliothek in Seafile, das linke Symbol ermöglicht ein Teilen mit Benutzern und Gruppen.
Mit den Zugangsdaten aus der Weboberfläche könnt ihr euch als über einen Seafile-Client anmelden. Dort sind die angelegten Bibliotheken ersichtlich und lassen sich synchronisieren.
Portfreigabe im Router
Anwender die Seafile wie ein richtigen Cloud-Dienst auch außerhalb des heimischen Netzwerkes nutzen möchten, müssen folgende Ports im Router freigeben. Je nach Router ist die Vorgehensweise etwas anders:
- 8000 (nur ohne SSL)
- 8001 (nur mit SSL)
- 8082
- 10001
- 12001
Persönliche Meinung
Die Installation von Seafile auf dem Raspberry Pi ist nicht kompliziert. Aufwendig ist dafür die Einrichtung des verschlüsselten Verbindung via selbst signiertem SSL-Zertifikat. Die Mühe lohnt sich, dann jetzt läuft auf dem Raspberry Pi ein eigener Cloud-Server, der die Dateien verschlüsselt überall hin überträgt. Ganz unabhängig von Dropbox oder Google Drive.
Etwas einfacher ist die Installation von BitTorrent Sync auf dem Raspberry Pi. Dafür sind einige Funktionen nur in der kostenpflichtigen Pro-Version erhältlich. Es empfiehlt sich auf jeden Fall beide Anwendungen gegenüber zu stellen und genau zu vergleichen, welche Leistungen eigentlich benötigt werden.
Geek, Blogger, Consultant & Reisender. Auf seiner Detail-Seite findest du weitere Informationen über Benjamin. In seiner Freizeit schreibt Benjamin bevorzugt über Technik-Themen. Neben Anleitungen und How-To’s interessieren Benjamin auch Nachrichten zur IT-Sicherheit. Sollte die Technik nicht im Vordergrund stehen, geht Benjamin gerne wandern.
Hi, ich kann mit deiner anleitung leider keine Datein vom CLient übertragen. Es kommt immer Fehler beim Hochladen der Datei: Connection closed
Ordner kann ich ganz normal anlegen.
Gruß
Mark
Hallo Mark,
hast du eine SSL-Verschlüsselung eingerichtet?
Grüße Benjamin
Ja das habe ich
Hast du mal diese mal deaktiviert und dann getestet?
Ist dein Client auch auf SSL eingestellt?
Grüße Benajmin
Hi gute Anleitung aber leider bekomme ich beim restart des nginx Webservers eine Fehlermeldung.
In der nginx error.log datei steht:
„fastcgi_pass“ directive is not allowed here in /etc/nginx/sites-enabled/seahub:8 //steht 15 mal drin
„location“ directive is not allowed here in /etc/nginx/sites-enabled/seahub:24 //steht 1 mal drin
Dachte erst das er keine Zugriffsrechte drauf hat aber die stehen auf rwx. Vielleicht hast du eine Idee.
Gruß
Oliver
Hi Oliver,
ich habe exakt die gleiche Fehlermeldung („fastcgi_pass“ directive is not allowed here in /etc/nginx/sites-enabled/seahub:8)… schon gegoogelt aber werde nicht schlau.
Hast du mittlerweile eine Lösung?
Danke & Gruß
Marcus
Hallo Marcus,
ja ich habe das Problem mithilfe des manuals von Seafile lösen können. Ich habe meinem nginx Webserver danach konfiguriert:
http://manual.seafile.com/deploy/https_with_nginx.html
Gruß Oliver
Hi Oliver,
danke für die Antwort!! Na klar, manchmal kann die Lösung ganz einfach sein. Hört sich vielleicht blöd an – aber auf die Idee, einfach das offizielle Manual zu nehmen bin ich nicht gekommen.
Jetzt läuft alles – sauber & danke!
Hallo.
Was war genau die Ursache und was hast Du gemacht?
Ich bin auch das Manual durchgegangen. Ohne Erfolg.
Gruß
Uli
Hallo Ulrich,
die genaue Ursache weiß ich leider nicht mehr (ist ja schon sehr lange her).
Hast du die Pakete komplett entfernt (apt-get purge), und danach frisch das offizielle Manual durchgearbeitet?
Bei mir hat genau das geholfen; also komplett entfernen und frisch beginnen laut Manual.
Viel Erfolg,
Marcus
Pingback: Raspberry Pi 3: Von USB-Sticks und SSD-Festplatten booten – random brick [DE]
Pingback: Raspberry Pi: Owncloud Server installieren und einrichten – random brick [DE]
Hallo Benjamin,
danke für die ausführliche Anleitung! Ich hatte das gleiche Problem wie Oliver. Die Ursache dafür ist, dass in deiner Konfiguration in Schritt 13 zwei Zeilenumbrüche fehlen (vor „client_max_body_size“ und vor „location“):
error_page 497 https://$host:$server_port$request_uri;client_max_body_size 10G; # set max upload sizelocation / {
Grüße
Max
Hallo,
erst einmal vielen Dank für die ausführlichen Anleitungen! Ich tendiere zurzeit zu einem Raspberry Pi3b mit Seafile.
Eine Frage stellt sich mir jedoch noch: Können auf einen Rasp. mit Seafile 2 Nutzer gleichzeitig zugreifen? Ich möchte gerne einen Cloud-Server für mich und meinen Mitbewohner einrichten, so dass jeder von uns seine Daten in getrennten Verzeichnissen speichern kann und weiß aber nicht, ob das zu Problemen führen würde.
Grüße
(ein anderer) Max
Hallo Max,
das geht problemlos. Nur musst du dran denken, dass die maximale Datenübertragung durch die USB Datenübertragung des Raspberry Pi 3 limitiert ist.
Viele Grüße
Benjamin
Die Ursache für diesen Fehler ist, dass in der /etc/nginx/sites-available/seahub datei ein paar Zeilen verrückt sind. Richtig muss sie lauten:
server {
listen 8001;
ssl on;
ssl_certificate /etc/nginx/ssl/seahub.crt;
ssl_certificate_key /etc/nginx/ssl/seahub.key;
server_name my-seahub-domain.tld;
error_page 497 https://$host:$server_port$request_uri;
client_max_body_size 10G;
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;
client_max_body_size 0;
}
}
Dann geht es.