Diese Anleitung beschreibt, wie die Software Seafile[1. Wikipedia Artikel zu Seafile}] auf einem Ubuntu Server installiert werden kann. Sie gilt prinzipiell auch für Debian. Jedoch müssen einzelne Schritte ggf. angepasst werden.
Hinweis zu Seafile Version 6.2: Bitte beachten Sie bei der Installation von Seafile in Version 6.2 den Kommentar von Christoph weiter unten. Ich Danke Christoph für diesen Hinweis.
Getestete Versionen
Betriebssystem | Ubuntu 14.04 LTS Server |
Webserver | NGINX 1.4.6 |
Datenbankserver | MySQL 5.6 |
Seafile | 5.1.4 64bit |
Einleitung
Seafile ist eine freie Software, um Dateien zentral auf einem eigenen Server zu speichern (Filehosting). Benutzer können auf ihre Daten über eine Webschnittstelle zugreifen oder über Desktop-Clients synchronisieren. Quelle: Wikipedia {de}
Seafile[2. Seafile Homepage {en}] bildet damit einen Teil des Funktionsumfangs bekannter Open Source Projekte wie ownCloud und Nextcloud ab, konzentriert sich dabei jedoch auf die „Sync+Share“-Funktion für Dateien. Jan Karres hat in seinem Blog einen schönen Artikel über den Vergleich ownCloud vs Seafile geschrieben, welcher die Eigenschaften sowie die Vor- und Nachteile beider Projekte erläutert.
Bei dem hier vorliegenden Anwendungsfall habe ich mich für Seafile entschieden, da die einzige Anforderung im Sync+Share von Dateien besteht. Seafile bietet im Gegensatz zu ownCloud auf diesem Gebiet auch clientseitige Verschlüsselung[3. How to Use Encrypted Libraries] an. Die zukünftigen Anwender sind im Umgang bereits geübt und die Sync-Clients bereits auf den meisten ihrer Endgeräte installiert.
Um dieser Anleitung folgen zu können, werden grundlegende Kenntnisse in der Administration eines Linuxservers vorausgesetzt.
Anleitung
Die folgende Anleitung wurde auf Basis der Artikel von Jan Karres[4. Raspberry Pi: Owncloud-Alternative Seafile Server installieren] und André P.[5. Seafile 4.0.x mit Nginx und MySQL-Backend auf Debian/Ubuntu] erstellt.
Voraussetzungen
Folgende Dienste müssen auf dem Server installiert und funktionsfähig sein, um Seafile installieren zu können:
- NGINX Server in Grundkonfiguration[6. nginx auf ubuntuusers.de]
- MySQL Datenbank[7. MySQL auf ubuntuusers.de]
- Erreichbarkeit unter der Domain „seafile.domain.tld“
- Optional: TLS-Zertifikat für die Domain „seafile.domain.tld“[8. Kapitel 3, TLS-Kochbuch mit Rezepten zur Verwendung von OpenSSL, HTTP Strict Transport Security (HSTS) und HTTP Public Key Pinning (HPKP)]
Als Servername wird im Folgenden stets seafile verwendet. Dieser ist an den gewünschten Servernamen der eigenen Installation anzupassen.
Installation und Konfiguration
Zuerst werden die von Seafile benötigten Abhängigkeiten installiert:
sudo apt-get install python2.7 python-setuptools python-simplejson python-imaging python-mysqldb
Im zweiten Schritt wird ein Systembenutzer[9. Der Unterschied zwischen einem Systembenutzer und einem normalen Benutzer] erstellt, dessen Home-Verzeichnis die gesamte Seafile-Installation aufnehmen wird. Der Benutzername kann dabei frei gewählt werden.
sudo adduser --system --group BENUTZERNAME
Mit den folgenden Befehlen wird der Benutzer gewechselt, die benötigte Verzeichnisstruktur erstellt, die Software heruntergeladen und entpackt.
# Wechselt zum erstellten Systembenutzer für die Seafile-Installation sudo su - BENUTZERNAME -s /bin/bash # Erstellen der Verzeichnisstruktur mkdir -p seafile/installed && cd seafile/installed wget wget https://download.seafile.de/seafile-server_latest_x86-64.tar.gz # Archiv in das Zielverzeichnis entpacken und zurück ins Home-Verzeichnis wechseln tar -xzvf *tar.gz -C ../ && cd ..
Im Home-Verzeichnis sollte die Verzeichnisstruktur nun wie folgt aussehen:
seafile@rs212997:/home/seafile/seafilesrv$ tree -L 2 . ├── installed │ └── seafile-server_latest_x86-64.tar.gz └── seafile-server-5.1.3 ├── check_init_admin.py ├── reset-admin.sh ├── runtime ├── seaf-fsck.sh ├── seaf-fuse.sh ├── seaf-gc.sh ├── seafile ├── seafile.sh ├── seahub ├── seahub.sh ├── setup-seafile-mysql.py ├── setup-seafile-mysql.sh ├── setup-seafile.sh └── upgrade 6 directories, 11 files
Nun wechselt man in das Verzeichnis mit der Software (in diesem Fall seafile-server-5.1.3) und führt das Skript setup-seafile-mysql.sh
aus. Die Antworten auf die Fragen sind selbstverständlich an die eigene Umgebung anzupassen.
./setup-seafile-mysql.sh Checking python on this machine ... Checking python module: setuptools ... Done. Checking python module: python-imaging ... Done. Checking python module: python-mysqldb ... Done. ----------------------------------------------------------------- This script will guide you to setup your seafile server using MySQL. Make sure you have read seafile server manual at https://github.com/haiwen/seafile/wiki Press ENTER to continue ----------------------------------------------------------------- What is the name of the server? It will be displayed on the client. 3 - 15 letters or digits [ server name ] seafile What is the ip or domain of the server? For example: www.mycompany.com, 192.168.1.101 [ This server's ip or domain ] seafile.domain.tld Where do you want to put your seafile data? Please use a volume with enough free space [ default "/home/BENUTZERNAME/seafilesrv/seafile-data" ] Which port do you want to use for the seafile fileserver? [ default "8082" ] ------------------------------------------------------- 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" ] What is the port of mysql server? [ default "3306" ] What is the password of the mysql root user? [ root password ] verifying password of user root ... done Enter the name for mysql user of seafile. It would be created if not exists. [ default "root" ] seafile_user Enter the password for mysql user "seafile_user": [ password for seafile_user ] Enter the database name for ccnet-server: [ default "ccnet-db" ] my-ccnet-db Enter the database name for seafile-server: [ default "seafile-db" ] my-seafile-db Enter the database name for seahub: [ default "seahub-db" ] my-seahub-db --------------------------------- This is your configuration --------------------------------- server name: seafile server ip/domain: seafile.domain.tld seafile data dir: /home/BENUTZERNAME/seafilesrv/seafile-data fileserver port: 8082 database: create new ccnet database: my-ccnet-db seafile database: my-seafile-db seahub database: my-seahub-db database user: seafile_user --------------------------------- Press ENTER to continue, or Ctrl-C to abort --------------------------------- Generating ccnet configuration ... done Successly create configuration dir /home/BENUTZERNAME/seafilesrv/ccnet. Generating seafile configuration ... Done. done Generating seahub configuration ... ---------------------------------------- Now creating seahub database tables ... ---------------------------------------- creating seafile-server-latest symbolic link ... done ----------------------------------------------------------------- Your seafile server configuration has been finished successfully. ----------------------------------------------------------------- run seafile server: ./seafile.sh { start | stop | restart } run seahub server: ./seahub.sh { start | stop | restart } ----------------------------------------------------------------- If you are behind a firewall, remember to allow input/output of these tcp ports: ----------------------------------------------------------------- port of seafile fileserver: 8082 port of seahub: 8000 When problems occur, Refer to https://github.com/haiwen/seafile/wiki for information.
Möchte man Seafile via HTTPS nutzen, sind noch zwei Dateien anzupassen. Zuerst wird in die Datei ~/seafilesrv/conf/ccnet.conf der Parameter SERVICE_URL wie folgt angepasst:
SERVICE_URL = https://seafile.domain.tld:8000
Die zweite zu bearbeitende Datei ist seahub_settings.py. Hier wird am Ende der Datei die folgende Zeile eingefügt:
FILE_SERVER_ROOT = 'https://seafile.domain.tld/seafhttp'
Durch manuelles Starten der Dienste wird der Administrator-Account erstellt. Das folgende Listing zeigt die auszuführenden Befehle und Abfragen:
:~$ ~/seafilesrv/seafile-server-latest/seafile.sh start [09/02/16 21:56:00] ../common/session.c(132): using config file /home/BENUTZERNAME/seafilesrv/conf/ccnet.conf Starting seafile server, please wait ... Seafile server started Done. :~$ ~/seafilesrv/seafile-server-latest/seahub.sh start-fastcgi LC_ALL is not set in ENV, set to en_US.UTF-8 Starting seahub (fastcgi) at 127.0.0.1:8000 ... ---------------------------------------- It's the first time you start the seafile server. Now let's create the admin account ---------------------------------------- What is the email for the admin account? [ admin email ] EURE E-MAIL-ADRESSE What is the password for the admin account? [ admin password ] SICHERESPASSWORThttp://start.ubuntu.com/16.04/Google/?sourceid=hphttp://start.ubuntu.com/16.04/Google/?sourceid=hp Enter the password again: [ admin password again ] SICHERESPASSWORT ---------------------------------------- Successfully created seafile admin ---------------------------------------- Seahub is started Done.
Zum Abschluss werden die manuell gestarteten Dienste wieder beendet:
:~$ ~/seafilesrv/seafile-server-latest/seafile.sh stop :~$ ~/seafilesrv/seafile-server-latest/seahub.sh stop
Um sicherzustellen, dass der lokale Seafile-Webdienst nicht aus dem Internet erreichbar ist, sollte folgender Block in der Datei ~/seafilesrv/conf/seafile.conf vorhanden sein:
[fileserver] host=127.0.0.1 port=8082
An dieser Stelle wird die aktuelle Shell mit exit
verlassen. Von nun an kann mit sudo
oder als root
weitergearbeitet werden.
Konfiguration von NGINX
Für NGINX wird ein neuer VirtualHost für die Domain seafile.domain.tld erstellt. Wird die Konfiguration aus folgendem Listing übernommen, so sind mindestens die Werte für den root-Pfad, server_name, ssl_certificate und ssl_certificate_key an die eigene Konfiguration anzupassen.
server { listen 80; server_name seafile.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 seafile.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 /home/BENUTZERNAME/seafilesrv/seafile-server-latest/seahub; } }
Mit der oben stehenden Konfiguration erfolgt automatisch eine Weiterleitung von HTTP auf HTTPS. Wer für die Beantragung und Implementierung des Zertifikats Anleitung benötigt oder die Installation zusätzlich noch mit HSTS und HPKP schützen möchte, sei auf mein TLS-Kochbuch[10. Kapitel 4, TLS-Kochbuch mit Rezepten zur Verwendung von OpenSSL, HTTP Strict Transport Security (HSTS) und HTTP Public Key Pinning (HPKP)] verwiesen.
Konfiguration des Seafile-Dienstes
Zur Konfiguration des Dienstes bediene ich mich der Arbeit aus dem Artikel von André P. Dazu wird die Datei /etc/init.d/seafile mit folgendem Inhalt erstellt. Die Parameter user und seafile_dir sind dabei an die eigene Installation anzupassen.
#!/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
Mit den folgenden Kommandos wird das Skript ausführbar gemacht, installiert und der Dienst gestartet:
chmod +x /etc/init.d/seafile update-rc.d seafile defaults service seafile start
Ende
Die Installation ist damit abgeschlossen. Die Seafile-Installation kann nun über https://seafile.domain.tld
aufgerufen und genutzt werden.
An dieser Stelle möchte ich mich noch einmal bei André P. für seinen Artikel „Seafile 4.0.x mit Nginx und MySQL-Backend auf Debian/Ubuntu bedanken. Er stellt die Basis für diese Anleitung mit der aktuellen Version von Seafile dar.
Solltet ihr Seafile mit dieser Anleitung auch unter anderen Versionen von Ubuntu/Debian, etc. installieren können, freue ich mich über eure Kommentare, um die Tabelle mit den getesteten Versionen ergänzen zu können.
Guten Abend!
Hast du bereits Erfahrungen mit Owncloud gemacht?
Ich persönlich bin von Seafile zu Owncloud gewechselt und letzteres synct einfach zu langsam, meine alte Seafile Installation war deutlich schneller (Banana Pi+HDD).
Hallo,
ich betreibe parallel eine ownCloud. Jedoch nutze ich diese nicht primär zur Dateisynchronisation, sondern eher die Funktionen Kalender, Adressbuch, Notizen und Aufgaben.
Mir wurde jedoch schon von anderer Seite zugetragen, dass Seafile bei der Synchronisation deutlich schneller als ownCloud sein soll. Jedoch kann ich keine eigenen Erfahrungen diesbezüglich vorweisen.
Viele Grüße
Ich bin von Nextcloud auf Baikal und Seafile gewechselt. Nachdem ich schon von Owncloud weg gegangen bin weil es nur Probleme gab und mit Nextcloud auch keine so guten Erfahrungen gemacht habe, bin ich jetzt bei den 2 schlanken Paketen gelandet. Man hat dann zwar nicht mehr alles aus einer Hand aber dieser Molloch von Nextcloud ist schon arg schwerfällig.
Bei mir ists anders rum. Ich bin von Owncloud/Nextcloud zu Seafile und Baikal (Cal- und Carddav) gewechselt. Gab irgendwie immer nur Probleme vorher. Ganz zu schweigen davon, dass Nextcloud 10 lagged was das Zeug hält. Eine Lösung ist allgemein dafür noch nicht gefunden.
Für die Konfiguration eines Backups habe ich mit von dem Artikel „Seafile Backup per Skript“ inspirieren lassen.
Pingback: Protokoll zum Ausfall eines Webdienstes nach der fehlgeschlagenen Erneuerung eines Let’s Encrypt Zertifikats | My-IT-Brain
Moin moin.
Du hast einmal einen Fehler bei:
Zum Abschluss werden die manuell gestarteten Dienste wieder beendet:
:~$ ~/seafilesrv/seafile-server-latest/seafile.sh start
:~$ ~/seafilesrv/seafile-server-latest/seahub.sh start-fastcgi
es muss aber
:~$ ~/seafilesrv/seafile-server-latest/seafile.sh stop
:~$ ~/seafilesrv/seafile-server-latest/seahub.sh stop
heissen.
Desweiteren muss du noch analog zum user seafile eine Gruppe gleichen Namens anlegen und den User dann hinzufügen:
sudo usermod -a -G seafile seafile
Bei mir gab es sonst beim Ausführen des init.d Scripts den Fehler, dass „seafile:seafile“ nicht gefunden werden konnte. Starten ging zwar aber das Stoppen nicht.
Ich habe gerade festgestellt, dass in der nginx.conf noch folgende Zeile fehlt:
fastcgi_param REMOTE_ADDR $remote_addr;
Ansonsten wird die IP nicht mitgeloggt und (in meinem Fall) funktioniert fail2ban dann nicht.
Hallo Sascha,
danke, dass du mich auf die Fehler aufmerksam gemacht hast. Daran war wohl Copy&Paste schuld.
Ich habe dies auch oben im Artikel korrigiert.
MfG
Jörg
Eine Frage habe auch ich…aber erstmal danke für den tollen Beitrag Jörg.
Ich will eigentlich nur eine minimale Installation des Servers als VirtualBox VM aufsetzen und mittels smb, cifs oder so die VM mit dem Host verbinden und dort die Dateien an sich speichern.
Nun ist die Frage, wie groß die VM sein muss und wie eine schlaue Partitionierung aussehen sollte. Sprich, wo liegen die Speicherfresser…
Freue mich über eine Antwort…Theo
Hallo Theo,
schön, dass dir mein Beitrag gefällt. Bezüglich deines geplanten Setups kann ich fürchte ich keine konkrete Empfehlung aussprechen, da mir damit die Erfahrung fehlt.
So weiß ich bspw. nicht, ob die Datenablage in smb/cifs-Freigaben überhaupt unterstützt wird. Hier musst du dich fürchte ich selbst durch die offizielle Dokumentation kämpfen. Auch kann ich nicht wirklich etwas zur Leistung der VirtualBox Shared Folders sagen. Ich bin hier etwas skeptisch, ob die Nutzung von Seafile in einem solchen Setup Spaß macht.
Meine Antwort ist dir vermutlich keine Hilfe. Aber dir wäre auch nicht geholfen, wenn ich wild ins blaue rate. Falls du dich an einem Setup versuchst, würde ich mich über einen Erfahrungsbericht freuen.
Liebe Grüße
Jörg
Hallo zusammen,
ein kleiner aber wichtiger Hinweis zu dieser Installationsanleitung. Die hier beschriebene Methode mit fastcgi wird in einem der nächsten Versionen von Seafile nicht mehr unterstützt werden.
In der offiziellen Roadmap zu Version 6.2 (https://www.seafile.com/en/roadmap/) heißt es: „Use WSGI as the default mode for deploying Seahub. The FastCGI mode will be deprecated.“
Die Umstellung ist denkbar einfach und wird hier beschrieben: https://manual.seafile.com/deploy/deploy_with_nginx.html.
Anstelle der fastcgi_… Konfiguration in nginx verwendet man zukünftig proxy_pass…
Gruß
Christoph von datamate.
Hallo Christoph,
hab vielen Dank für deinen Hinweis. Ich habe diesen oben im Artikel mit eingebaut und auf deinen Kommentar verwiesen.
Viele Grüße
Jörg