Aktionen

Raspberry Pi Seafile Server Installieren oder Updaten

Aus znilwiki

Version vom 6. August 2017, 19:51 Uhr von BLinz2 (Diskussion | Beiträge) (Textersetzung - „<comments>“ durch „<comments />“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Nachfolgend eine Anleitung für einen Seafile Server auf dem Raspberry Pi.
Genau genommen installiere ich diesen auf einem Banana Pi mit Raspbian, die Befehle sind aber alle 1:1 identisch.
Es gibt zwar schon mehrere Anleitungen im Internet, zum Beispiel http://jankarres.de/2013/06/raspberry-pi-owncloud-alternative-seafile-server-installieren/ - aber die sind eigentlich alle für ältere Versionen. Ich setzt hier meine eigene Anleitung für Ubuntu auf den Raspberry Pi um.


Ausgangslage

Ich habe an meinem Pi 2 Festplatten gemountet (Anleitung siehe EXT4 Festplatte am Raspberry Pi mounten und formatieren)

/dev/sda1       1,8T    440G  1,3T   26% /media/Toshiba_2TB
/dev/sdb1       1,8T    589G  1,2T   34% /media/WD_Elements_2TB

wobei sdb1 direkt an der SATA-Schnittstelle des Banana Pi hängt.

Die Daten von Seafile sollen nun nicht auf der SD-Karte abgelegt werden sondern auf einer der beiden Festplatten.
Mein Pfad ist deshalb

/media/WD_Elements_2TB/seafile

Ihr müsst den euren dann entsprechend anpassen.
Innerhalb der Anleitung erstellen wir einen Symbolischen Link von /var/lib/seafile auf das Zielverzeichnis. In allen Beschreibungen nutzen wir dann immer diesen Pfad so das Ihr die Scripte und Befehle ansonsten nicht anpassen müsst.



Benötigte Pakete installieren

Folgende Programmpakte sollten Installiert sein:

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




Seafile Benutzer und Verzeichnisse anlegen

Wir erstellen einen Benutzer seafile dessen Home-Verzeichnis gleichzeitig unser Seafile-Installationsordner ist. Den Pfad müsst Ihr ggf. an eure Wünsche oder Verhältnisse anpassen, bei mir ist der ganze freie Speicherplatz unter /home da ich beim Setup des Servers nicht darüber nachgedacht habe und den Vorschlag des Providers angenommen habe

adduser --disabled-login --gecos "Seafile" seafile --home /media/WD_Elements_2TB/seafile

Nun legen wir noch einen symbolischen Link an (Warum steht am Ende dieses Abschnittes):

ln -s /media/WD_Elements_2TB/seafile /var/lib/seafile

Wir wechseln auf diesen eben neu erstellten Benutzer:

su - seafile

und sind dann automatisch im Heimatverzeichnis des Benutzers - also in

/home/seafile/

Wir erstellen nun einen neuen Ordner haiwen und wechseln in diesen:

mkdir haiwen
cd haiwen

Warum haiwen? Und warum der symbolische Link nach /var/lib/seafile? Nun, dann halten wir uns an das vorgschlagene Schema der Seafile-Entwickler - und alle Beispiele und Anleitungen aus dem Internet sollte ohne Änderungen funktionieren. Der Ordner heisst "haiwen" weil Seafile wohl so im Chinesischen genannt wird.

Important.png
Hinweis: Mit su - seafile wechselt Ihr ja zum Benutzer seafile - mit exit landet Ihr wieder in eurer ursprünglichen Sitzung





Seafile herunterladen und installieren

Die Dateien die wir herunterladen müssen wir nur entpacken und sind sofort lauffähig.
Also laden wir die Dateien für den Server herunter und enpacken einfach direkt in das Zielverzeichnis.

wget https://github.com/haiwen/seafile-rpi/releases/download/v4.3.0/seafile-server_4.3.0_pi.tar.gz
tar xzfv seafile-server_4.3.0_pi.tar.gz


Hinterher haben wir einen Ordner "seafile-server-4.x.x" Die heruntergeladene Datei verschieben wir in den Ordner "installed":

mkdir installed
mv seafile-server_* installed

so das wir hinterher die folgende Ordnerstruktur haben:

seafile@bananapi ~/haiwen $ tree -L 2 /var/lib/seafile/haiwen/
/var/lib/seafile/haiwen/
├── installed
│   └── seafile-server_4.3.0_pi.tar.gz
└── seafile-server-4.3.0
    ├── 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

Die Entwickler haben geplant, das die eigentlichen Konfigurationsdateien etc. gleich im "haiwen" Verzeichnis liegen. Dann kann man eine neuere Version daneben installieren und dann Upgraden.



Setup ausführen

Wir arbeiten weiter in der Anmeldung als Benutzer seafile (su - seafle) und führen das Setup von Seafile mit MySQL aus:

cd /home/seafile/haiwen/seafile-server-*
./setup-seafile.sh

Die Dialoge beantwortet Ihr wie folgt:

-----------------------------------------------------------------
This script will guide you to config and setup your seafile server.

Make sure you have read seafile server manual at

        https://github.com/haiwen/seafile/wiki

Note: This script will guide your to setup seafile server using sqlite3,
which may have problems if your disk is on a NFS/CIFS/USB.
In these cases, we sugguest you setup seafile server using MySQL.

Press [ENTER] to continue
-----------------------------------------------------------------

Wir drücken brav auf Enter:

Checking packages needed by seafile ...

Checking python on this machine ...
Find python: python2.7

  Checking python module: setuptools ... Done.
  Checking python module: python-imaging ... Done.
  Checking python module: python-sqlite3 ... Done.

Checking for sqlite3 ...Done. 

Checking Done.


Servername

What would you like to use as the name of this seafile server?
Your seafile users will be able to see the name in their seafile client.
You can use a-z, A-Z, 0-9, _ and -, and the length should be 3 ~ 15
[server name]: BANANAPI

Der Name den Ihr angebt dient nur zur Anzeige im Webbrower / Client, kann also auch ein Fantasiebegriff sein.


IP oder DNS-Name

What is the ip or domain of this server?
For example, www.mycompany.com, or, 192.168.1.101

[This server's ip or domain]: bananapi.znil.local

Der DNS-Name eures Servers oder die IP-Adresse - Ersetzt also das bananapi.znil.local durch eure Adresse!


Speicherort der Seafile-Daten

Where would you like to store your seafile data?
Note: Please use a volume with enough free space.
[default: /media/WD_Elements_2TB/seafile/haiwen/seafile-data ]

Den Pfad wiederum einfach mit Enter bestätigen:


Verwendeter Port Seafile

What tcp port do you want to use for seafile fileserver?
8082 is the recommended port.
[default: 8082 ]

Der Port wird vom Client genutzt und vom seahub

Zusammenfassung

This is your config information:

server name:        BANANAPI
server ip/domain:   bananapi.znil.local
seafile data dir:   /media/WD_Elements_2TB/seafile/haiwen/seafile-data
fileserver port:    8082

If you are OK with the configuration, press [ENTER] to continue.

Mit einem Druck auf Enter geht es los:

Generating ccnet configuration in /media/WD_Elements_2TB/seafile/haiwen/ccnet...

done
Successly create configuration dir /media/WD_Elements_2TB/seafile/haiwen/ccnet.

Generating seafile configuration in /media/WD_Elements_2TB/seafile/haiwen/seafile-data ...

Done.


-----------------------------------------------------------------
Seahub is the web interface for seafile server.
Now let's setup seahub configuration. Press [ENTER] to continue
-----------------------------------------------------------------

Noch einmal Enter

Creating seahub database now, it may take one minute, please wait...

Done.

creating seafile-server-latest symbolic link ... done


-----------------------------------------------------------------
Your seafile server configuration has been completed successfully.
-----------------------------------------------------------------

run seafile server:     ./seafile.sh { start | stop | restart }
run seahub  server:     ./seahub.sh  { start <port> | stop | restart <port> }

-----------------------------------------------------------------
If the server is behind a firewall, remember to open these tcp ports:
-----------------------------------------------------------------

port of seafile fileserver:   8082
port of seahub:               8000

When problems occur, refer to

      https://github.com/haiwen/seafile/wiki

for more information.




Fertige Verzeichnisstruktur:

Nun sollten die Verzeichniss wie folgt aussehen:

tree -d -L 3 /var/lib/seafile/haiwen/

Ausgabe:

/var/lib/seafile/haiwen/
├── ccnet
├── conf
├── installed
├── seafile-data
│   └── library-template
├── seafile-server-4.3.0
│   ├── runtime
│   ├── seafile
│   │   ├── bin
│   │   ├── docs
│   │   └── lib
│   ├── seahub
│   │   ├── fabfile
│   │   ├── locale
│   │   ├── media
│   │   ├── seahub
│   │   ├── sql
│   │   ├── static
│   │   ├── tests
│   │   ├── thirdpart
│   │   └── tools
│   └── upgrade
│       ├── sql
│       └── win32
├── seafile-server-latest -> seafile-server-4.3.0
└── seahub-data

Wir erinnerun uns: oben hatten wir einen symbolischen Link für /var/lib/seafile/haiwen/ auf das echte Verzeichnis angelegt, deshlab können wir auch diesen Pfad nutzen!


Der erste Start ...

Wir starten nun das erste Mal die Seafile-Dienste (immer noch als Benutzer seafile):

/var/lib/seafile/haiwen/seafile-server-latest/seafile.sh start

Ausgabe:

Starting seafile server, please wait ...
Seafile server started

Done.

Und noch das Webinterface:

/var/lib/seafile/haiwen/seafile-server-latest/seahub.sh start

Beim aller ersten Start von seahub.sh fragt er euch nach einem Administrations-Account:

Starting seahub at port 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 ] bananapi@znil.de

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

Enter the password again:
[ admin password again ]



----------------------------------------
Successfully created seafile admin
----------------------------------------

Seahub is started

Done.

Nun könnt Ihr euch an der Seafile-Webseite mit dem eben erstellten Account anmelden!



Anmeldung an Webseite

Habt Ihr alles auf Standard gelassen ist die Webseite unter

http://123.123.123.123:8000
http://eurerDNS-Name:8000

zu erreichen:

Seafile-Ubuntu14.04-ISPConfig-008.png




Seafile beim Systemstart automatisch starten

Als Quelle habe ich mich an diesem Beispiel hier orientiert: https://github.com/haiwen/seafile/wiki/Start-seafile-server-at-system-bootup
Wir arbeiten wieder als root (NICHT als Benutzer seafile):

nano /etc/init.d/seafile-server

und fügen folgendes ein:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          Seafile Server
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Seafile-Daemon at boot time
# Description:       Enable service provided by Seafile.
### END INIT INFO

# Change the value of "user" to your linux user name
user=seafile

# Change the value of "seafile_dir" to your path of seafile installation
seafile_dir=/home/seafile/haiwen
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

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

# Fix Error Message while startup:
# /var/lib/seafile/haiwen/seafile-server-latest/seahub.sh: Zeile 207: Warnung: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): Datei oder Verzeichnis nicht gefunden. 
# Change locale to needed. This fix is only needed on a german / not english installation
export LC_ALL='de_DE.UTF-8'

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)
                sudo -u ${user} ${script_path}/seafile.sh $1 >> ${seafile_init_log}
                sudo -u ${user} ${script_path}/seahub.sh $1 >> ${seahub_init_log}
        ;;
        *)
                echo "Usage: /etc/init.d/seafile {start|stop|restart}"
                exit 1
        ;;
esac

Nun machen wir die Datei noch ausführbar:

chmod 755 /etc/init.d/seafile-server

Nun noch ein

update-rc.d seafile-server defaults

und der Seafile-Server startet beim Hochfahren - und wird beim Herunterfahren ebenfalls beendet.
Der Dienst lässt sich in Zukunft auch per

service seafile-server start
service seafile-server stop
service seafile-server restart

steuern.



Server mit SSL / HTTPS über Apache absichern

Auf meinem Raspberry Pi / Banana Pi ist als Webserver der Apache 2 installiert.
Ja, es gibt schlankere Webserver ... aber ich setzte den Apache auch auf allen meinen anderen Servern ein und habe wirklich keine Lust nur für diesen Einsatzzweck einen anderen Weg zu beschreiten.
Und der Banana Pi hat genug Dampf dafür, der Raspberry Pi 2 auch.


Schritt 1: Umbau auf http Port 80

So, zunächst biegen wir den Zugriff von Port 8000 auf Port 80 um - man kann den Seafile-Server dann also unter seiner Subdomain oder Domain erreichen ohne den Port angeben zu müssen - allerdings noch per http ohne Verschlüsselung. Wenn das funktioniert können wir im Anschluss auf https umbauen.
Das würde zwar auch mit dem Seafile-Server allein funktionieren (also ohne Apache dazwischen) aber der Umbau auf https ginge dann nicht eben nicht mehr.
Als Vorlage habe ich mich an dieser Anleitung orientiert: http://manual.seafile.com/deploy/deploy_http_sync.html

Zunächst installieren wir die noch benötigten Komponenten nach:

apt-get install python-flup debhelper dpatch libtool cdbs libapr1-dev apache2-threaded-dev
cd /usr/src
apt-get -b source libapache-mod-fastcgi
dpkg -i libapache2-mod-fastcgi*.deb
service apache2 restart

Die Anleitung wie man die FastCGI Unterstützung installiert habe ich von hier: https://raspberry-hosting.com/en/faq/how-install-apache2-php-fpm-raspberry-pi
Dann Konfigurieren wir Apache für die Verwendung von FastCGI, dem ReWrite und dem Proxy Modul (SSL ist schon mal für den nächsten Abschnitt mit drin):

a2enmod rewrite
a2enmod fastcgi
a2enmod proxy_http
a2enmod ssl

und dann müssen wir den Apache Webserver einmal neu starten:

service apache2 restart


Als nächstes bearbeiten wir die apache2.conf:

nano /etc/apache2/apache2.conf

und gehen ganz ans Ende. Dort fügen wir folgende Zeile ein:

FastCGIExternalServer /var/www/seahub.fcgi -host 127.0.0.1:8000

Die Datei /var/www/seahub.fcgi wird und muss es nicht wirklich geben und ist nur ein Platzhalter - es kommt auf den lokalen Port 8000 dahinter an.


Jetzt Ändern wir die Konfigurationsdatei des Apache - in diesem Szenario gibt es keine Subdomains und nur eine Datei für die Konfiguration der Websites.

nano /etc/apache2/sites-enabled/000-default

Löscht den GANZEN Inhalt und fügt statt dessen folgendes ein:

<VirtualHost *:80>
  ServerName bananapi.znil.org
  DocumentRoot /var/www
  Alias /media /var/lib/seafile/haiwen/seafile-server-latest/seahub/media
  RewriteEngine On
  #
  # seafile httpserver
  #
  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}]
</VirtualHost>


Dann ändern wir die

nano /var/lib/seafile/haiwen/ccnet/ccnet.conf

und entfernen bei

SERVICE_URL = http://bananapi.znil.local:8000

die :8000 am Ende:

SERVICE_URL = http://bananapi.znil.local


Als nächsten die

nano /var/lib/seafile/haiwen/seahub_settings.py

Dort hängen wir als letzte Zeile diese hier an:

FILE_SERVER_ROOT = 'http://bananapi.znil.local/seafhttp'



Nun müssen wir noch das Startscript des Seafile-Servers anpassen:

nano /etc/init.d/seafile-server

Findet die Zeilen

# Change the value of fastcgi to true if fastcgi is to be used
fastcgi=false

und ändert diese um auf

# Change the value of fastcgi to true if fastcgi is to be used
fastcgi=true



Jetzt haben wir alles und müssen nur noch die Dienste neu starten:

service apache2 restart
service seafile-server restart


JETZT solltet Ihr euren Seafile-Server unter

http://subdomain.domain.suffix
http://IP-Adresse

erreichen können.
Und zwar könnt Ihr eueren Server jetzt nur noch über diese Adresse erreichen - der Zugriff über Port 8000 funktioniert nicht mehr.



Schritt 2: Umbau von http auf https

So, wenn der Zugriff über http:// läuft ist das Schlimmste geschafft - wo in welche Datei alles muss damit es auch unter ISPConfig noch funktioniert - da habe ich eine Weile probieren müssen.

Zertifikat erstellen

Wir bauen uns hier nun ein selbstsigniertes Zertifikat. Wenn Ihr ein richtiges habt dann legt es einfach an entsprechender Stelle ab.
Wir wechseln ins Seafile Verzeichnis und legen einen neuen Ordner an:

cd /var/lib/seafile/haiwen/
mkdir certificates
cd certificates/

Dann erstellen wir mit openssl den Schlüssel und das Zertifikat:

openssl genrsa -out privkey.pem 2048
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 3650

Er stellt euch nach dem 2. Befehl ein paar Fragen, wichtig ist aber nur die Antwort auf die folgende:

Common Name (e.g. server FQDN or YOUR name) []:bananapi.znil.local

Hier müsst ihr unbedingt den Domänennamen angeben wie Ihr diesen auch im Webbrowser eintippt!
Falls Ihr den Server über DynDNS erreichbar machen wollt, so müsst Ihr hier die DynDNS-Adresse nehmen.

Nun müsstest Ihr 2 Dateien haben im Ordner certificates:

/var/lib/seafile/haiwen/certificates/
├── cacert.pem
└── privkey.pem



Apache konfiguration anpassen

Zunächst muss - wen noch nicht geschehen - die SSL Unterstützung in Apache aktiviert werden:

a2enmod ssl

Dann bearbeiten wir noch mal die Datei

nano /etc/apache2/sites-available/default

und ändern den unteren Abschnitt wie folgt (Fett ist neu/geändert)

<VirtualHost *:443>
  ServerName bananpi.znil.local
  DocumentRoot /var/www
  Alias /media  /home/seafile/haiwen/seafile-server-latest/seahub/media

  SSLEngine On
  SSLCertificateFile /var/lib/seafile/haiwen/certificates/cacert.pem
  SSLCertificateKeyFile /var/lib/seafile/haiwen/certificates/privkey.pem

  RewriteEngine On

  #
  # seafile httpserver
  #
  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}]
</VirtualHost>

Seafile Konfiguration anpassen

Jetzt muss Seafile selbst noch wissen das wir https:// nutzen:

 nano /var/lib/seafile/haiwen/ccnet/ccnet.conf

und dort die Zeile

SERVICE_URL = http://bananapi.znil.local

auf

SERVICE_URL = https://bananapi.znil.local

ändern.
Und noch in der

nano /var/lib/seafile/haiwen/seahub_settings.py

die Zeile

HTTP_SERVER_ROOT = 'http://bananapi.znil.local/seafhttp'

in

HTTP_SERVER_ROOT = 'https://bananapi.znil.local/seafhttp'

ändern.

Wieder alle Dienste neu starten:

service apache2 restart
service seafile-server restart

und nun erreichen wir Seafile unter

https://subdomain.domain.suffix
https://IP-Adresse

Bei einem selbst erstellten Zertifikat bekommt Ihr nun eine Sicherheitswarnung (ich habe es bei mir in die Vertrauenswürdigen Stammzertifizierungsstellen importiert, dann ist Ruhe)



Nachtrag

Mal nur als Hinweis: Wenn Ihr nur den Seafile-Client verwendet und nicht die Webseite, braucht der seahub Dienst auch gar nicht erst gestartet werden.

Wenn Ihr das Design der Seafile-Webseite anpassen wollt so findet Ihr hier Tipps dafür:

https://github.com/haiwen/seafile/wiki/Seahub-customization


Die Konfiguration lässt sich noch verfeinern, z.B. mit Quotas etc. - Dazu gibt es hier eine Seite:

https://github.com/haiwen/seafile/wiki/Seafile-server-configuration-options




Updaten bei neuer Version

Update von 4.3.0 auf 4.3.1 geht wir folgt:
Als root anmelden

service seafile-server stop
su - seafile
cd haiwen
wget https://github.com/haiwen/seafile-rpi/releases/download/v4.3.1/seafile-server_4.3.1_pi.tar.gz
tar xzfv seafile-server_4.3.1_pi.tar.gz
mv seafile-server_* installed
cd seafile-server-4.3.1/upgrade/
./minor-upgrade.sh
exit
service seafile-server start




Kommentare

Loading comments...