Seafile Server auf Raspberry Pi installieren – Anleitung



Voraussetzung

Ein RaspberryPi (zum Beispiel das „Starter Kit„)* ist vorhanden, das Betriebssystem „Raspian“ ist installiert und natürlich am Netzwerk angeschlossen. Du kennt die IP-Adresse des RaspberryPIs. Diese findest du in deinem Router.
SSH Zugang ist aktiviert. Ich lege immer eine leere Datei mit Namen „ssh“ in der Boot-Partition ab. Ansonsten muss SSH einmalig über „raspi-config“ aktivert werden. Dann installieren wir nun Seafile.

Oder du lädst dir das fertige Image direkt herunter – Zur Seite

ACHTUNG: Artikel nicht mehr aktuell, bitte schaue hier nach.

Anleitung

Per SSH am Raspi anmelden – ssh pi@raspberrypi (Passwort: raspberry)

Beim ersten Start empfehle ich einmal den Befehl sudo raspi-config auszuführen und sowohl den Hostnamen als auch das Passwort zu ändern.
ACHTUNG: Die Anleitung ist veraltet! Hier die Aktuelle Anleitung.

Neuen Nutzer „Seafile“ erstellen, zu diesem Nutzer wechseln und in das Hauptverzeichnis:

sudo useradd -m -p seafile -s /bin/bash seafile
sudo su seafile
cd

Zurück im Browser gehe zu https://www.seafile.com/en/download/ und klicke im Bereich „Server“ bei Server for Raspberry Pi auf den Link „Latest version“, dann Adresse des Links kopieren der Datei seafile-server_7.0.5_stable_pi.tar.gz (Stand: 25.07.2019)

Datei herunterladen, entpacken und in Ordner „installed“ verschieben und Seafile Benutzer verlassen:

wget https://github.com/haiwen/seafile-rpi/releases/download/v7.0.5/seafile-server_7.0.5_stable_pi.tar.gz
tar xfz seafile-server_7.0.5_stable_pi.tar.gz
mkdir installed
mv seafile-server_7.0.5_stable_pi.tar.gz installed/
exit

Benötigte Programme installieren:

sudo apt update
sudo apt install python2.7 libpython2.7 python-setuptools python-ldap python-mysqldb python-memcache python-urllib3 python-pil python-certifi python-idna python-requests mariadb-server-10.0 sqlite3

MySQL Root Passwort setzen:

sudo mysql -u root
update mysql.user set password=password('geheim') where user='root';
update mysql.user set plugin='' where user='root';
flush privileges;
quit

Zurück zum Benutzer „Seafile“ wechseln, in Ordner wechseln und Setup ausführen:

sudo su seafile
cd seafile-server-7.0.5
./setup-seafile-mysql.sh

Du wirst nun nach einigen Angaben gefragt, welche selbsterklärend sind:
Servername: Name des Seafile Servers (frei zu vergeben)
Server IP: IP Adresse des Raspberry (solltest du wissen oder schau in deinem Router nach)
Seafile data dir: Pfad zum Speicherort (können wir auch später ändern)
Fileserver port: Port des Servers (mit Enter bestätigen)

Wenn du gefragt wirst wie die Datenbanken zu erstellen sind, wähle/tippe „1“ um neue Datenbanken zu generieren. Im Laufe des Setups wirst du auch nach dem Root Passwort gefragt, welches du vorher festgelegt hast. Außerdem wird der neue Benutzer „seafile“ angelegt. Auch für diesen müsst ihr ein Passwort festlegen. Der Rest kann getrost mit Enter bestätigt werden.

Du kannst seafile jetzt starten und stoppen mit (sofern du als Benutzer seafile im Ordner /seafile-server-latest/ bist):

./seafile.sh start / stop / restart
./seahub.sh start / stop / restart

Ein Erstmaliger Start sollte nun einmal durchgeführt werden.Admin-Zugangsdaten werden abgefragt und sind zu vergeben. Seafile ist nun bestens vorbereitet. Wir stoppen seafile und seahub hier erst einmal und machen weiter.

Schneller Webspace

Autostart einrichten

Wir verlassen Benutzer Seafile mit „exit“ und erstellen nun die Autostarts, sodass Seafile bei jedem Start vom Raspberry auch automatisch startet. Dazu erstellen wir im folgenden zwei Dateien und aktivieren diese gemäß der offiziellen Anleitung von Seafile (manual.seafile.com):

sudo nano /etc/systemd/system/seafile.service

Folgendes einfügen und speichern mit Strg + O und schließen mit Strg + X:

[Unit]
Description=Seafile
# add mysql.service or postgresql.service depending on your database to the line below
After=network.target

[Service]
Type=forking
ExecStart=/home/seafile/seafile-server-latest/seafile.sh start
ExecStop=/home/seafile/seafile-server-latest/seafile.sh stop
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target

Das war Seafile, jetzt kommt Seahub (Weboberfläche):

sudo nano /etc/systemd/system/seahub.service

Folgendes einfügen und speichern mit Strg + O und schließen mit Strg + X:

[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
Type=forking
# change start to start-fastcgi if you want to run fastcgi
ExecStart=/home/seafile/seafile-server-latest/seahub.sh start
ExecStop=/home/seafile/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target

Jetzt die beiden erstellen Dateien aktivieren:

sudo systemctl enable seafile seahub

Ihr könnt seafile nun als pi-user steuern mit:

sudo systemctl start/stop/restart seafile seahub

Nun habt ihr einen Funktionstüchtigen Cloud-Server installiert. Dieser ist aktuell nur lokal über den Port 8000 erreichbar. Im Folgenden installieren wir nginx als Webserver installieren.

Wenn ihr vorhabt, dass die Daten auf einer externen Festplatte* gespeichert werden, da diese vermutlich deutlich mehr Speicherkapazität als die SD Karte hat, bitte folgenden Link klicken: Externe Festplatte für Seafile vorbereiten.

NginX installieren und einrichten

Als erstes installieren wir Webserver nginx und passen diesen auf seafile an:

sudo apt install nginx
sudo nano /etc/nginx/sites-available/seafile.conf

Folgende Konfiguration eintragen und mit Strg + O speichern und mit Strg + X schließen:

server {
    listen 80;
    server_name _;

    proxy_set_header X-Forwarded-For $remote_addr;

    location / {
         proxy_pass         http://127.0.0.1:8000;
         proxy_set_header   Host $host;
         proxy_set_header   X-Real-IP $remote_addr;
         proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header   X-Forwarded-Host $server_name;
         proxy_read_timeout  1200s;


         # used for view/edit office file via Office Online Server
         client_max_body_size 0;

         access_log      /var/log/nginx/seahub.access.log;
         error_log       /var/log/nginx/seahub.error.log;
    }
	
	location /seafhttp {
	rewrite ^/seafhttp(.*)$ $1 break;
	proxy_pass http://127.0.0.1:8082;
	client_max_body_size 0;
	proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;

	proxy_connect_timeout  36000s;
	proxy_read_timeout  36000s;
	proxy_send_timeout  36000s;

	send_timeout  36000s;

	access_log      /var/log/nginx/seafhttp.access.log;
	error_log       /var/log/nginx/seafhttp.error.log;
    }
    location /media {
        root /home/seafile/seafile-server-latest/seahub;
    }
}

Dann löschen wir die beiden „default“ Dateien und erstellen eine Verknüpfung zu unserer erstellten Konfiguration:

sudo rm /etc/nginx/sites-enabled/default
sudo rm /etc/nginx/sites-available/default
sudo ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/seafile.conf

Wir testen die Konfiguration (sollte successful wiedergeben), reloaden nginx und passen die Seafile-Konfiguration an:

sudo nginx -t
sudo nginx -s reload
sudo su seafile
cd conf
nano ccnet.conf

Hinter „SERVICE_URL“ das Doppelpunkt 8000 entfernen. Beispielhaft steht dann nur noch (bzw eure IP-Adresse des RaspberryPi):

SERVICE_URL = http://192.168.2.115

Strg O + Strg + X für speichern und schließen. Anschließend noch eine Zeile einfügen in seahub_settings (auch hier bitte eure IP anpassen):

nano seahub_settings.py
FILE_SERVER_ROOT = 'http://192.168.2.115/seafhttp'

Seafile Benutzer verlassen und Seafile starten:

exit
sudo systemctl start seafile seahub

Seafile läuft nun im lokalen Netzwerk und kann bereits vollständig genutzt werden. Um Seafile auch von unterwegs zu erreichen (was bei einer Cloud ja nicht unsinnig ist) erstellen wir im folgenden einen Account bei einem DynDns Anbieter und ein kostenloses SSL-Zertificat von Let’s Encrypt:
Cloud online verfügbar und mit SSL abgesichert

Gehostet auf einem Server von Bitpalast