In den ersten beiden Teilen der Artikelserie „Private Cloud mit Seafile und Radicale auf einem Raspberry Pi“ hatte ich mich mit der Einrichtung des Raspberry Pi und dem Aufsetzen des Caldav- und Carddav-Servers Radicale befasst. In diesem Teil soll es nun um die Einrichtung von Seafile als Cloud-Laufwerk gehen. Grundvoraussetzung ist ein Webserver, dessen Einrichtung ich bereits in Teil 2 beschrieben habe. Zur Absicherung der Kommunikation mit Seafile ist die Benutzung eines SSL-Zertifikats empfehlenswert. Auch dies wurde im zweiten Teil gezeigt. Zur weiteren Einrichtung von Seafile sind folgende größeren Schritte notwendig:
Schritt 1: Seafile installieren
Schritt 1a: Benutzer „seafile“ anlegen
Bevor man mit allem loslegt, müssen noch einige Pakete installiert werden:
sudo apt-get install python2.7 python-setuptools python-imaging python-urllib3 sqlite3
Dann legt man einen neuen Benutzer „seafile“ an. Den Login für diesen kann man deaktivieren, da man sich nicht per SSH mit diesem Benutzernamen einloggen muss. Die darauffolgenden Fragen kann man mit Enter alle bestätigen. Mit dem Befehl su wechselt man in diesen Benutzer:
sudo adduser seafile --disabled-login sudo su seafile
Schritt 1b: Seafile herunterladen und entpacken
Im nächsten Schritt wechselt man in das Home-Verzeichnis des Benutzers seafile und lädt Seafile von der Downloadseite herunter (auf die Raspberry-Pi-Variante achten!!!). Das Tar-Archiv kann dann an Ort und Stelle entpackt werden. Nachdem es entpackt wurde, kann dass Archiv gelöscht werden:
cd /home/seafile wget https://github.com/haiwen/seafile-rpi/releases/download/v6.2.3/seafile-server_6.2.3_stable_pi.tar.gz tar -xvf seafile-server_6.2.3_stable_pi.tar.gz rm seafile-server_6.2.3_stable_pi.tar.gz
Schritt 1c: Seafile installieren
Nun wechselt man in das entpackte Verzeichnis und startet das Installations-Skript.
cd seafile-server-6.2.3 ./setup-seafile.sh
Es folgen einige Fragen, die man folgend beantwortet:
- server name: hier kann ein beliebiger Name stehen
- server’s ip or domain: hier nimmt man die DynDNS-Adresse bzw. die Domain, die auf den Server zeigen soll (in meinen bisherigen Beispielen war dies cloud.hotzpotz.de)
- Speicherort seafile data: Alle Dateien, die in der Cloud landen werden, sollen auf dem PiDrive gespeichert werden. Daher nimmt man folgenden Pfad: /mnt/data/seafile-data
- TCP-Port seafile fileserver: mit Enter kann man den vorgeschlagenen default-Port 8082 einfach übernehmen
Zum testen, ob alles ordnungsgemäß funktioniert kann man nun den Seafile-Dienst und das Webinterface (Seahub) starten. Beim Start von Seahub muss man ein Administrator-Konto anlegen, indem man eine E-Mail-Adresse und ein Passwort vergeben muss.
./seafile.sh start ./seahub.sh start
Nachdem beides gestartet wurde, kann man über die lokale IP-Adresse des RaspPi im Netzwerk mit dem Port 8000 das Webinterface in einem Browser starten (z.B. http://192.168.178.100:8000) und sich mit dem eben angelegten Administrator-Konto anmelden.
Schritt 2: Seahub mit Nginx und SSL konfigurieren
Um Seafile auch von außerhalb des Netzwerkes (sicher) erreichbar zu machen, muss Nginx eine neue Konfiguration hinzugefügt und Seafile nachkonfiguriert werden.
Schritt 2a: Seafile-Konfiguration anpassen
Da man noch als Benutzer „seafile“ angemeldet ist, macht es Sinn, gleich noch Änderungen für die spätere Benutzung mit Nginx und SSL vorzunehmen. Dafür stoppt man zunächst den Seafile-Server und Seahub:
./seahub.sh stop ./seafile.sh stop
Dann ändert man in der Datei ccnet.conf die Variable SERVICE_URL, welche ja nun ein https beinhalten muss:
nano /home/seafile/conf/ccnet.conf SERVICE_URL = https://cloud.hotzpotz.de:8000
Mit Strg+X, Y und Enter wird die Datei gespeichert. Weiterhin muss man in der Datei seahub_settings.py eine Zeile hinzufügen (dabei die eigene Domain mit https angeben):
nano /home/seafile/conf/seahub_settings.py FILE_SERVER_ROOT = 'https://cloud.hotzpotz.de/seafhttp'
Wieder wird die Datei mit Strg+X, Y und Enter gespeichert. Nun muss noch in der Konfiguration des Seafile Fileservers im Abschnitt [fileserver] eine Zeile hinzugefügt werden:
nano /home/seafile/conf/seafile.conf [fileserver] host = 127.0.0.1
Mit Strg+X, Y und Enter wird die Datei gespeichert. Damit sind die Änderungen an der Seafile-Konfiguration abgeschlossen und man kann den Seafile-Server und Seahub wieder starten:
./seafile.sh start ./seahub.sh start
Nun kann man sich als Nutzer „seafile“ mit dem Befehl exit abmelden, denn alle folgenden Eingaben muss man wieder als Standard-Nutzer vornehmen.
Schritt 2b: Nginx neue Konfiguration hinzufügen
Zur besseren Absicherung der SSL-Verbindung kann man einen Schlüssel für das Diffie-Hellman-Protokoll erzeugen. Das dauert einige Zeit. Ist er erzeugt, verschiebt man diesen in das Nginx-Verzeichnis:
openssl dhparam 2048 sudo mv /home/hotzenplotz/dhparam.pem /etc/nginx/dhparam.pem
Danach erstellt man eine neue Konfigurationsdatei:
sudo nano /etc/nginx/sites-available/seahub
welche folgenden Inhalt hat:
server { listen 80; server_name cloud.hotzpotz.de; rewrite ^ https://$http_host$request_uri? permanent; # force redirect http to https server_tokens off; } server { listen 443; ssl on; ssl_certificate /etc/letsencrypt/live/cloud.hotzpotz.de/fullchain.pem; # path to your cacert.pem ssl_certificate_key /etc/letsencrypt/live/cloud.hotzpotz.de/privkey.pem; # path to your privkey.pem server_name cloud.hotzpotz.de; ssl_session_timeout 5m; ssl_session_cache shared:SSL:5m; # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits ssl_dhparam /etc/nginx/dhparam.pem; # secure settings (A+ at SSL Labs ssltest at time of writing) # see https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS'; ssl_prefer_server_ciphers on; proxy_set_header X-Forwarded-For $remote_addr; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; server_tokens off; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Forwarded-Proto https; access_log /var/log/nginx/seahub.access.log; error_log /var/log/nginx/seahub.error.log; proxy_read_timeout 1200s; client_max_body_size 0; } location /seafhttp { rewrite ^/seafhttp(.*)$ $1 break; proxy_pass http://127.0.0.1:8082; client_max_body_size 0; proxy_connect_timeout 36000s; proxy_read_timeout 36000s; proxy_send_timeout 36000s; send_timeout 36000s; } }
Mit Strg+X, Y und Enter wird diese Konfigurationsdatei gespeichert. Sie muss noch aktiviert werden, sodass danach der Nginx-Server neu gestartet werden kann:
sudo ln -s /etc/nginx/sites-available/seahub /etc/nginx/sites-enabled/seahub sudo /etc/init.d/nginx restart
Seafile müsste nun über das Webinterface in einem Browser über eine SSL-geschützte Verbindung aufrufbar sein (in meinem Beispiel wäre dies dann https://cloud.hotzpotz.de)
Schritt 3: Seafile als Dienst einrichten
Damit bei einem Neustart des RasPi Seafile nicht immer manuell gestartet werden muss, kann man es als Dienst einrichten, sodass es automatisch mit gestartet wird. Dafür erstellt man einen systemd-Dienst für den Seafile-Server:
sudo nano /etc/systemd/system/seafile.service
mit folgendem Inhalt:
[Unit] Description=Seafile After=network.target postgresql.service [Service] Type=oneshot ExecStart=/home/seafile/seafile-server-latest/seafile.sh start ExecStop=/home/seafile/seafile-server-latest/seafile.sh stop RemainAfterExit=yes User=seafile Group=seafile [Install] WantedBy=multi-user.target
Mit Strg+X, Y und Enter wird die Datei gespeichert. Dann erstellt man einen weiteren Dienst für Seahub:
sudo nano /etc/systemd/system/seahub.service
mit folgendem Inhalt:
[Unit] Description=Seafile hub After=network.target seafile.service [Service] Environment="LC_ALL=C" ExecStart=/home/seafile/seafile-server-latest/seahub.sh start ExecStop=/home/seafile/seafile-server-latest/seahub.sh stop User=seafile Group=seafile Type=oneshot RemainAfterExit=yes [Install] WantedBy=multi-user.target
Auch hier wird die Datei mit Strg+X, Y und Enter gespeichert. Nun müssen die beiden Dienste noch aktiviert werden:
sudo systemctl enable seafile.service sudo systemctl enable seahub.service
Und damit wäre die Einrichtung von Seafile abgeschlossen. Happy synchronizing!
Hab dafür Syncthing auf dem Pi laufen, als always on Gerät.
Ist nicht ganz das selbe Anwendungsgebiet, sondern eher P2P Abgleich zwischen gleichwertigen Geräten ohne zentralen Server.
Dafür wär das imo um einiges Massentauglicher einzurichten.
Bei diesen Zeilen verzweifele ich (als ungeübter Linux-User):
„openssl dhparam 2048“
„sudo mv /home/hotzenplotz/dhparam.pem /etc/nginx/dhparam.pem“
Beim zweiten Befehl kann die Datei „dhparam.pem“ nicht gefunden werden.
Ich habe daher die Datei mit diesem Befehl angelegt: „openssl dhparam -out /etc/nginx/dhparam.pem 2048“ und mir den mv-Befehl erspart.
Nachtrag:
Natürlich muss noch ein „sudo“ vor die Zeile „openssl dhparam -out /etc/nginx/dhparam.pem 2048“.
In dieser Zeile steckt außerdem auch noch ein Fehler:
ssl_ciphers ‚ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDS$
Ist das Dollar-Zeichen durch copy-and-paste aus dem nano-Editor da rein gekommen? Die Zeile ist außerdem nicht mit einem Semikolon abgeschlossen.
Da hast du vollkommen Recht. Da muss etwas beim Kopieren gründlich schief gegangen sein. Die Zeile ist abgeschnitten worden. Ich habe sie jetzt vollständig eingefügt. Danke für den Hinweis!
Kann es sein, dass du dabei noch als Benutzer „seafile“ angemeldet warst (s. Schritt 1a). Am Ende von Schritt 2b müsstest du dich eigentlich wieder abmelden. Wenn du das nicht gemacht hast, legt er das Zertifikat natürlich im home-Verzeichnis vom Benutzer „seafile“ ab und kann es somit auch nicht im home-Verzeichnis von hotzenplotz finden.
Kann ich jetzt gerade nicht mehr nachvollziehen. Ich meine ich habe sowohl im Home-Ordner von ’seafile‘, als auch von ‚pi‘ nachgesehen.
Ich denke wenn du die Befehlszeile einfach in „sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048“ abänderst wäre gut. Ist ein Befehl weniger und funktioniert auf jeden Fall.
Ansonsten möchte ich hier auch gerne noch mitteilen, dass ich deine Anleitung super finde. Für meine Bedürfnisse (Raspi, Seafile, SSL) und meine Kenntnisse (Linux-Newbie) genau richtig. Danke dafür!
Nach einem Update auf die aktuelle Seafile-Version (6.2.3 auf 6.3.2) erhalte ich folgende Fehlermeldung beim Login:
Verboten (403)
CSRF-Verifizierung fehlgeschlagen. Anfrage abgebrochen.
Woran kann das liegen? Wie kann ich das beheben?
Danke im Voraus!
Ich bin bei mir noch nicht dazu gekommen, dieses Update durchzuführen, aber der Fehler deutet auf ein Berechtigungsproblem hin.
Um den Fehler mit der CSRF-Verifizierung nach Aktualisierung auf Seafile 6.3.x zu beheben, muss in der Konfigurationsdatei /etc/nginx/sites-available/seahub der Eintrag „proxy_set_header Host $host:$server_port;“ (der unter „location / {“ folgt) in „proxy_set_header Host $host;“ (also ohne das „:$server_port“) geändert werden.
Siehe: https://forum.seafile.com/t/solved-403-forbidden-after-upgrade-to-6-3-1/6525
kann mir denn jemand sagen, wie ich mit dem MariaDB-Problem unter dem neuesten Stretch umgehe, wenn ich seafile mit Mysql installieren möchte. Er akzeptiert einfach das root-Passwort nicht 🙁
DANKE und LG, Jörg
uff, jetzt bin ich die komplette Installationsanleitung mit einigen Stolpersteinen durch und war voller Erwartung, dass es klappt (zwischendurch mal mysql installiert, dabei wure apache installiert – den wieder deinstalliert und und und) und nun kommt beim Aufruf meine Domain nachwievor die Begrüßungsseite von nginx.
Hat jemand einen Tipp für mich, was ich da machen kann und wo ich nachschauen müsste? Ich weiss, es gibt viele Fehlerquellen 😉
Danke und LG, Jörg
wenn ich übrigens in den Browser den Port mit angebe:
soehner-cloud.ddns.net:8000
dann erscheit seafile, aber ohne und mit https:// kommt nginx, also muss es wohl irgendwo an der nginx Konfiguration liegen?
LG, Jörg
habe zwischenzeitlich eine komplette Neuinstallation durchgeführt, aber leider ohne Erfolg, ich kann seafile nur über
http://soehner-cloud.ddns.net:8000
aufrufen.
Bei http://soehner-cloud.ddns.net/ oder ein
https://soehner-cloud.ddns.net/
komme ich immer wieder auf die Welcome-Seite von nginx 🙁
Bitte bitte, kann mir jemand da weiter helfen?
LG, Jörg
für alle die Kollegen, die mit einem ähnlichen Problem kämpfen, ich konnte den Fehler beheben.
Es gab eine Kollision in der nginx-Konfiguration, dadurch, dass es noch die Datei default gab und diese in /etc/nginx/site-enabled verfügbar war.
Man muss die location für radicale in die neue seahub Definition übertragen und dann nur noch die seahub Datei in /etc/nginx/site-enabled belassen.
nach einem Restart des nginx kann man mit „sudo nginx -t“ die Konfiguration testen. Die zuvor erscheinenden Warnings sind dann mit samt dem Fehler verschwunden. Ab jetzt funzt alles wunderbar 🙂
Hallöchen,
da bin ich endlich auf Seite 3 der Anleitung angekommen und konnte ein paar Klipppen umschiffen und stelle nun fest, dass weder „openssl dhparam 4096“
noch „sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096“
den gewünschten Erfolg beschert.
Ich kann ums Verrecken keine erzeugte Datei ausfindig machen, die ich z.B. mit „cat dhparam.pem“ anzeigen lassen könnte.
Weder im Verzeichnis durch „ls“ oder Suchbefehle wie „find / -iname „dhparam.*“.
Bin als normaler user angemeldet, nachdem ich user seafile ge-exited habe.
Hat jemand eine Idee, wie man dem abhelfen könnte?
Bekommt dem Pi die 4096bit nicht so gut? Besser 2048?
Braucht es zur Berechnung evtl. Internet? Das habe ich nämlich rausgezogen bis die Kiste sicher läuft…
Danke Pi.RAT
Also mit eingestecktem Internet braucht es ca. 5 Minuten bei 2048 bit zur Berechnung.
Ohne Internet ca. 30 min.
Der Grund dafür, dass keine Datei geschrieben wurde, lag wohl daran, dass ich per Putty/SSH angemeldet war und nach Absenden des Befehls den Netzwerkstecker am Pi zog. Hab jetzt nen Monitor und ne Tastatur dran und die Datei wird auch auch erzeugt.
Zumindest bei 2048. 4096 rechnet grad noch.
Man, man, man…
Hallo,
da die Dienste (seafile+seahub) nach anlegen lt. Anleitung nicht mitstarten, habe ich noch folgendes gemacht:
sudo nano /etc/rc.local
—>folgende Befehle eingetragen:
sudo /etc/init.d/nginx start
su seafile -c ‚/home/seafile/seafile/seafile-server-latest/seafile.sh start‘
su seafile -c ‚/home/seafile/seafile/seafile-server-latest/seahub.sh start-fastcgi‘
su seafile -c /etc/systemd/system/seafile.service
su seafile -c /etc/systemd/system/seahub.service
mit
sudo systemctl status seafile.service
und
sudo systemctl status seahub.service
wird aber immer noch eine Fehlermeldung ausgegeben. Die Dienst scheinen nicht mit einem reboot mitgestartet zu werden.
Woran kann das liegen? Fehl etwa irgendeine Berechtigung?
Des Weiteren ist die nginx startseite und radicale ausschließlich über https erreichbar.
Seafile jedoch nur über http. Liegt das evtl. am nicht gestarteten Dienst?