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):
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.
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 ] servernameWhat 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 KonfigurationWhat is the port of mysql server?
[ default „3306“ ] je nach KonfigurationWhat is the password of the mysql root user?
[ root password ] je nach Konfigurationverifying 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'
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.tldWhat is the password for the admin account?
[ admin password ] sicherespasswortEnter 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!
Pingback: Intressante seite – CGNKev.de
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!
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.
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.
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
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é
Hallo,
es gibt bereits ein Script von Seafile selbst, welches Nginx, MariaDB, Memcached, SeafDAV und Seafile installiert.
Hier ist alles beschrieben https://lio.p1o3.cc/8ofw2
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
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
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
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.
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é
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?
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
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)?
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.
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?
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
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é
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“
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. :-)
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.
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?
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.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…
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!
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
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.
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
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.
Hi,
ich kann es zwar mangels Installation momentan nicht testen, habe es aber sinngemäß (hoffentlich) eingebaut, danke für den Hinweis!
Beste Grüße
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!
Hi,
vielen Dank! Ich habe den Pfad angepasst, danke für den Hinweis!
Einen schönen Start ins Wochenende!
André
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.
Hi,
danke für den Hinweis! :)
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
Hi Fabian,
zwar etwas verzögert, aber: Danke für deine Hilfe!
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
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
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?
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é
… 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
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é
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ß
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
Pingback: Seafile Script: Tools in "seafile/bin" ausführen | debinux Admin-Blog
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 ;)
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é
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é
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 ;-)
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 :)
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
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?
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.
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…..
Hallo,
bei deinem Script fehlt beim erstellen des ordner logs der chown seafile:
chown $user:$user ${seafile_dir}/logs
dann läufts auch rund :-)
Hi,
es kaaaann doch nicht sein, dass ich immer irgendwas vergesse…. ;) Vielen Dank! Ist natürlich ergänzt.
Grüße
André
@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.
Danke für den Artikel. Welchen Vorteil siehst du zu OwnCLoud?
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
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.