Seafile 4.0.x mit Nginx und MySQL-Backend auf Debian/Ubuntu

seafile nginx mysql

Dass Seafile ursprünglich in China entwickelt wurde, tut der Sache keinen Abbruch, dass es sich um eine sichere und gute Open-Source Software mit Entwicklern aus der ganzen Welt handelt.
Seafile ist ähnlich OwnCloud eine selbst gehostete Cloud-Lösung zum Austausch von Dateien. Und noch mehr…
Für weitere Information empfehle ich einen Blick auf die Webseite.

Ich beschreibe hier die Einrichtung auf Basis von MySQL/MariaDB, „verstecken“ werde ich den Dienst hinter Nginx mit HTTPS.

Wovon ich ausgehe:

  • Nginx Server in Grundkonfiguration (siehe Artikel)
  • SSL-Zertifikat, es darf selbstsigniert sein (Tipp: https://startssl.com)
  • MySQL oder MariaDB Datenbank
  • Erreichbarkeit unter Subdomain „cloud.domain.tld“
  • Als Servernamen verwende ich durchgehend „servername“

Eine schöne Übersicht zur Kommunikation des Dienstes auf Basis von Nginx (Quelle):
Nginx, Seafile

Changelog

  • 24. Januar 2015 – Korrektur für Webdienst ([fileserver] anstatt [httpserver]), Download von Seafile via wget gefixt, Pfad der „seafile.conf“ korrigiert, seit v3.10 lautet „HTTP_SERVER_ROOT“ „FILE_SERVER_ROOT“
  • 19. Mai 2014 – Init-Script Anpassungen an Seafile 3.0.3
  • 18. Mai 2014 – Artikel angepasst an Seafile 3.0.3, Runlevel des Init-Scripts angepasst
  • 13. Mär 2014 – HTTP_SERVER_ROOT fixed (keine Preview, kein Download)
  • 15. Mär 2014 – Service nicht installiert

Installation und Konfiguration

Seafile definiert folgende Abhängigkeiten für die Installation und Ausführung, welche via „apt-get“ installiert werden können:

apt-get install python2.7 python-setuptools python-simplejson python-imaging python-mysqldb

Einen unpriviligierten Benutzer erstellen, „-d“ definiert das Heimverzeichnis, das später neben den Cloud-Daten auch die gesamte Seafile-Installation beinhalten wird. Ein Passwort wird nicht vergeben, da ein Login mit der fiktiven Shell „false“ nicht möglich ist:

useradd -m -d /srv/seafile -s /bin/false seafile

Ich wechsel zum Benutzer „seafile“ unter manueller Angabe einer Shell, in diesem Fall Bash:

su - seafile -s /bin/bash

Den Verzeichnisbaum lege ich dem Muster der Empfehlung Seafiles nach an.

Auch ist darauf zu achten, dass die neueste Version heruntergeladen wird! v4.0.6 ist zum Zeitpunkt des Artikels (Update 22.01.2015) aktuell.
In meinem Fall benutze ich die x86_64-Version für ein 64bit-System, reine 32bit-Systeme greifen entsprechend zum anderen Paket.

„servername“ im ersten Befehl bitte zwei mal ersetzen, es muss natürlich nicht der echte Servername sein.

mkdir -p servername/installed && cd servername/installed
wget --content-disposition -O seafile-server.tar.gz https://bitbucket.org/haiwen/seafile/downloads/seafile-server_4.0.6_x86-64.tar.gz && tar -xzvf *tar.gz -C ../ && cd ..

Die Struktur im Überblick:

seafile@www:~/servername$ tree -L 2
.
├── installed
│   └── seafile-server_4.0.6_x86-64.tar.gz
└── seafile-server-4.0.6
    ├── check_init_admin.py
    ├── reset-admin.sh
    ├── runtime
    ├── seaf-fuse.sh
    ├── seafile
    ├── seafile.sh
    ├── seahub
    ├── seahub.sh
    ├── setup-seafile-mysql.py
    ├── setup-seafile-mysql.sh
    ├── setup-seafile.sh
    └── upgrade

Nun in das Verzeichnis „seafile-server-4.0.6“ wechseln und das Script zur Erstellung der MySQL Datenbanken anstoßen:

cd seafile-server-4.0.6/
./setup-seafile-mysql.sh

Die aufkommenden Fragen zur Konfiguration nun beantworten.
Für die meisten Optionen wähle ich die Vorgabe, indem ich mit „Enter“ bestätige.

Im Folgenden erwähne ich nur Optionen, deren Standardwert ich verändert habe

Zwischendurch wird das „root“-Passwort der MySQL-Installation abgefragt.
Folgende manuelle Eingaben sind wichtig:

What is the name of the server? It will be displayed on the client.
3 – 15 letters or digits
[ server name ] servername

What is the ip or domain of the server?
For example: www.mycompany.com, 192.168.1.101
[ This server’s ip or domain ] cloud.domain.tld

——————————————————-
Please choose a way to initialize seafile databases:
——————————————————-

[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases

[ 1 or 2 ] 1

What is the host of mysql server?
[ default „localhost“ ] je nach Konfiguration

What is the port of mysql server?
[ default „3306“ ] je nach Konfiguration

What is the password of the mysql root user?
[ root password ] je nach Konfiguration

verifying password of user root … done

Enter the name for mysql user of seafile. It would be created if not exists.
[ default „root“ ] seafileusr (zum Beispiel)

Enter the password for mysql user „seafileusr“:
[ password for seafileusr ] Passwort für den neuen Benutzer „seafileusr“

———————————
This is your configuration
———————————
[…]
———————————
Press ENTER to continue, or Ctrl-C to abort
———————————
Enter
—————————————————————–
Your seafile server configuration has been finished successfully.
—————————————————————–

Bitte nicht „root“ als MySQL-Benutzer für Seafile benutzen.

Da ich Seafile via HTTPS benutzen möchte, ändere ich zwei Dateien:

nano ~/servername/ccnet/ccnet.conf

Hier die Option „SERVICE_URL“ suchen und aus „http“ „https“ mache, etwa:

SERVICE_URL = https://cloud.domain.tld

Die Zweite Datei öffnen:

nano ~/servername/seahub_settings.py

Am Ende der Datei einfügen:

FILE_SERVER_ROOT = 'https://cloud.domain.tld/seafhttp'
ACHTUNG: Seit Version 3 wird der Administrator nicht mehr mit dem Setup erstellt.

Erst durch ein einmalig manuelles Starten der Dienste wird hierzu aufgefordert.

~/servername/seafile-server-latest/seafile.sh start
~/servername/seafile-server-latest/seahub.sh start-fastcgi

Es folgt:

What is the email for the admin account?
[ admin email ] username@domain.tld

What is the password for the admin account?
[ admin password ] sicherespasswort

Enter the password again:
[ admin password again ] sicherespasswort

Zum Abschluss noch die manuell gestarteten Dienste wieder beenden:

~/servername/seafile-server-latest/seafile.sh stop
~/servername/seafile-server-latest/seahub.sh stop

Der lokale Webdienst sollte zudem auf „localhost“ gebunden, um direkten externen Zugriff zu verhindern:

nano ~/servername/seafile-data/seafile.conf

Hier nun folgende Änderung vorhehmen:

[fileserver]
host=127.0.0.1
port=8082

Ab hier bitte mit „exit“ die Shell verlassen und zum Beispiel als „root“ weiterarbeiten!

Da der Seafile-Server hinter einem Nginx-Backend via SSL läuft, benötige ich anstatt vier nur drei Freigaben in der Firewall:

443/TCP – HTTPS – IN/OUT
10001/TCP – Ccnet Daemon – IN/OUT
12001/TCP – Seafile Daemon – IN/OUT

Zum Beispiel (kann auch ignoriert werden):

/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -I INPUT -i lo -p all -j ACCEPT # Interne Kommunikation via localhost vollständig freigeben
/sbin/iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p tcp -d PUB.LIC.SRV.IP -m state --state NEW -m multiport --dport 10001,12001,443 -j ACCEPT

Achtung: Bitte nicht blind übernehmen, da ihr euch ansonsten von der SSH aussperrt!

Für Nginx richte ich eine neue Site mit der Subdomain „cloud.domain.tld“ ein.
Wird diese Konfiguration übernommen, so bitte den Pfad „/srv/seafile/servername/seafile-server-latest/seahub“ anpassen, ebenso „server_name“, ssl_certificate und ssl_certificate_key:

server {
        listen       80;
        server_name  cloud.domain.tld;
        rewrite ^/(.*) https://$server_name/$1 permanent;
}
server {
        listen 443; #IPv4
        #listen [::]:443; # IPv6
        ssl on;
        ssl_certificate /etc/nginx/certs/ssl-unified.crt;
        ssl_certificate_key /etc/nginx/certs/ssl.key;
        server_name cloud.domain.tld;

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

        location /seafhttp {
                rewrite ^/seafhttp(.*)$ $1 break;
                proxy_pass http://127.0.0.1:8082;
                client_max_body_size 0;
        }

        location /media {
                root /srv/seafile/servername/seafile-server-latest/seahub;
        }
}

In diesem Fall erfolgt eine Weiterleitung von HTTP auf HTTPS. PHP oder Sonstiges braucht nicht definiert zu werden!

Nginx nun „reloaden“:

service nginx reload

Bevor das Init-Script angelegt- und der Dienst gestartet wird, werfe ich noch einen Blick in die Datei „hosts“:

nano /etc/hosts

Hier bitte sicherstellen, dass folgender Eintrag vorhanden ist:

127.0.0.1       cloud.domain.tld

Im Git-Repository findet sich ein Init-Script, das Seafile und Seahub als unprivilegierter Benutzer startet, auch lässt sich definieren, dass Seahub nur im FastCGI-Modus gestartet wird.
Ich habe es etwas angepasst.

Das Script erstellen:

nano /etc/init.d/seafile

Der Inhalt, in dem „user“ und „seafile_dir“ bitte angepasst werden:

#!/bin/bash

### BEGIN INIT INFO
# Provides:          seafile
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts Seafile and Seahub
# Description:       starts Seafile and Seahub
### END INIT INFO

#### CONFIG START ####
user=seafile
seafile_dir=/srv/seafile/servername
##### CONFIG END #####

script_path=${seafile_dir}/seafile-server-latest
seafile_init_log=${seafile_dir}/logs/seafile.init.log
seahub_init_log=${seafile_dir}/logs/seahub.init.log
[ -d ${seafile_dir}/logs ] || mkdir ${seafile_dir}/logs && chown $user:$user ${seafile_dir}/logs

# Change the value of fastcgi to true if fastcgi is to be used
fastcgi=true
# Set the port of fastcgi, default is 8000. Change it if you need different.
fastcgi_port=8000

case "$1" in
        start)
                sudo -u ${user} ${script_path}/seafile.sh start >> ${seafile_init_log}
                if [  $fastcgi = true ];
                then
                        sudo -u ${user} ${script_path}/seahub.sh start-fastcgi ${fastcgi_port} >> ${seahub_init_log}
                else
                        sudo -u ${user} ${script_path}/seahub.sh start >> ${seahub_init_log}
                fi
        ;;
        restart)
                sudo -u ${user} ${script_path}/seafile.sh restart >> ${seafile_init_log}
                if [  $fastcgi = true ];
                then
                        sudo -u ${user} ${script_path}/seahub.sh restart-fastcgi ${fastcgi_port} >> ${seahub_init_log}
                else
                        sudo -u ${user} ${script_path}/seahub.sh restart >> ${seahub_init_log}
                fi
        ;;
        stop)
                ${script_path}/seafile.sh $1 >> ${seafile_init_log}
                ${script_path}/seahub.sh $1 >> ${seahub_init_log}
        ;;
        *)
                echo "Usage: /etc/init.d/seafile {start|stop|restart}"
                exit 1
        ;;
esac

Das Script noch als ausführbar markieren und den Dienst installieren sowie starten:

chmod +x /etc/init.d/seafile
update-rc.d seafile defaults
service seafile start

Der Client kann nun installiert und konfiguriert werden.
Vorab darf das Webpanel bewundert und ebenfalls konfiguriert werden: https://cloud.domain.tld

Danke an die Hinweise aus den Kommentaren!

61 Antworten auf “Seafile 4.0.x mit Nginx und MySQL-Backend auf Debian/Ubuntu

  1. David Dwier

    Erstmal vielen Dank für diese großartige Anleitung! Ich hab seafile 5.0.4 auf meinem Openmediavault-NAS installiert. Das einzige, was ich anpassen musste war die NGINX Seitenkonfiguration, da es bei mir einen BIND Error gab ([emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use).
    Ich hab daraufhin die zweite Zeile in der NGINX-Seite angepasst zu „listen [::]: 80;“ und alles klappte wunderbar. Lag vermutlich daran, dass auch das WebGUI von Openmediavault auf Port 80 läuft.
    Vielen Dank nochmals!

  2. Hendrik

    Danke der wie immer freundlichen Hilfe von André habe ich es gerade geschafft Seafile zum laufen zu bekommen.
    Dabei ist ein kleiner Fehler aufgefallen:
    im init.d/seafile ist ein Eintrag nicht vollständig.
    Richtig ist:
    # Required-Start: $local_fs $remote_fs $network mysql
    => am Ende das ‚mysql‘ einfügen, denn ansonsten ist die Startreihenfolge falsch.

  3. Fehler

    Hallo,

    vielen Dank fuer die Guide. Trotzdem ist dir da ein Fehler unterlaufen:

    „su – seafile -s /bin/bash“ geht nicht unter Debian 8, wenn der Benutzer ohne Passwort und auf /bin/false erstellt worden ist.

  4. saljut7

    Hallo André,

    ist es möglich, einfach so von MySQL auf MariaDB zu wechseln (wie es zum Beispiel [url=https://www.digitalocean.com/community/tutorials/switching-to-mariadb-from-mysql]hier[/url] beschrieben wird oder könnte das doch in Bezug auf Seafile mit Problemen verbunden sein? Der Server läuft im Moment sehr gut und ich will ihn nicht zerschießen.

    Gruß und Danke!
    sj7

    1. André P. Autor

      Hi sj7,
      „angeblich“ funktioniert Seafile mit MariaDB fehlerfrei. Ich konnte es leider noch nicht testen, gehe aber davon aus, dass die Informationen korrekt sind.
      Am besten ein Backup erstellen und ausprobieren. :-)
      Viele Grüße
      André

  5. Sven

    Hallo Andre,

    erstmal Kompliment an deine Tut’s. Sehr ausführlich und verständlich! ;)
    Beim durchklicken bin ich auch auf deinen Artikel zu Naxi für WP gestoßen…
    Hast Du Naxsi auch in Zusammenspiel mit Seafile/nginx im Einsatz (gehabt)?
    Sowohl die Umsetzung, als auch die Rulebase würde mich interessieren.

    VG

    1. André P. Autor

      Hi,
      danke! :-)
      Habe ich noch nicht ausprobiert, könnte man aber mal in Angriff nehmen.
      Habe die relativ neue API von Naxsi zum erstellen der Regeln noch nicht verwendet, könnte man direkt kombinieren… :-)

      Viele Grüße

  6. Marco

    Hallo André,

    ich finde deine Anleitungen und fufix überragend. Danke für diese Arbeit!

    Eine keine Anmerkung habe ich.
    Ich habe Seafile installiert und dabei auch die oben erwähnte Grundkonfig für nginx in diesem Artikel beachtet.
    Da in der php.ini kein exec erlaubt wird, hat fufix (bzw. nginx oder die index.php auf dem Rootverzeichnis vom mail.domain.tld) Probleme mit dem Einlesen des FQDN, da folgende Abfrage im Hintergrund durch die vars.inc.php erfolgt:
    $MYHOSTNAME=exec(„/usr/sbin/postconf -h myhostname“);

    Die Auswirkungen sind, dass nur noch die Ports da stehen – nicht mehr die kompletten Mail-Client Konfigurationen!

    Gruß,
    Marco

  7. saljut7

    Lieber André,

    vielen Dank für das übersichtliche Tutorial. Ich habe versucht, auf einem Cubietruck unter Cubian (GNU/Linux 3.4.79-sun7i armv7l) seafile-server_4.0.6_pi.tar.gz zu installieren.

    Ich habe zwar eine DynDNS-Domain eingerichtet, war mir aber nicht sicher, ob und wie der Aufruf innerhalb meines LAN dann funktioniert und entsprechend erstmal (?) an allen Stellen für cloud.domain.tld die LAN-IP des Cubitrucks angegeben.

    Nach dem Start durch service seafile start und dem Aufruf von https://191.168.1.3/ wurde zwar beim ersten Mal eine Zertifikatsabfrage ausgegeben (sodass ich vermute, dass nginx soweit läuft), ich erhalte jedoch

    502 Bad Gateway
    nginx/1.2.1

    Vielleicht bin ich dem Tutorial an einigen Stellen zu blind gefolgt: Ich habe an allen (!) Stellen des Tutorials (und dem über nginx!), an denen cloud.domain.tld gefordert wurde, meine lokale IP des Cubietrucks angegeben, in diesem Fall also 192.168.1.3. Falls Du nicht spontan eine andere Idee hast, woran es liegen könnte, wären meine Fragen:

    1. Meine /etc/hosts führt

    127.0.0.1 Cubian
    127.0.0.1 localhost
    127.0.0.1 192.168.1.3

    …ist das so korrekt?

    2. Die Anleitung von nginx habe ich versucht zu adaptieren (ganz durchgestiegen, was ich da mache, bin ich ehrlich gesagt aber nicht). Jedenfalls liegt unter

    root@Cubian:/etc/nginx/sites-enabled# ls -la
    total 8
    drwxr-xr-x 2 root root 4096 Apr 12 22:20 .
    drwxr-xr-x 6 root root 4096 Apr 12 17:39 ..
    lrwxrwxrwx 1 root root 38 Apr 12 22:20 192.168.1.3 -> /etc/nginx/sites-available/192.168.1.3
    root@Cubian:/etc/nginx/sites-enabled#

    …macht das Sinn? Ich wusste nicht recht, wie genau die Nginx-Site (Vorlage habe ich Deinem Tutorial entnommen und entsprechend Deinen 4 Hinweisen dazu angepasst) heißen muss. Da ich für cloud.domain.tld entsprechend wieder 192.168.1.3 eingesetzt habe dachte ich, die Site müsste ebenso heißen.

    3. Unter den Kommentaren schien es mir Unstimmigkeiten hinsichtlich iptables zu geben. Meine Freigaben lauten wie folgt:

    # iptables -L
    Chain INPUT (policy ACCEPT)
    target prot opt source destination

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination
    root@Cubian:/# vi /etc/iptables.test.rules
    root@Cubian:/# iptables-restore < /etc/iptables.test.rules
    root@Cubian:/# iptables -L
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    ACCEPT all — anywhere anywhere
    REJECT all — anywhere loopback/8 reject-with icmp-port-unreachable
    ACCEPT all — anywhere anywhere state RELATED,ESTABLISHED
    ACCEPT tcp — anywhere anywhere tcp dpt:http
    ACCEPT tcp — anywhere anywhere tcp dpt:https
    ACCEPT tcp — anywhere anywhere tcp dpt:10001
    ACCEPT tcp — anywhere anywhere tcp dpt:12001
    ACCEPT tcp — anywhere anywhere tcp dpt:8082
    ACCEPT tcp — anywhere anywhere tcp dpt:8000
    ACCEPT tcp — anywhere anywhere state NEW tcp dpt:
    ACCEPT icmp — anywhere anywhere icmp echo-request
    LOG all — anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix „iptables denied: “
    REJECT all — anywhere anywhere reject-with icmp-port-unreachable

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination
    REJECT all — anywhere anywhere reject-with icmp-port-unreachable

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination
    ACCEPT all — anywhere anywhere

    …macht das in Bezug auf Seafile soweit Sinn?

    Ich hoffe, das sind nicht zu viele Fragen und bedanke mich im Voraus für einnige Hinweise-

    PS: Der Aufruf von http://192.168.1.3:8082/ liefert immerhin „If you see this page, Seafile HTTP syncing component works.“, sodass zumindest irgendetwas funktioniert.

    1. André P. Autor

      Hi,
      danke für die vielen Infos, das hilft immer sehr weiter. :-)
      Zur Firewall: Port 8082 brauchst du nicht öffnen (verstecken wir hier hinter Nginx), das hier sieht auch dubios aus: ACCEPT tcp — anywhere anywhere state NEW tcp dpt: – es öffnet dir im Endeffekt dann ja doch jeden Port. :-)

      Den Namen cloud.domain.tld einfach immer in die IP umzuschreiben, wird nicht funktionieren. Richtig wäre, du ersetzt immer durch deinen DynDNS-Namen.

      Ich vermute aber noch Fehler in der Nginx-Konfiguration. Du kannst mir diese mal zukommen lassen, mit etwas Glück, finden wir schnell den Fehler. Alternativ schalte ich mich auf und bringe alles für dich in Ordnung. :-) Natürlich mit Erklärung.

      Viele Grüße
      André

      1. saljut7

        Lieber André,
        einen Anlauf werde ich noch unternehmen und dann gerne auf Deine Hilfeangebot zurückkommen, vielen Dank dafür!
        1. Zu iptables: Danke für die Klarstellung zur Portfreigabe (der von Dir erwähnte Eintrag in iptables ist mir auch aufgefallen, ich bin aber eigentlich der Anleitung unter https://wiki.debian.org/iptables gefolgt – ich achte beim zweiten Anlauf nochmal genau darauf).
        Ich gehe also davon aus, die Ports 443, 8000, 10001 und 12001 freigeben zu müssen.
        2. Zu : An diesem Punkt ist der setup-Hinweis For example: http://www.mycompany.com, 192.168.1.101 verwirrend. Hier wird nicht klar, dass man zwingend (?) eine Domain braucht. Dann probiere ich es jetzt mit einer DynDNS-Adresse.
        3. Zu Nginx: Ich werde erst einmal die default-Site modifizieren. Ist der Name der Site-Datei unter sites-available der Name der Subdomain, unter dem die angelegte Site später zu erreichen ist? Lege ich unter sites-available eine Site seafile und meine DynDNS-Adresse lautet my.ddns.net dann müsste seafile folglich über seafile.my.dyndns.net zu erreichen sein?

        1. André P. Autor

          Hi,
          zu 1.: wie oben beschrieben reichen Port 443, 10001 und 12001. :-)

          Zu 2.: Der Setup-Hinweis ist schon okay, du kannst DORT auch eine IP eintragen. Aber du darfst nicht immer davon ausgehen, dass das möglich ist. Eine IP und ein DNS-Name sind unterschiedliche Dinge. In einer Hosts-Datei weist du zum Beispiel auf einfachste Art einem Namen eine IP zu. Das ist die „günstigste“ Form von Namensauflösung.

          Zu 3.: Nein, der Name der Datei ist Wurst. :-) Wichtig ist der Parameter „server_name“ IN der Site-Datei. Du könntest dort auch „seafile.google.com“ eintragen. In deinem Fall wäre sowas wie „mein-seafile-cubie.ddns.net“ wohl passend.

          VG

          1. saljut7

            Hi André,
            vielen Dank erstmal für die Klarstellungen.
            Falls Du Zeit hast, mir noch zu erklären, was es für einen Unterschied macht, im setup IP oder DOMAIN einzutragen, würde es mich freuen, ich habe jetzt aber meine DynDNS-Domain eingetragen (so auch an allen anderen Stellen) und hoffe, das hier kein Problem mehr verursacht wird.

            Bin jetzt nochmal akribisch Deinem Tutorial gefolgt und denke, alles ordentlich umgesetzt zu haben. Leider startet Seahub nicht.

            /srv/seafile/meinservername/logs/seahub.init.log sagt
            Starting seahub (fastcgi) at 127.0.0.1:8000 …
            Loading ccnet config from /srv/seafile/meinservername/ccnet
            Loading seafile config from /srv/seafile/meinservername/seafile-data
            ^[[33mError:Seahub failed to start.^[[m

            Dieser Fehler erschien schon an der Stelle, an welcher der Admin-Zugang gesetzt wird, hatte es aber an der Stelle ignoriert, da es ja noch nicht darum ging, den Seafile Server zu starten:
            —————————————-
            Successfully created seafile admin
            —————————————-
            Loading ccnet config from /srv/seafile/meinservername/ccnet
            Loading seafile config from /srv/seafile/meinservername/seafile-data
            Error:Seahub failed to start.

            Hättest Du spontan eine Idee oder wäre es besser, sofern das Angebot noch steht, sich per SSH direkt aufzuschalten (im Falle von SSH schick mir doch bitte kurz eine Mail an saljut7 AT posteo DOT net und, falls Du hast, Deinen PGP-Key)?

            1. saljut7

              Hey André,

              nochmals tausend Dank für Deine Hinweise und schnelle Direkthilfe. Ich habe nun nochmals alles neu aufgesetzt, um Seafile eigenhändig erfolgreich zum Laufen zu bekommen. Es läuft nun, jedoch am Ende nur mit einigem Rumprobieren. Zwei Dinge, die vielleicht wichtig sind:

              1. geht an all jene, die auch Cubian einsetzen: Das Admin-Panel „ajenti“ ist vorinstalliert und läuft ebenfalls über Port 8000 – bei mir startete ./seahub.sh start-fastcgi erst, nachdem ich es via
              service ajenti stop
              gestoppt hatte, was ja irgendwie auch Sinn macht.

              2. Die „SERVICE_URL“ der ccnet.conf muss laut Deinen Anweisungen „SERVICE_URL = https://cloud.domain.tld“ heißen, bei mir ließ sich die Seafile-Webseite aber erst erfolgreich aufrufen, nachdem ich den Port 8000 hinzufügte, also
              SERVICE_URL = https://cloud.domain.tld:8000

              Falls ich an dieser Stelle etwas falsch interpretiert habe wäre ich dankbar für Korrekturen.

              1. André P. Autor

                Argh, genau, ich hatte Ajenti deaktiviert, direkt zu Beginn. Damit wollte ich ausschließen, dass Ports blockiert werden. Anschließend habe ich noch die „INPUT“ Regeln vom Netfilter ge“flushed“. Habe dir nicht Bescheid gegeben, sorry, blöde Eile… :-)
                Das mit der SERVICE_URL könnte zu Problemen führen, eigentlich sollte es auch ohne die 8000 funktionieren. Wir wollen den Port ja verstecken. Hast du den FastCGI Modus im Seahub an? Ist der Hostname mit 127.0.0.1 in der Hosts-Datei hinterlegt?

  8. Patrick

    Sehr schönes Tutorial! Läuft bei mir sehr gut.
    Das einzige was bei mir nicht will ist, dass der seafile service automatisch beim Server neustart startet. Das muss ich immer manuell machen. Habe aber alles direkt wie im Tut gemacht, wenn ich es nochmals machen möchte kommt auch die Meldung: „System start/stop links for /etc/init.d/seafile already exist.“
    An was kann das liegen?

    Grüße

    1. André P. Autor

      Hi,
      danke!
      Die Meldung kommt aber nur, wenn du den Dienst noch einmal einrichten möchtest, oder? Die kam nicht schon beim ersten Einrichten?
      Würdest du mir vielleicht deine „syslog“ hochladen? Hauptsache ist, dass der letzte Reboot drauf ist. Auch nicht schlecht wären die Dateien „/srv/seafile/servername/logs/seahub.init.log“ und „/srv/seafile/servername/logs/seafile.init.log“. :-)
      Wahrscheinlich fehlt einfach nur „Required-Start“ Parameter.
      Da fällt mir ein: Deine „/srv“-Partition liegt nicht zufällig im Netzwerk?

      Viele Grüße
      André

      1. Patrick

        Hab das ganze nun hinbekommen. Hab den Server sowieso neu aufsetzen müssen und jetzt klappts ;) Jetzt habe ich aber das Problem das ich über alles Clients verbinden kann nur mit meinen iOS Devices nicht? Sobald ich mich mit meinem Konto anmelden möchte kommt die Abfrage nach dem SSL Zertifikat, wenn ich dies bejahe, kommt eine Meldung „Netzwerk nicht Verfügbar“

        1. André P. Autor

          Könnte mir vorstellen, dass es am Zertifikat liegt. Benutzt du denn ein selbst-signiertes? Oder hast du vielleicht ein eigenes?
          Ach so, die App auch ruhig mal deinstallieren und neu drauf hauen. Vielleicht ist das alte Zertifikat gecached. Ansonsten auch mal das Zertifikat direkt auf dem iPhone installieren. :-)

          1. Patrick

            Installiert habe ich das ganze mit einem selbs-signierten Zertifikat, jedoch vorhin über meine Domain dann ein kostenloses Zertifikat über startssl.com angefordert und eingebunden. Jetzt bringt er mir beim starten der Weboberfläche etc. auch keine Meldung mehr, habe das alte Zertifikat zuvor natürlich gelöscht. Hab den Client jetzt mal deinstalliert und neu installiert. Immer noch das selbe Problem, auch nach manuellem installieren des Zertifikats.

  9. Marco

    Hi,
    sehr gutes und aktuelles Tutorial, vielen Dank!

    Bei mir läuft soweit alles, aber Nginx kommt mit der „proxy_pass Zeile“ in „location /seafhttp“ nicht klar:
    proxy_pass http://127.0.0.1:8082;

    „service nginx start“ schmeißt den Fehler:
    nginx: [emerg] unknown directive "proxy_pass" in /etc/nginx/sites-enabled/seafile.conf:36
    failed!

    Ich habe die neuste Version nginx/1.7.10 installiert. Jemand eine Idee?

    1. André P. Autor

      Hi Marco, danke!
      Dann fehlt dem Nginx das Modul für den Proxy. Aus welcher Quelle hast du Nginx installiert? Und vielleicht „light“ installiert? Was sagt denn nginx -V 2>&1 | grep -i proxy --color=auto?
      Ansonsten mal das hier ausführen: dpkg --get-selections | grep -i nginx. Wenn dort was von „nginx-light“ steht, kannst du einfach „nginx-full“ installieren und das „light“-Paket überschreiben.

      1. Marco

        Hey André,
        die Antwort kommt ja echt wie aus der Pistole geschossen. Ein dickes Dankeschön für den Support!

        Ich habe den Server nach diesem Skript aufgesetzt: Der perfekte Rootserver (GitHub).

        Nginx wird da frisch mit allen benötigtem Modulen kompiliert. Bzw. in meinem Fall fehlt da wohl etwas… Der Hund liegt wohl in Zeile 339 begraben: --without-http_proxy_module
        Da hätte ich auch selbst drauf kommen können…

      2. Marco

        Ich habe jetzt einen Teil des install.sh-Skripts nochmals laufen lassen (zunächst rm -r -f ~/sources/*; dann hauptsächlich Nginx Sources mit Zusatzmodulen erneut herunterladen, kompilieren und installieren). Nginx ließ sich erst nach etwas Probieren durch Neuschreiben einiger Settings wieder zum Laufen bewegen.

        Falls du einen eleganteren Weg weißt, eine bestehende Nginx-Version zu updaten, lass es mich gerne wissen.

        Danke nochmal für die prompte Hilfe und das Howto, Seafile läuft dank dir jetzt – und das sehr flott. Bin begeistert!

  10. Hendrik

    Hallo,
    auch auf diesem Weg noch mal mein Dank an André, der auch hier (wie auch beim mailserver) trotz allem, was er um die Ohren hat, mir selbstlos und sehr freundlich geholfen hat.
    Mein Ziel war es auf einem banana PI (den ich übrigens als besseren raspberry PI nur empfehlen kann) einen Seafile und einen Baikal (für carddav/caldav) Server zu installieren.
    Leider bin ich an einigen Sachen gescheitert, denn so trivial ist das mit dem Proxy etc. aus meiner Sicht nicht, auch wenn die Doku hier schon super ist.
    André hat dann aber schnell die Lösung gefunden, nun läuft alles wie von mir gewünscht.

    Lieber André, ich ziehe meinen Hut vor deinem Wissen und deinem megafreundlichen Verhalten, du hast meinen absoluten Respekt !!!!

    Gruß
    Hendrik

  11. Alex

    Ich krieg Seafile 4.0.1 nicht zum laufem auf meinem Pi. Kann ich diese Anleitung auch unter Raspian auf ARM nutzen? Die ganzen Raspian Tutorials beziehen sich nämlich auf ältere Versionen und mit der 4.0.1 will es ums verrecken nicht klappen.

    1. André P. Autor

      Hi,
      probiere es am besten einmal aus. Ich kann es dir leider nicht garantieren.
      Aber gibt es Seafile nicht auch als Paket für ARM? Ich habe leider kein solches Gerät (ARM) hier, um es zu testen.

      Viele Grüße

  12. Shogun

    Leider erfolgt die Seafile-Kommunikation entgegen der obigen Grafik nicht komplett über Nginx, sondern (wie auch in den Firewallregeln beschrieben) zusätzlich über die Ports 10001 und 12001. In der Standardkonfiguration ist auf dem Server ebenfalls noch Port 8082 für alle offen. Das läßt sich verhindern, indem man in ~/seafile-data/seafile.conf den Dienst an localhost bindet:

    [httpserver]
    host = 127.0.0.1
    port = 8082

    Die Funktionen von Seafile werden dadurch nicht beeinträchtigt.

      1. JennyJan

        Hallo, eine kleine und eine große Anmerkung.
        Die kleine ist: der Pfad sollte lauten: ~/seafile-data/servername/seafile.conf
        Die ander Anmerkung ist: Sehr schöner Installationsguide!

  13. awado

    Erst mal danke für den guten Artikel! BittorrentSync kam für mich nicht in Frage, weil ich keine Daten extern lagern möchte. Somit ist Seafile eine tolle Alternative. Es gibt auch OSX- und iOS-Clients, die recht gut laufen. (Soweit ich bisher testen konnte.)

    Mir fiel auf, dass die Server-Uhrzeit nicht ganz unwichtig ist. Vielleicht ist es eine gute Idee, noch den ntpd zu installieren. Unter Debian hiermit:

    apt-get install ntp ntpdate

    Dann stimmen auch die Login-Zeiten in den Protokollen wieder mit der realen Welt überein und das SSL-Zertifikat führt am Ende der Gültigkeit nicht zu Widersprüchen.

  14. Fabian

    Hey André,
    du sagst, dass Seafile nur noch mit drei Ports läuft (443, 10001 und 12001). Allerdings gibt mir Seafile, wenn ich eine Datei freigeben will, einen Link mit Port 8000.

    Es muss also noch in der Datei ~/servername/ccnet/ccnet.conf der Port am Ende der Zeile
    SERVICE_URL = https://cloud.domain.tld:8000
    entfernt werden.

    PS: Deine Anleitung funktioniert auch mit der Version 3.1.6 noch wunderbar!! (bis auf den Link natürlich) DANKE!!

    PPS: Man kann optional auch noch WebDAV aktivieren. Dazu einfach die Datei ~/servername/conf/seafdav.conf wie folgt anpassen:
    [WEBDAV]
    enabled = true
    port = 8080
    fastcgi = true
    share_name = /seafdav

    Dann sollte man noch die vHost-Konfiguration um das Folgende erweitern: (innerhalb der „server{}-Blocks“)
    location /seafdav {
    fastcgi_pass 127.0.0.1:8080;
    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;
    }

    MfG

  15. schlingel

    Hi,

    Danke für die super Anleitung! Hat alles super funktioniert!

    Eine Frage hätte ich da noch: Wie sicherst du die Daten die du im Seafile hast?

    Grüße
    schlingel

  16. Fabian

    Hallo André,

    perfekte Anleitung – vielen Dank!

    Hab noch eine Kleinigkeit gefunden.

    ich würde dein INIT script
    # Required-Start: $local_fs $remote_fs $network

    das mysql ergänzen

    also:
    # Required-Start: $local_fs $remote_fs $network mysql

    Das fehlen von mysql führte bei mir dazu, dass beim neustart des Rechners der seafile server eine Fehler im log /srv/seafile/servername/logs/seafile.init.log machte:
    SQLException: Failed to start connection pool — Lost connection to MySQL server at ‚reading initial communication packet‘, system error: 111 raised in ConnectionPool_start at src/db/ConnectionPool.c:287

    Passiert wenn seafile vor mysql startet.

    Die Anmerkung dazu findest du unter:
    https://github.com/haiwen/seafile/wiki/Start-seafile-server-at-system-bootup#create-a-script-etcinitdseafile-server-1
    bei den Notes unter dem script.

    LÖSUNG:
    1.) update-rc.d -f seafile-server remove
    2.) Die Zeile im INIT scrip ändern:
    nano /etc/init.d/seafile
    # Required-Start: $local_fs $remote_fs $network mysql
    3.) update-rc.d seafile defaults

    Viele Grüße
    Fabian

  17. Holger

    Hallo,
    ich finde die Anleitung wirklich verständlich und habe eigentlich alles so gemacht, wie es beschrieben steht. Aber der Ablauf der Installations-Skripts für Seafile bricht immer am Ende mit dieser Meldung ab:
    ——– dies ist noch der Rest der Bestätigung, wie denn die Konfiguration jetzt wohl aussieht …
    database: create new
    ccnet database: ccnet-db
    seafile database: seafile-db
    seahub database: seahub-db
    database user: cloudusr

    ———————————
    Press ENTER to continue, or Ctrl-C to abort
    ———————————

    Generating ccnet configuration …

    Traceback (most recent call last):
    File „setup-seafile-mysql.py“, line 1254, in
    main()
    File „setup-seafile-mysql.py“, line 1205, in main
    ccnet_config.generate()
    File „setup-seafile-mysql.py“, line 748, in generate
    if Utils.run_argv(argv, env=env_mgr.get_binary_env()) != 0:
    File „setup-seafile-mysql.py“, line 82, in run_argv
    env=env)
    File „/usr/lib/python2.7/subprocess.py“, line 679, in __init__
    errread, errwrite)
    File „/usr/lib/python2.7/subprocess.py“, line 1259, in _execute_child
    raise child_exception
    OSError: [Errno 8] Exec format error
    ——————-

    Ich hab’s mehrfach probiert, die Datenbanken sind auch angelegt worden und auch der gewünschte User wurde eingefügt in mysql. Aber ansonsten scheint nichts fertig geworden zu sein. Die versprochene Abschluss-Meldung kommt jedenfalls nicht.
    Hast Du da noch einen Tipp, was ich falsch gemacht haben könnte?

    1. André P. Autor

      Hi Holger,
      schnelle Antwort vom Smartphone aus: Du wirst wohl auf einem 32bit-System ausversehen die 64bit Version heruntergeladen haben. Oder vice versa. :)
      Mit der richtigen Version sollte alles klappen!
      Danke auch für dein Feedback, hoffentlich habe ich bald wieder mehr Zeit für ein paar Artikel. Ideen sind da, nur keine Zeit.

      Schönen Abend!
      André

      1. Holger

        … wow,
        mit einer so schnellen Antwort hatte ich nicht gerechnet :-)
        Dein Hinweis bringt mich eine Spur weiter: der debian-wheezy-Server, auf dem ich das installieren will, ist eine umgebaute Neo X5-Box mit einem arm-chip. Und beim Zusammensuchen der passenden Downloads ging es auch ein bisschen durcheinander: über apt-get funktionierte es nicht, weil wahrscheinlich irgendwelche Namen in definierten Abhängigkeiten bei meinem ‚Exoten‘ nicht korrekt gepflegt waren. Ich bin dann über den Browser mit ftp an die entsprechende ‚Zapfstelle‘ gegangen und habe das entsprechende Archiv zu Fuß runtergeladen.
        Dabei ist dann wahrscheinlich was schief gegangen.
        Werde an der Stelle dann nochmal weiter probieren. Vielen Dank erstmal für den Tipp. Ich sag wieder Bescheid, wenn ich weiter komme. Oder eben auch, wenn ich es nicht alleine hinkriege.
        Aber heute ist ja erstmal WM-Eröffnung, da werde ich dann heute nicht mehr weit kommen.

        Gruß,
        Holger

        1. André P. Autor

          Ich versuche so schnell ich kann zu helfen. :)
          Aaaalso, ARM. Das ist natürlich wieder was anderes. :) Du wirst nicht drum herum kommen, Seafile „from source“ zu bauen, dazu haben die Entwickler eine Anleitung online: https://github.com/haiwen/seafile/wiki/Build-and-deploy-seafile-server-from-source
          Habe ich leider noch nie gemacht und kann dir daher nicht sagen, wo du evtl. Probleme bekommen könntest. In der Regel ist das Wiki aber wirklich gut und ausführlich. Am besten vorher 2-3 mal durchlesen.
          Wenn es Probleme gibt, einfach melden!

          Grüße
          André

          1. Holger

            Bin schon weiter gekommen, habe auf der bitbucket.org-Seite ein Archiv für den raspi entdeckt und dieses einfach versucht. Das ist ja praktisch der klelne Bruder. Und das hat auf Anhieb funktioniert.
            Meine ursprünglichen Probleme bestanden zuerst darin, die python-pakete zu bekommen, dabei gab es die geschilderten Probleme mit den abhängigen Paketen.
            Das Problem mit dem seafile-Paket war, dass ich das ‚wget‘ nicht ausführen konnte. Deshalb hab ich das Archiv auch separat geholt und an entsprechender Stelle ausgepackt. Dabei habe ich tatsächlich die x86-64bit-Version genommen! War natürlich Quatsch, genaues Lesen hätte geholfen ;-)

            Mit der Pi-Version bin ich jetzt soweit, dass ich den Server das erste Mal gestartet (und die Admin-Adresse angegeben) habe. Das habe ich allerdings (weil ich ja zwischendurch raus aus dem ssh-Client war und mich später wieder neu angemeldet habe) unter dem root-user getan. Ich hoffe, dass das kein Problem ist.
            Und leider ist mir nicht ganz klar, was ich beim nächsten Schritt tun soll (firewall, 3 Freigaben statt 4).
            Wäre nett, wenn Du mir das nochmal genauer beschreiben könntest.

            Vielen Dank im Voraus und einen netten Gruß

          2. Holger

            Hoffe, Du hast nur viel um die Ohren und Dir ist nicht irgendwas passiert. Man hört ja gar nix mehr von Dir.

            Ich hab mich aber in der Zwischenzeit ein bisschen schlau-gelesen. Mit dem debian-wheezy-System wird auch eine Arbeitshilfe zum Umgang mit den Paketfiltern/iptables installiert, die man zur Konfiguration nutzen kann, nämlich die ‚ufw‘. Auch damit war es noch eine Aufgabe für einen Newbie wie mich. Aber ich hab es mittlerweile geschafft, die Firewall so einzurichten, dass sie arbeitet und mich aber gleichzeitig auch noch mittels ssh auf den kleinen Rechner läßt.
            Werde dann jetzt mal ab der Stelle weiterbasteln, wo die Firewall ins Spiel kam.

            Weitere Grüße, Holger

  18. cle

    Hi,
    ich bin deinem Tutorial exakt gefolgt, leider laufe ich immer in folgenden Fehler:
    2014/05/18 16:25:48 [error] 24497#0: *41 upstream timed out (110: Connection timed out) while reading response header from upstream.

    Hast du einen Tip für mich?

    Wenn das nicht wäre, ist dein Tutorial perfekt ;)

    1. André P. Autor

      Hi,
      bist du sicher, dass die Seafile Dienste laufen? Was gibt es für Infos in den Logs?
      Kannst mich auch mal per Mail anhauen etc., dann könnte ich es mir genauer anschauen.
      Allerdings wäre die Version noch wichtig, da ja nun Version 3 erschienen ist und sich der Artikel auf eine ältere Version bezieht. Bei Zeit werde ich das – auf jeden Fall! – updaten.

      Grüße
      André

    2. André P. Autor

      Hi,
      da es mir keine Ruhe gelassen hat, habe ich den Artikel erneuert. Allerdings gibt es kaum Änderungen.
      Dein Problem liegt auf jeden Fall an Nginx. Hast du außerdem auch die Hosts-Datei angepasst? Das wäre noch sehr wichtig.
      Ansonsten steht mein Angebot natürlich noch… ;)

      Grüße
      André

      1. cle

        Um das Rätsel noch aufzuklären:
        1. Seafile lief nicht – das Skript von dir wollte nicht, zumindest hat es Seafile nicht mit „start-fastcgi“ aufgerufen. Das funzt nun alles.
        2. Ich hatte bei der NGINX/PHP-FPM Konfiguration die falsche .sock Datei angegeben.

        Alles in allem ist dein Tutorial super. Der Fehler sitzt, wie immer, 20cm vor dem Monitor ;-)

  19. TTP

    Bei mir hängt das Startskript wenn ich es ausführe….
    Wenn ich die befehle für seafile.sh und seahub.sh einzeln ausführe läuft es allerdings….
    Was mache ich falsch? Ich musste das Paket sudo noch instalieren. War das richtig?
    Übrigens habe ich im Repository gesehen, dass seit eben die Version 3 in Stable verfügbar ist :)

    1. André P. Autor

      Hi, das mit „sudo“ war natürlich richtig. :)
      Das Starten kann eine Zeit dauern. Einfach mal etwas laufen lassen.
      Ich schreibe gerade eine Anleitung für das Upgrade, ist nicht besonders schwer.

      Grüße

      1. TTP

        Also es läuft bei mir nach deiner Anleitung nur bedingt.

        Wenn ich seahub nicht über fastcgi laufen lasse sondern direkt, dann kann ich auf Files uploaden per Browser und Webdav.

        Lasse ich hingegen das über den nginx und fastcgi laufen, dann bekomme ich immer den Fehler „Fehler: Error: Zugriff verweigert“. Wie kann das sein?

      2. TTP

        Files angucken, downloaden und löschen geht übrigens ohne Probleme. Neu anlegen und gleich beschreiben zum Teil auch, aber nur, wenn diese kleiner als 1KB scheinen.
        Änderungen speichern oder Files in den gleichen Ordner kopieren geht nicht.

        1. TTP

          Habe die seahub_settings.py vergessen anzupassen. Jetzt geht es über das WebUI. Allerdings geht es per WebDAV noch nicht. Mal schauen, was man da editieren muss…..

  20. Ludwig

    @tatoosh11:
    Der Owncloud client ist bei viele files extrem langsam, hatte constant hohe CPU last (am client) nur weil fortlaufend die files auf änderungen controlliert werden.

    Seafile baut seine ganze versionierung auf einem GIT System auf. das heißt änderungen sind nur noch ein „git status“ bzw ein git push zum server. sehr cpu schonend.

    1. André P. Autor

      Vorab: Gerne! ;)

      Seafile verwendet zum einen Verschlüsselung auf Seite des Clients. Das ist für mich schon fast der wichtigste Punkt.
      Du kannst Datei-Versionierung einschalten, womit dann beispielsweise ein Verlauf gespeichert wird. Auch gelöschte Dateien.
      Es gibt eine sehr schöne Web-Oberfläche, auf der mit Bibliotheken gearbeitet wird. Jeder Benutzer hat natürlich erst einmal seine eigene, es können aber übergreifend mehrere Benutzer einer (optional verschlüsselten) Bibliothek zugewiesen werden. Natürlich auch in den Clients!
      Die Dateisynchronisation funktioniert ebenfalls auf Dropbox-Niveau.

      Ich weiß nicht inwiefern das noch aktuell ist, aber OwnCloud hatte die Angewohnheit, den Client unheimlich zu belasten, wenn viele Dateien synchronisiert wurden. Lag wohl an sich überschneidenden Intervallen via inotify.
      Abgesehen davon lese ich ständig von Sicherheitslücken in OwnCloud, die durch eine unbedachte Installation dann auch sehr leicht ausgenutzt werden können.

      So viel von mir dazu, die Unterschiede sind schon etwas weitgehender als nur obige Punkte. Vergessen habe ich vielleicht noch das Verbindungskonzept: https://github.com/haiwen/seafile/wiki/Seafile-server-components-overview

    2. Marc Stürmer

      Owncloud will vieles können und kann am Ende gar nichts gut, gerade die Synchronisierung ist die absolute Katastrophe, sowohl von der Geschwindigkeit her als auch Zuverlässigkeit (man suche mal bei Google nach „owncloud duplicate files“. Owncloud tanzt einfach auf deutlich zu vielen Hochzeiten, die Qualität des Produkts ist sehr durchwachsen und wenn der Dateiordner eine gewisse Größe überschreitet, wird es lahm. Die Kernfunktionalität Synchronisierung, wegen der viele von Dropbox weg wollen, ist bei Owncloud absolut ungenügend umgesetzt.

      Seafile will eines können – Synchronisierung – und kann genau das zuverlässig und richtig flott.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.