Seafile ist ein Server, der Daten eines NAS mit einem Client synchronisiert. Er ist dabei vergleichbar mit Dropbox oder Owncloud. Im Gegensatz zu Dropbox liegen die Daten allerdings auf dem heimischen NAS und können sogar richtig verschlüsselt werden. Und im Gegensatz zu Owncloud läuft Seafile ziemlich stabil. Ich habe Owncloud oft auf verschiedenen Systemen ausprobiert und es kam immer wieder zu Problemen, so dass ich es aktuell nicht mehr einsetzen möchte. Vielleicht ändert sich das mit einer neuen Version irgendwann, aktuell bevorzuge ich jedoch Seafile.
Die Installation von Seafile ist im Vergleich zu Owncloud allerdings ziemlich aufwändig. Dennoch lohnt sich meiner Meinung nach der Aufwand, weil das System am Schluss wirklich stabil funktioniert.
An dieser Stelle zeige ich die Installation von Seafile Server 4.2.3 auf einem Ubuntu 14.04 Server ( Dell Poweredge T20) und einem Bananian ( Banana Pi). Als Datenbank wird SQLite verwendet. Damit eignet sich dieses Tutorial nicht für die Nutzung mit vielen Nutzern oder zur Installation auf Netzwerklaufwerken. In einen solchen Fall muss für Seafile eine MySQL verwendet werden. Die Kommunikation mit dem Seafile-Server erfolgt am Schluss ausschließlich verschlüsselt über HTTPS / TLS - auch die Dateisynchronisation wird über TLS laufen.
Voraussetzungen
Ich gehe hier davon aus, dass ein Apache mit Unterstützung von SSL/TLS bereits installiert und konfiguriert wurde und läuft. Der Apache benötigt die laufenden Module ssl, proxy, proxy_http, rewrite, fastcgi
. Diese können wie folgt aktiviert werden:
a2enmod ssl a2enmod proxy a2enmod proxy_http a2enmod rewrite a2enmod fastcgi
Sollte eines der Pakete nicht zur Verfügung stehen, muss es über die Paketverwaltung nachinstalliert werden. Dabei wird es auf einem Bananian (und einem Raspbian eines Raspberry Pi) zu Problemen kommen, weil das Paket libapache2-mod-fastcgi nicht zur Verfügung steht. Daher muss man das Paket auf einen Einplatinen-Rechner selbst bauen. Diesen Vorgang beschreibt ein separater Artikel: Kompilieren von libapache2-mod-fastcgi für Banana Pi.
Installation
Bei der Installation arbeite ich wieder direkt als root (Kommando: sudo su
oder einloggen als root
auf dem Bananian). Sollte das sudo-Kommando nicht zur Verfügung stehen, dann kann es installiert werden mit: apt-get install sudo
- als root). Später wechsle ich den Benutzer, aber das ist separat beschrieben.
Benötigte Pakete installieren
apt-get install python2.7 python-setuptools python-simplejson python-imaging sqlite3
Verzeichnis für Seafile-Daten anlegen
Im späteren Verlauf der Installation wird ein Verzeichnis benötigt, in dem Seafile seine Daten ablegen wird. Dieses Verzeichnis lege ich in diesem Schritt schon an. Bei mir ist es das Verzeichnis /mnt/nas/seafile
. Dieses Verzeichnis sollte auf einem Volume liegen, das auf jeden Fall genügend Platz für die spätere Dateisynchronisation bietet:
mkdir /mnt/nas/seafile chmod 777 /mnt/nas/seafile
Nutzer anlegen
Seafile wird unter seinem eigenen Nutzer laufen. Damit sind viele Anforderungen der Nutzerrechte von Anfang an gelöst. Daher wird der Nutzer seafile
angelegt (Zeile 1) - allerdings ohne die Möglichkeit sich am System anzumelden, damit keine Sicherheitsrisiken entstehen. Danach wechseln wir auch direkt in den Nutzer (Zeile 2).
adduser seafile --disabled-login su - seafile
Download und Entpacken
Jetzt als Nutzer seafile
laden wir den Seafile-Server runter und entpacken ihn entsprechend dem vorgeschlagenen Layout des Seafile Handbuchs. Wichtig ist an dieser Stelle das richtige Paket zu finden. Alle aktuellen Pakete finden sich auf der Seite Seafile-Download. In dieser Anleitung mache ich mit dem Paket für den Raspberry Pi weiter, das auch auf dem Banana Pi läuft. Die aktuelle Version dieses besonderen Pakets findet man auf Github. Zum Zeitpunkt der Installation ist es die Version 4.2.3. Solltet ihre eine andere Version runterladen, variieren natürlich auch die Verzeichnis- und Dateinamen entsprechend der Versionsnummer!
mkdir /home/seafile/haiwen cd /home/seafile/haiwen wget https://github.com/haiwen/seafile-rpi/releases/download/v4.2.3/seafile-server_4.2.3_pi.tar.gz tar -xvf seafile-server_4.2.3_pi.tar.gz mkdir installed mv seafile-server_4.2.3_pi.tar.gz installed
Installationsskript starten
Jetzt sind alle heruntergeladenen Dateien an ihrem Platz und wir starten das Installationsskript.
cd seafile-server-4.2.3/ ./setup-seafile.sh
Das Skript führt euch durch die Installation und fragt dabei nach ein paar Informationen. Folgende Infos sollte man bereit haben:
- Den Servernamen
- Die IP oder den Domainnamen
- Den Ort, an dem die Daten von Seafile später gespeichert werden
Nach der Installation sieht euer Verzeichnis /home/seafile/haiwen
ungefähr so aus:
drwxr-xr-x 7 seafile seafile 4096 Jul 18 21:15 . drwxr-xr-x 3 seafile seafile 4096 Jul 18 21:06 .. drwx------ 2 seafile seafile 4096 Jul 18 21:15 ccnet drwx------ 2 seafile seafile 4096 Jul 18 21:15 conf drwxr-xr-x 2 seafile seafile 4096 Jul 18 21:08 installed drwxr-xr-x 6 seafile seafile 4096 Jul 3 22:18 seafile-server-4.2.3 lrwxrwxrwx 1 seafile seafile 20 Jul 18 21:15 seafile-server-latest -> seafile-server-4.2.3 drwxr-xr-x 3 seafile seafile 4096 Jul 18 21:15 seahub-data -rw-r--r-- 1 seafile seafile 134144 Jul 18 21:15 seahub.db -rw------- 1 seafile seafile 66 Jul 18 21:15 seahub_settings.py
Erster Test
Für einen ersten Test kann man Seafile jetzt schon starten:
cd /home/seafile/haiwen/seafile-server-latest ./seafile.sh start ./seahub.sh start
Beim ersten Start von seahub.sh
fragt das Skript nach dem Admin-Account des Seafile-Servers. Hier werden dann die E-Mailadresse und das Passwort des Administrators festgelegt.
An dieser Stelle ist Seafile bereits voll funktionsfähig und man kann per http://IP_ADRESSE_DES_SERVERS:8000 darauf zugreifen. Jetzt geht es jedoch an das Absichern des Servers.
Der Seafile-Server läuft bis zu diesem Schritt unverschlüsselt. Jetzt geht es daran, den Server über HTTPS hinter einem Apache zu sichern. Ich gehe davon aus, dass nach wie vor eine offene Konsole bereitsteht und wir als Nutzer seafile
arbeiten. Als solcher müssen zwei Konfigurationsdateien geändert werden:
Ändern der Datei /home/seafile/haiwen/ccnet/ccnet.conf
:
SERVICE_URL = https://IP_ODER_DOMAIN_EURES_SERVERS
Die Service URL wird auf https und die IP-Adresse oder den Domänennamen eures Server geändert.
seahub_settings.py
Ändern der Datei /home/seafile/haiwen/seahub_settings.py
:
SECRET_KEY = "GEHEIMER_BUCHSTABENSALAT" FILE_SERVER_ROOT = 'https://IP_ODER_DOMAIN_EURES_SERVERS/seafhttp'
Hier wird FILE_SERVER_ROOT
in der Zeile unter SECRET_KEY
(die unverändert bleibt), eingefügt. Achtet auch hier auf das https und den Pfad hinten ( seafhttp).
Neustart des Seafile Servers
Danach kann der Seafile Server neu gestartet werden, wobei direkt das fastcgi-Modul verwendet wird, das den Server mit dem Apache verbindet.
cd /home/seafile/haiwen/seafile-server-latest ./seafile.sh stop ./seahub.sh stop ./seafile.sh start ./seahub.sh start-fastcgi
Ohne den Apache zu konfigurieren, sieht man jetzt allerdings nicht viel. Daher wird im nächsten Schritt der Apache richtig konfiguriert.
Apache konfigurieren
Wie ich eingangs schon schrieb, gehe ich davon aus, dass ein Apache HTTP Server bereits am Laufen ist und dieser auch SSL/TLS-Unterstützung hat. Falls nicht, bitte diesem Tutorial folgen: Installation des Apache mit SSL/TLS. Weiterhin nehme ich an, dass die oben genannten Voraussetzungen erfüllt und die entsprechenden Apache-Module geladen sind. Die Apache-Konfiguration, die ich anpasse, ist die /etc/apache2/sites-available/default-ssl
. Diese Konfiguration sollte im Apache bereits aktiviert sein. Falls nicht: a2ensite default-ssl
(als root).
Die Konfiguration des Apache muss mit dem Nutzer root
erfolgen. Falls ihr also noch als Nutzer seafile
eingeloggt seid, einfach ein kurzes exit
eingeben.
apache.conf
Die Datei /etc/apache2/apache.conf
wird um folgende Zeile erweitert (ganz zum Schluss einfügen):
FastCGIExternalServer /var/www/seahub.fcgi -host 127.0.0.1:8000
default-ssl
Die Datei /etc/apache2/sites-available/default-ssl sieht am Schluss so aus (Seafile-spezifisches ist hervorgehoben). Die GROSSGESCHRIEBENEN Werte in spitzen Klammern müssen auf das jeweilige System angepasst sein!
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin <ADMIN_EMAIL_ADRESSE> ServerName <IP_ODER_DOMAIN_EURES_SERVERS> DocumentRoot /var/www Alias /media /home/seafile/haiwen/seafile-server-latest/seahub/media <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> RewriteEngine On # # seafile fileserver # ProxyPass /seafhttp http://127.0.0.1:8082 ProxyPassReverse /seafhttp http://127.0.0.1:8082 RewriteRule ^/seafhttp - [QSA,L] # # seahub # RewriteRule ^/(media.*)$ /$1 [QSA,L,PT] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /seahub.fcgi/$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] ErrorLog ${APACHE_LOG_DIR}/error.log <Location /media> Order allow,deny Allow from all </Location> <Location /seafhttp> Order allow,deny Allow from all </Location> # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder On SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA:EECDH:EDH+AESGCM:EDH:ECDH+AESGCM:ECDH+AES:ECDH:HIGH:MEDIUM:!RC4:!3DES:!CAMELLIA:!SEED:!aNULL:!MD5:!eNULL:!LOW:!EXP:!DSS:!PSK:!SRP BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 # MSIE 7 and newer should be able to use keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
Neustart des Apache
Zum Schluss muss der Apache noch neu gestartet werden:
service apache2 restart
Seht ihr an dieser Stelle keine Fehlermeldung, habt ihr alles richtig gemacht. Jetzt erreicht ihr eurer Seafile unter https://IP_ODER_DOMAIN_EURES_SERVERS und könnt euch dort anmelden. Weiter könntet ihr jetzt den Client für eure Rechner runterladen und ihn mit eurem Seafile Server verbinden. Dieses Vorgehen für Windows 7 beschreibt der Artikel Seafile Client für Windows installieren.
Automatisch beim Systemstart hochfahren
Bisher wird der Seafile Server lediglich per Shellskript des Nutzers seafile
hoch- und runtergefahren. Praktisch sind an dieser Stelle jedoch Shellskripts für die Kontrolle des Servers. Das Seafile-Handbuch zeigt, wie man solche Skripts erstellt. Für die hier gezeigten Konfigurationen habe ich diese Skripts angepasst. Alle folgenden Arbeiten müssen wieder als root
durchgeführt werden.
Bananian / Raspbian
In dieser Zip-Datei befindet sich die Datei seafile-server
. Diese muss im Verzeichnis /etc/init.d/
des Bananian / Raspbian abgelegt werden. Danach müssen die Rechte angepasst werden und das Starten aktiviert werden:
cp seafile-server /etc/init.d/ chmod 755 /etc/init.d/seafile-server update-rc.d seafile-server defaults
Ab jetzt startet der Seafile-Server automatisch beim Systemstart. Darüber hinaus kann er auch mit /etc/init.d/seafile-server start
gestartet oder mit /etc/init.d/seafile-server stop
beendet werden.
In dieser Zip-Datei befinden sich die beiden Dateien seafile-server
und seafile-server.conf
. Diese müssen in den entsprechenden Verzeichnisse des Ubuntu-Systems abgelegt werden:
cp seafile-server /etc/init.d/ cp seafile-server.conf /etc/init/ chmod 755 /etc/init.d/seafile-server chmod 644 /etc/init/seafile-server.conf
Ab jetzt startet der Seafile-Server automatisch beim Systemstart. Darüber hinaus kann er auch mit /etc/init.d/seafile-server start
gestartet oder mit /etc/init.d/seafile-server stop
beendet werden.