Seafile - Die Neue Cloud

Nach dem ich vor längerer Zeit Probleme mit meiner alten Cloud Lösung (FileRun) durch ein Update von PHP auf 8.1 hatte. Diese verwendete intern die Komonenten ionCube loader um die PHP-Dateien zu verschlüsseln, der Hersteller stellt aber keine passende Version für PHP 8.0 oder PHP 8.1 zur Verfügung. Daher ging die Suche nach einer neuen Lösung los, und hat mich zu Seafile gebracht.

Abwägung

Durch ein Update meines Debian Server Anfang des Jahres, wurde automatisch die PHP Version auf 8.1 aktualisiert. Damit funktionierte meine aktuell Cloud-Lösung nicht mehr. Nach längerem erfolglosem Versuch die alte PHP Version wieder zu installieren, habe ich mich entschieden auf eine andere Lösung umzusteigen.

Entscheidung

Bei einigen Fehlschlägen mit anderen Cloud-Lösungen, wie z.B. aktuelle PHP Version wird nicht unterstützt oder die Lösung war zu mächtig für den VServer, bin ich auf Seafile gestosen. Dies hat mich durch folgende Punkte überzeugt:

  • Open Source
  • Keine Lizenz
  • klein und leichtgewichtig
  • Eigenständige Dienste
  • Versteckbar hinter einen Apache-Proxy
  • Entwicklung des Dateiservers in Go
  • relativ simple Installation und Upgrade vorgehen
  • sehr klein, leichtgewichtig und flott

Installation

Für die Installation sowie für jedes Update werden folgende Befehle durchgeführt:

tar -xvf ./seafile-server_<version>_x86-64.tar.gz
python3 -m venv ./seafile-server-<version>
cd seafile-server-<version>
source ./bin/activate

Dann müssen nun die Packete für die Phyton Umgebung, wie in der Upgrade-Seite beschrieben, installiert werden:

pip3 install future==0.18.* mysqlclient==2.1.* pillow==9.3.* captcha==0.4 django_simple_captcha==0.5.* djangosaml2==1.5.* pysaml2==7.2.* pycryptodome==3.16.* cffi==1.15.1
deactivate
chown seafile:seafile -R ./seafile-server-<version>

Für ein Upgrade müssen noch die Update-Script ausgeführt werden, angefangen bei der vorher installiertenversion (siehe Upgrade Manual):

cd seafile/seafile-server-latest/
ls upgrade/upgrade_*
upgrade/upgrade_<version>.sh

Da es als eigenständiger Server läuft, wird das ganze noch hinter dem Apache versteckt, hierzu verwende ich folgende Konfiguration:

<IfModule mod_proxy.c>
  # Eintrage von 
  AllowEncodedSlashes On
  RewriteEngine On

  Alias /media /opt/seafile/seafile-server-latest/seahub/media
  <Location /media>
    Require all granted
  </Location>

  # seafile fileserver
  ProxyPass /seafhttp/ http://127.0.0.1:8082/
  ProxyPassReverse /seafhttp/ http://127.0.0.1:8082/
  RewriteRule ^/seafhttp - [QSA,L]

  # Notification Server
  ProxyPass /notification/ping  http://127.0.0.1:8083/ping/
  ProxyPassReverse /notification/ping  http://127.0.0.1:8083/ping/
  ProxyPass /notification  ws://127.0.0.1:8083/
  ProxyPassReverse /notification ws://127.0.0.1:8083/

  # seahub
  SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
  ProxyPreserveHost On
  ProxyPass / http://127.0.0.1:8000/
  ProxyPassReverse / http://127.0.0.1:8000/
</IfModule>

FAQ

Mein Speicher wird sehr schnell voll

An den Sammlungen selbst kann eingestellt werden, Wieviele Versionen von den Dateien behalten werden sollen. Im Standard steht es auf “Alle Versionen”. Dies bedeutet nun, dass bei einer hohen Änderungsrate einer Datei sehr viele Speicher benötigt wird, daher empfehle ich es auf die Einstellung mit X Tagen umzustellen oder komplett zu deaktivieren.

Wie bekomme ich den nicht mehr benötigten Festplattenplatz wieder frei

Hierfür gibt es das GC-Kommando von Seafile. Wichtig hierbei ist, dass vor dem start der Seafile-Server ausgeschalten werden muss, und dann kann der GC mit folgenden Befehl gestartet werden:

./seafile/seafile-server-latest/seaf-gc.sh

Weitere Informationen dazu findet man auch auf der Website. Sinnvoll hierbei ist es direkt noch ein CleanUp-Skript mit zu erzeugen und dies wöchentlich aufrufen zu lassen.

Globale Packetinstallation unter Debian nicht möglich

Bei Debian können die Packete nicht global installiert werden. Daher habe ich das ganze über ein venv gelöst und dort die Packete installiert.

Wenn der start keine Fehlermeldung anzeigt

Für eine einfachere Diagnose kann man den Dienst auch direkt starten über den Befehl bash -xv ./seahub.sh start. Wenn auch hier keine Fehlermeldungen auftauchen, dann sollte der erste Aufruf von start-fastcgi geprüft werden. Dieser hat bei mir auf das Problem hingewiesen und zwar das es das cffi Packet betrifft.

Diese wird bei 9.0.10 noch mit 1.14.0 angegeben, welche ich wegen Fehler nicht installieren konnte, sondern die 1.15.1 die aktuell vorliegt.

Damit ich die aktuelle Version verwenden konnte musste ich die “init.py” im Ordner “seafile-server-latest/seahub/thirdpart/cffi” anpassen, und zwar hab ich die Versionsnummer von 1.14.0 auf 1.15.1 an den Stellen version und version_info geändert.

Wenn es als Dienst immer noch nicht geht

Wenn die Seite nicht mehr geht wenn sie übers systemctl gestartet wird, obwohl sie vorher via Script direkt ging, sollte das Log befragt werden.

In meinen Fall lag es am cache-Ordner. Dieser gehört dem root-User, wodurch der Dienst im Dienstkontext an den Ordner nicht herangekommen ist. Nach der Änderung des Benutzer auf dem Cache-Ordner ging dann auch wieder alles.