Als Voraussetzung wird ein aktuelles Ubuntu-Server 20.4 erwartet.
Schritt 1
Irgendwo muss man ja anfangen, warum also nicht mit der benötigten Datenbank-Software beginnen ?
MariaDB-Server installieren
sudo apt update
sudo apt install mariadb-server -y
Anschließend wird Mariadb-Server etwas abgesichert
So wird zum Beispiel das Root-Passwort für den Zugang zu Datenbank angelegt.
sudo mysql_secure_installation
Hierbei sollten olgende Eingaben gemacht werden:
englisches Original | deutsche Übersetzung | Eingabe |
Enter current password for root (enter for none) |
Bitte Root-Passwort eingeben. Leer lassen und Return drücken, wenn dieses Passwort nicht existiert. |
RETURN |
Set root password ? [Y/N] | Soll das Root-Passwort angelegt werden ? [Y] / [N] | Y |
New password: | Bitte neues Passwort eingeben: | PASSWORT |
Bitte neues Passwort erneut eingeben: | PASSWORT | |
Remove anonymous users ? [Y/N] | Soll der anonyme Nutzer entfernt werden ? [Y] / [N] | Y |
Disallow root login remotly ? [Y/N] | Soll der remote-root-Zugang zur Datenbank verboten werden ? [Y] / [N] | Y |
Remove test database ? [Y/N] | Soll die Test-Datenbank entfernt werden ? [Y] / [N] | Y |
Reload privilege tables now ? [Y/N] | Sollen die Änderungen nun vorgenommen werden ? [Y] / [N] | Y |
Seafile nutzt für den Zugang zur Datenbank das "mysql_native_password"-Modul.
Dieses wird nun aktiviert.
sudo mysql -u root
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root';
FLUSH PRIVILEGES;
QUIT;
Nun kann MariaDB genutzt werden.
Man loggt sich als Root ein.
Dann werden drei Datenbanken angelegt, die Seafile später benötigt.
Außerdem wird ein Seafile-Nutzer für die Datenbanken angelegt.
Schließlich werden die Zugriffsrechte an den neuen Datenbanken diesem Nutzer zugeordnet.
sudo mysql -u root -p
enter password: PASSWORT
CREATE DATABASE seafile_db character set = 'utf8';
CREATE DATABASE ccnet_db character set = 'utf8';
CREATE DATABASE seahub_db character set = 'utf8';
CREATE USER 'SEAFILE-NUTZER'@'localhost' IDENTIFIED BY 'PASSWORT';
GRANT ALL ON seafile_db.* TO 'SEAFILE-NUTZER'@'localhost';
GRANT ALL ON ccnet_db.* TO 'SEAFILE-NUTZER'@'localhost';
GRANT ALL ON seahub_db.* TO 'SEAFILE-NUTZER'@'localhost';
FLUSH PRIVILEGES;
QUIT;
Bitte SEAFILE-NUTZER und PASSWORT entsprechend anpassen.
Jetzt sollte sich der neu angelegte Nutzer bei MariaDB anmelden können und sich die angelegten Datenbanken ansehen.
sudo mysql -u SEAFILE-NUTZER -p
password: PASSWORT
SHOW DATABASES;
Das Ergebnis sollte etwa so aussehen:
+--------------------+
| Database |
+--------------------+
| ccnet_db |
| information_schema |
| seafile_db |
| seahub_db |
+--------------------+
4 rows in set (0.001 sec)
quit;
Die für Seafile benötigten Datenbanken sind angelegt.
Ein neu angelegter Nutzer hat Zugriff darauf.
Schritt 2
Python-Abhängigkeiten
Seafile läuft unter Python, deshalb müssen einige Python-Module installiert werden.
sudo apt-get update
sudo apt-get install python3 python3-setuptools python3-pip libmysqlclient-dev memcached libmemcached-dev -y
sudo pip3 install --timeout=3600 Pillow pylibmc captcha jinja2 sqlalchemy==1.4.3 django-pylibmc django-simple-captcha python3-ldap mysqlclient
Ist diese Installation abgeschlossen, so sind die Python-Abhängigkeiten vorbereitet.
Schritt 3
Seafile-Installation
Die Macher meinen, für Seafile wäre keine Installation notwendig.
Na ja, ich würde die folgenden Schritte schon eine Installation nennen.
Zuerst wird ein Verzeichnis, wo Seafile laufen soll, angelegt.
Bei mir sollen die hochgeladenen Dateien später auf einer USB-Festplatte gespeichert werden.
Diese Festplatte wird unter /mnt/extern gemountet.
Auch dort kommt ein neuer Ordner hin.
sudo mkdir /opt/seafile
sudo mkdir /mnt/extern/seafile
Bei Verzeichnisse können auch an anderen Orten angelegt werden.
Dann müssten das weitere Script entsprechend angepasst werden.
Es ist üblich Seafile nicht als root zu nutzen.
Daher wird speziell ein SEAFILE_NUTZER angelegt.
sudo adduser SEAFILE_NUTZER --gecos "" --no-create-home --disabled-login
Kurze Erläuterung | |
Option | Funktion |
--gecos "" | Die sonst üblichen Fragen nach realem Namen und weiteren Infos werden ausgelassen Lediglich sein Passwort wird angelegt. |
--no-create-home | Ein Home-Verzeichnis wird nicht angelegt. |
--disabled-login | Der Nutzer kann sich nicht direkt am System anmelden. |
Bei dieser Gelegenheit wird auch ein Passwort für diesen neuen Nutzer angelegt.
Diesem Nutzer werden die oben angelegten Ordner zugeordnet.
sudo chown -R SEAFILE_NUTZER: /opt/seafile
sudo chown -R SEAFILE_NUTZER: /mnt/extern/seafile
Die weiteren Schritte werden als SEAFILE_NUTZER gemacht.
Man wechselt in diesen Account und damit in den Seafile-Installations-Ordner.
sudo so SEAFILE_NUTZER
cd /opt/seafile
Von der Download-Seite von Seafile besorgt man sich den Link zur aktuellsten Version.
Bei mir ist es die Version 8.0.7.
Diese Datei wird nun herunter geladen
wget https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_8.0.7_x86-64.tar.gz
und anschließend extrahiert
tar xf seafile-server_8.0.7_x86-64.tar.gz
Die herunter geladene Datei wird nicht weiter benötigt.
Man kann sie löschen, verschieben, oder einfach ignorieren.
Das Installationspaket bringt ein Script mit, das Seafile einrichtet.
Dieses wird nun gestartet.
cd ./seafile-server-8.0.7
./setup-seafile-mysql.sh
Folgende Eingaben werden dabei erwartet:
server name: | |
server-IP oder domain: | |
fileserver port ? (standard ist 8082) | 8082 |
Neue Datenbank anlegen [1] oder vorhandene Datenbank nutzen [2] ? |
2 |
mysql server host ? (standard ist localhost) | localhost |
mysql server port ? (standard ist 3306) | 3306 |
mysql Nutzer ? | wie oben angelegt |
mysql Nutzer-Passwort ? | wie oben angelegt |
ccnet Datenbank ? | ccnet_db |
seafile Datenbank ? | seafile_db |
seahub Datenbank ? | seahub_db |
Die Seafile Konfiguration ist gemacht um hinter einem Proxy zu laufen.
Das wird nun geändert.
Dazu müssen drei Dateien leicht verändert werden.
nano /opt/seafile/conf/ccnet.conf
Hinter der SERVICE_URL steht ein ":8000". Das sollte entfernt werden.
Beispiel: SERVICE_URL = http://1.2.3.4
nano /opt/seafile/conf/gunicorn.conf.py
Hier sollte bind angepasst werden.
Beispiel: bind = "0.0.0.0"
nano /opt/seafile/conf/seahub_settings.py
Hier wird ganz am Ende der Datei eine Zeile angehängt.
FILE_SERVER_ROOT = 'http://DOMAIN-DER-SEITE/seafhttp'
Nun kann Seafile gestartet werden.
./seafile.sh start
./seahub.sh start
Beim ersten Start von seahub wird ein Adminstratoren-Account angelegt.
Dazu wird dessen Email-Adresse und sein späteres Passwort abgefragt.
Hat das ohne Probleme funktioniert, so können seafile.sh und seahub.sh wieder gestoppt werden.
./seafile.sh stop
./seahub.sh stop
Schließlich kann der Datenordner verschoben und nur ein Link zum neuen Ort angelegt werden.
mv /opt/seafile/seafile-data/ /mnt/extern/seafile
ln -s /mnt/extern/seafile/seafile-data/ /opt/seafile/seafile-data
Die Arbeit als SEAFILE_NUTZER ist erledigt.
Sein Account kann wieder verlassen werden.
exit
Schritt 4
Nginx installieren
sudo apt install nginx -y
Damit nginx beim Systemstart direkt läuft sollte es gestartet und aktiviert werden.
sudo systemctl start nginx
sudo systemctl enable nginx
Nun wird eine leere Konfigurationsdatei für Seafile angelegt.
sudo touch /etc/nginx/sites-available/seafile.conf
danach können die Standard-Dateien gelöscht werden.
sudo rm -rf /etc/nginx/sites-enabled/default
sudo rm -rf /etc/nginx/sites-available/default
Außerdem wird noch ein Link benötigt.
sudo ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/seafile.conf
Nun kann die leere Seafile Konfiguration mit Inhalt gefüllt werden.
Bitte anpassen !!!
log_format seafileformat '$http_x_forwarded_for $remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_response_time';
server {
listen 80;
server_name DOMAIN-DER-SEITE;
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 seafileformat;
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 seafileformat;
error_log /var/log/nginx/seafhttp.error.log;
}
location /media {
root /opt/seafile/seafile-server-latest/seahub;
}
}
Die Syntax prüfen und falls keine Fehler vorhanden sind nginx neu starten.
sudo nginx -t
sudo nginx -s reload
An dieser Stelle läuft Seafile und ist auch im Browser unter der DOMAIN-DER-SEITE zu erreichen.
Doch das funktioniert nur bis zum nächsten Neustart des Servers.
Es muss noch ein Autostart angelegt werden.
Schritt 5
Autostart
Zuerst geht man kurz in den SEAFILE-NUTZER Account und beendet Seafile.
sudo su SEAFILE-NUTZER
cd /opt/seafile/seafile-server-8.0.04
./seafile.sh stop
./seahub.sh stop
exit
Weiter geht es im normalen Account.
Der Seafile-Service wird angelegt.
sudo nano /etc/systemd/system/seafile.service
Inhalt:
[Unit]
Description=Seafile
After= mysql.service
After=network.target
[Service]
User=SEAFILE-NUTZER
Type=forking
ExecStartPre = /bin/sleep 10
ExecStart=/opt/seafile/seafile-server-latest/seafile.sh start
ExecStop=/opt/seafile/seafile-server-latest/seafile.sh stop
[Install]
WantedBy=multi-user.target
weiter geht es mit dem Seahub-Service
sudo nano /etc/systemd/system/seahub.service
Inhalt:
[Unit]
Description=Seafile
After= mysql.service
After=network.target
After=seafile.service
[Service]
User=SEAFILE-NUTZER
Type=forking
ExecStartPre=/bin/sleep 10
ExecStart=/opt/seafile/seafile-server-latest/seahub.sh start
ExecStop=/opt/seafile/seafile-server-latest/seahub.sh stop
[Install]
WantedBy=multi-user.target
Achtung !!!
In der ursprünglichen Beschreibung von Seafile sehen diese beiden Datei leicht anders aus.
Die Zeile User=SEAFILE-NUTZER fehlt in beiden Dateien.
Zusätzlich musste ich in der seahub.service-Datei die Zeilen
"Ater=seafile.service" und "ExecStartPre=/bin/sleep 10" einfügen.
Ohne diese Änderungen läuft es, zumindest bei mir, nicht.
Schließlich müssen seafile.service und seahub.service noch gestartet und aktiviert werden.
sudo systemctl daemon-reload
sudo systemctl start seafile.service
sudo systemctl enable seafile.service
sudo systemctl start seahub.service
sudo systemctl enable seahub.service
Von nun an läuft Seafile auf dem Server.
Auch ein Neustart des Gerätes ist kein Problem mehr.
Seafile ist unter der DOMAIN-DER-SEITE in jedem Browser erreichbar.
Na ja, so ganz stimmt das leider noch nicht.
Auch im heimischen Router sind noch ein paar Einstellungen notwendig.
1. Der Server benötigt eine feste IP.
In den Einstellungen einer Fritz!Box
Heimnetz -> Netzwerk -> Einstellungen des Server bearbeiten ->
Diesem Gerät immer die gleiche IP-Adresse zuweisen.
2. Portfreigaben einrichten
In den Einstellungen einer Fritz!Box
Internet -> Freigaben -> Gerät für Freigaben hinzufügen - Server auswählen
Freigabe | Port extern vergeben IPv4 | Port extern vergeben IPv6 |
HTTP-Server | 80 | 80 |
HTTPS-Server | 443 | 443 |
Seafile | 8000 | 8000 |
Seafile | 8082 | 8082 |
Schritt 6
Wenn Seafile auch über das Internet erreichbar sein soll,
so sollte man unbedingt vom unsicheren HTTP auf das sichere HTTPS umstellen.
Zuerst werden seafile.service und seahub.service beendet.
sudo systemctl stop seafile.service
sudo systemctl stop seahub.service
Nun wird ein Python3 Modul installiert.
sudo apt update
sudo apt install python3-certbot-nginx -y
Welches dann gestartet wird.
sudo certbot --authenticator standalone --installer nginx -d DOMAIN-DER-SEITE --pre-hook "service nginx stop" --post-hook "service nginx start"
Bitte anpassen !!
Man muß ein paar Fragen beantworten:
Email-Adresse des Administrators: | |
AGBs annehmen ? | a |
Darf die Email-Adresse für Werbung genutzt werden ? | n |
[1] keine Änderungen vornehmen [2] alle notwendigen Änderungen an den Seiteneinstellungen vornehmen |
2 |
Damit auch der Upload von Dateien funktioniert muss leider noch die FILE_SERVER_ROOT in der Datei seahub_settings.py angepasst werden.
Kurzer Wechsel in den SEAFILE-NUTZER Account,
die Datei anzeigen lassen
und aus dem FILE_SERVER_ROOT = http... ein FIE_SERVER_ROOT = https... machen.
Schließlich den SEAFILE-NUTZER Account wieder verlassen.
sudo su SEAFILE-NUTZER
cd /opt/seafile/conf
nano ./seahub_settings.py
FILE_SERVER_ROOT = https...
exit
Zum Schluß noch seafile.service und seahub.service neu starten.
sudo systemctl start seafile.service
sudo systemctl start seahub.service
Hurra !!! Hurra !!!
Es ist geschafft,