Seafile für ein NAS

Seafile für ein NASSeafile 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.


wallpaper-1019588
Ninja to Koroshiya no Futarigurashi: Teaser-Trailer und neue Details enthüllt
wallpaper-1019588
The Dinner Table Detective: Anime-Adaption angekündigt
wallpaper-1019588
HIGHSPEED Étoile – Neues Anime-Projekt in Arbeit
wallpaper-1019588
5 Strategien für einen besseren Schlaf