In der heutigen Zeit wird im IT-Bereich immer öfter mit einer Cloud gearbeitet.
Egal ob Texte, Bilder, Musik oder Videos, alles wird nicht nur auf dem aktuellen Gerät gespeichert,
sondern zusätzlich automatisch auf einem externen Server, einer sogenannten Cloud.
Über die Sicherheit einer Cloud, bei einem Anbieter, kann man sicherlich geteilter Meinung sein.
Auch ich erkannte die Vorteile einer Cloud, allerdings wollte ich nicht irgendeinen Cloud-Anbieter nutzen.
Mein Cloud-Server soll in meiner Wohnung stehen und nur ich habe Zugriff auf dort gespeicherten Daten.
Ein normaler PC, als Server, verbraucht für meine Verhältnisse zu viel Strom und ist somit zu teuer.
Sehr preiswert wird es, wenn man einen Raspberry Pi nutzt.
So ein Gerät verbraucht nur minimalen Strom und ist auch in der Anschaffung erschwinglich.
Leider war mein Raspberry Pi 3b mit 1 GB Ram etwas zu schwach für einen Dauerbetrieb.
Mit einem Mini-PC der Firma ASUS fand ich das für mich passende Gerät.
Ein Arbeitsspeicher von 8 GB Ram sind zwar nicht wirklich viel, doch sie reichen vollkommen aus.
Das vorhandene DVD-Laufwerk wurde durch eine Festplatte ersetzt.
Somit sind im Gerät nun zwei Festplatten.
1.) 320 GB
2.) 1 TB
Zusätzlich sind noch 2 USB3-Platten (2 TB und 4 TB) angeschlossen.
Welche Software auf so einem privaten Server laufen soll, ist eine Frage des Geschmacks.
Man kann vieles machen, doch ich wollte mich auf grundlegende Funktionen beschränken.
Den Server als DNS-Server nutzen und eventuell sogar Internet-Werbung permanent per Pi-Hole blockieren,
geht mir etwas zu weit. Auch brauche ich keinen Mail-Server.
Mein Server soll als NAS, private Cloud und als Medien-Server fungieren.
Einen NAS-Server (Network Attached Storage) einrichten ist relativ leicht.
Unter fast jedem Betriebssystem gibt es die Möglichkeit einen Ordner für das heimischen Netzwerk freizugeben.
Etwas anderes ist ein NAS gar nicht.
***
Sucht man im Internet nach Cloud-Software, so findet man neben diversen relativ unbekannten,
die drei wohl bekanntesten (Owncloud, Nextcloud und Seafile) Programme.
Owncloud und Nextcloud sind fast identisch.
Bei Owncloud gibt es kostenpflichtige Funktionen, die aber nicht unbedingt benötigt werden.
Nextcloud kann komplett kostenlos genutzt werden.
Viele Nutzer freuen sich sich über Funktionen wie einen Kalender, einen eingebauten Viren-Scanner
oder Dateien gleichzeitig von mehreren Nutzern bearbeiten zu können.
Für mich sind das alles Luxusfunktionen, die ich nicht benötige.
Ich habe beide Programme ausprobiert.
Für mich sind sie relativ langsam, was vermutlich der Programmsprache PHP zu verdanken ist.
Seafile läuft unter Python und ist wesentlich flotter.
Allerdings bietet es nur die Grundfunktionen Dateien automatisch auf dem Server zu speichern
und sie für andere Geräte zur Verfügung zu stellen.
Also genau das, was ich mir von einer Cloud-Software wünsche.
Achtung !!!
Vom Seafile-Server gibt eine kostenlose und eine kostenpflichtige Pro- Version.
So erhält man bei der Pro-Version Support direkt vom Entwickler.
Bei Problemen mit der kostenlosen Version darf man sich an diverse Supportforen wenden.
***
Was ist eigentlich ein Medien-Server ?
Wer eine grössere Musik- oder Video- Sammlung auf seinem Computer besitzt, wird eine Möglichkeit suchen,
diese Dateien auf allen Geräten im Netzwerk, oder sogar über das Internet, abspielen zu können.
***
Externe Vorbereitungen
Der eigentliche Server ist noch längst nicht eingerichtet,
trotzdem sollte man bereits an anderer Stelle ein paar Dinge erledigen.
a) feste IP
Ein Server sollte möglichst eine feste IP-Adresse haben.
Nur so kann er immer unter der identischen Adresse gefunden werden.
Im angeschlossenen Router sollte es dazu eine recht einfache Möglichkeit geben.
Eine feste IP-Adresse sollte möglichst immer im Router festgelegt werden.
Zwar geht es auch direkt am Rechner, doch das kann zu Adress-Konflikten führen
und der Rechner wäre dann gar nicht mehr erreichbar.
Schwieriger sieht es mit der eigenen IP-Adresse aus.
Bei jeder Anmeldung erhält man von seinem Provider (Internet-Anbieter) eine IP-Adresse.
Das kann, muss aber nicht, immer die gleiche IP-Adresse sein.
Wer keine feste IP-Adresse hat, der kann z.B. einen DynDNS-Service nutzen.
Dabei wird eine Internetadresse mit einer dynamischen IP-Adresse verbunden.
Bei jedem IP-Wechsel meldet der Router diese neue IP der Service-Seite
und so bleibt der heimische Server trotzdem immer über die Adresse erreichbar.
b) Port-Freigaben
Gerät / Name | IP-Adresse | Freigaben | Port extern IPv4 | Port extern IPv6 |
Servername | Server-IP | HTTP-Server | 80 | |
HTTPS-Server | 443 | |||
Seafile | 8000 | |||
Seafile | 8002 | |||
HTTP-Server | 80 | |||
HTTPS-Server | 443 | |||
Seafile | 8000 | |||
Seafile | 8002 |
***
Nachdem die Hardware feststeht und auch klar ist welche Software laufen soll, fehlt noch das Betriebssystem.
Beim Raspberry Pi habe ich es mit Raspian probiert.
Später beim ASUS-Computer wurden verschiedene Betriebssystem versucht.
Außer Debian und Ubuntu habe ich kaum ein Betriebssystem richtig zum Laufen gebracht.
Schließlich fiel meine Entscheidung auf Ubuntu-22.04-live-Server-Edition.
Bereits während der Installation wurden die beiden internen Festplatten eingerichtet.
Festplatte/Partition | Einhängepunkt | Größe |
sda | ||
sda1 | /boot | 1 GB |
sda2 | / | 30 GB |
sda3 | /home | 30 GB |
sda4 | swap | 8 GB |
sda5 | /mnt/intern1 | 250 GB |
sdb | ||
sdb1 | /mnt/intern2 | 1.000 GB |
1.) Cloud-Init deaktivieren und entfernen
Die Ubuntu-live-Server-Edition bringt eine Cloud-Funktion mit.
Damit sollen irgendwelche Dinge wesentlich einfacher sein.
Sorry, aber mich nervt diese Funktion nur.
Unmittelbar nach der Ubuntu Installation wird sie entfernt.
Zunächst muss sie deaktiviert werden.
sudo nano /etc/default/grub
Die Zeile
GRUB_CMDLINE_LINUX=""
wird geändert zu
GRUB_CMDLINE_LINUX="cloud-init=disabled"
Mit strg+0 die Datei speichern
und mit strg+x nano beenden.
sudo update-grub
und schließlich noch ein Neustart des Rechners.
sudo reboot now
Nun kann die Cloud-Funktion entfernt werden.
sudo apt purge cloud-init -y
Noch ein paar Reste löschen
sudo rm -rf /etc/cloud
sudo rm -rf /var/lib/cloud
und es folgt wieder ein Neustart. Dieses Mal komplett ohne die Cloud-Funktion.
sudo reboot now
2.) Multipathing deaktivieren und entfernen
Auf richtig großen Servern kann es notwendig sein, dass das System eine Datei über verschiedene Wege finden kann.
Diese Funktion nennt sich Multipathing.
Auf einem kleinen Homeserver wird sie nicht gebraucht. Im Gegenteil, da kann sie zu Fehlern führen.
Also wird diese Funktion deaktiviert und gelöscht.
sudo systemctl stop multipathd.service
sudo systemctl disable multipathd.service
sudo apt remove multipath-tools -y
sudo apt purge multipath-tools -y
3.) System aktualisieren
Klar, Ubuntu wurde gerade eben erst installiert, trotzdem wird es verschiedene Updates geben.
Die herunter geladene ISO-Datei enthält ja das komplette Betriebssystem und wird nicht bei jedem Update erneuert.
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
Das kann schon ein paar Minuten dauern.
4.) WOL (Wake-up On Lan) einrichten
Ein Server soll zwar rund um die Uhr an 365 Tagen im Jahr laufen,
trotzdem braucht man eine Möglichkeit ihn aus der Ferne starten zu können.
Zuerst werden Netzwerktools installiert.
sudo apt install ethtool -y
Möglicherweise wurden diese Tools bereits mit Ubuntu installiert.
Dann wird man freundlich darauf hingewiesen, dass es bereits vorhanden ist.
Mit dem Befehl
ip link
lässt man sich alle vorhandenen Netzwerkschnittstellen anzeigen.
Mindestens eine sollte aktiv sein. Deren Bezeichnung merkt man sich.
Bei mir ist es enp4s0, aber das muss nicht immer so sein.
Nun kann WOL einmalig gestartet werden.
sudo ethtool -s enp4s0 wol g
Würde der Rechner nun heruntergefahren, so könnte er über das Netzwerk neu gestartet werden.
Das funktioniert allerdings immer nur ein Mal.
Die Funktion muss also nach jedem Neustart neu aktiviert werden.
Man legt also eine Autostart-Funktion an, die genau diese Funktion beinhaltet.
Dazu wird zunächst eine Datei angelegt.
sudo nano /etc/systemd/system/wol.service
Deren Inhalt:
[Unit]
Description=Configure Wake-up On LAN
[Service]
Type=oneshot
ExecStart=/sbin/ethtool -s enp4s0 wol g
[Install]
WantedBy=basic.target
Bitte wieder mit strg+o abspeichern und mit strg+x nano beenden.
Schließlich muss die neue Funktion noch im System aktiviert werden.
sudo systemctl enable wol.service
sudo systemctl daemon-reload
Achtung !!!
Wake-up On Lan muss auch im BIOS des Rechners aktiviert werden.
Wie das genau funktioniert ist vom Gerät abhängig und kann hier nicht erklärt werden.
Beispiel:
BIOS -> Power -> Power On By PME (Enabled)
5.) Grundeinstellungen
- feste IP <- sollte immer im Router gemacht werden
- SSH Zugang <- kann während der Ubuntu-Installation bereits angelegt werden, oder später per
sudo apt install openssh-server -y
- Sprachen
Mit dem Befehl
sudo dpkg-reconfigure locales
gelangt man in die Einstellungen für die Sprachen des Systems.
de_DE.UTF-8 <- Sprache des Nutzers Deutsch
en_US.UTF-8 <- wird später von Seafile benötigt
Beide Sprachpakete sollten aktiviert werden.
- Zeitzone
Ähnlich wie bei den Sprachen gelangt man mit einem Befehl in die Einstellungen.
sudo dpkg-reconfigure tzdata
Für Deuschland sollte Europa -> Berlin gewählt werden.
- Tastatur
Wurde bei der Ubuntu-Installation versehentlich die Tastatur falsch eingerichtet, so kann man es nachträglich korrigieren.
Ist die Tastatur am Server angeschlossen
sudo dpkg-reconfigure keyboard-configuration
Wird der Server hingegen per SSH bedient
sudo nano /etc/default/keyboard
6.) USB-Festplatten einbinden
Wird eine USB-Festplatte mit dem Computer verbunden, während dieser läuft, so wird sie von Ubuntu nicht erkannt.
Bitte das Gerät herunterfahren,
sudo shutdown now
dann die USB-Festplatten mit dem Computer verbinden und diesen wieder starten.
Für meine zwei USB-Festplatten werden zwei neue Ordner angelegt.
sudo mkdir /mnt/extern1
sudo mkdir /mnt/extern2
Mit dem Befehl
sudo blkid
lässt man sich alle angeschlossenen Festplatten und deren Partitionen anzeigen.
Die PARTUUIDs der USB-Festplatten werden notiert.
Das kann so aussehen:
PARTUUID="f10d43e9-01"
PARTUUID="fc104aae-f985-47bb-bee3-d6259bd115b6"
Damit die USB-Festplatten immer im gleichen Ordner zur Verfügung stehen, wird die Datei fstab editiert.
sudo nano /etc/fstab
Für jede der Festplatten wird dort, ganz am Ende der Datei, eine neue Zeile eingefügt.
# USB-Festplatten
PARTUUID=f10d43e9-01 /mnt/extern1 auto nosuid,nodev,nofail,x-gvfs-show 0 0
PARTUUID=fc104aae-f985-47bb-bee3-d6259bd115b6 /mnt/extern2 auto nosuid,nodev,nofail,x-gvfs-show 0 0
Nach einem Neustart sollten die Festplatten in den Ordnern zur Verfügung stehen.
sudo reboot now
Mit
cd /mnt/intern1
ls -l
lässt man sich den Inhalt vom Ordner intern1, also von einer Partition anzeigen.
Sollte es dort eine Datei lost+found geben, so kann diese entfernt werden.
sudo rm -rf ./lost+found
Für intern2, extern1 und extern2 wiederholen.
7.) Seafile Vorbereitung
Bevor Seafile installiert werden kann, müssen ein paar andere Dinge erledigt werden.
Seafile benötigt eine Datenbank, daher wird mariadb installiert.
sudo apt update
sudo apt install mariadb-server mariadb-client -y
Die Datenbanksoftware sollte vor der ersten Nutzung etwas abgesichert werden.
sudo mysql_secure_installation
Hier sollten folgende Eingaben gemacht werden:
Englisches Original | Deutsche Übersetzung | Eingabe |
Enter current password for root (enter for none) |
Bitte Root-Passwort eingeben, oder leer lassen und "Return" drücken, wenn das Passwort nicht existiert | RETURN |
Switch to unix socket authentication ? [Y/N] |
N | |
Change root password ? [Y/N] | Root-Passwort anlegen ? [Y/N] | Y |
New password ? | neues Passwort eingeben ? | PASSWORT |
Remove anonymous users ? [Y/N] | Anonyme Nutzer entfernen ? [Y/N] | Y |
Disallow root login remotly ? [Y/N] | Remote-root-Zugriff zur Datenbank verbieten ? [Y/N] | Y |
Remove test database ? [Y/N] | Entfernen der Test-Datenbank ? [Y/N] | Y |
Reload privilege tables now ? [Y/N] | Änderungen nun übernehmen ? [Y/N] | Y |
Leider reicht die Datenbank-Software nicht.
Seafile benötigt auch drei Datenbanken und einen Nutzer, der diese Datenbanken verwalten darf.
Man meldet sich als root bei der Datenbank an.
Dann legt man 3 Datenbanken und einen Nutzer an.
Schließlich werden die Nutzungsrechte der Datenbanken an den Nutzer übergeben.
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-USER'@'localhost' IDENTIFIED BY 'PASSWORT';
GRANT ALL ON seafile_db.* TO 'SEAFILE-USER'@'localhost';
GRANT ALL ON ccnet_db.* TO 'SEAFILE-USER'@'localhost';
GRANT ALL ON seahub_db.* TO 'SEAFILE-USER'@'localhost';
FLUSH PRIVILEGES;
QUIT;
Bitte SEAFILE-USER und PASSWORT anpassen und sicher notieren.
Beide Angaben werden später nur an genau einer Stelle benötigt.
Der später anzulegende SEAFILE-USER muss (bzw. sollte) nicht mit dem Datenbanknutzer übereinstimmen.
Ob die Datenbanken ordentlich angelegt wurden und der SEAFILE-USER auch Zugriff darauf hat kann leicht getestet werden.
Man meldet sich als SEAFILE-USER bei der Datenbank an.
sudo mysql -u SEAFILE-USER -p
Mit dem Befehl
SHOW DATABASES;
lassen sich eingerichtete Datenbanken anzeigen.
Das sollte etwa so aussehen:
+--------------------+
| Database |
+--------------------+
| ccnet_db |
| information_schema |
| seafile_db |
| seahub_db |
+--------------------+
4 rows in set (0.001 sec)
Mit dem Befehl
quit;
wird die Datenbank-Software verlassen.
Wie an anderer Stelle bereits erwähnt läuft Seafile unter Python.
Deshalb müssen neben den drei Datenbanken auch ein paar Python-Module installiert werden.
sudo apt update
sudo apt 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
Das kann einen Moment dauern, doch danach ist man auch schon mit der Seafile-Vorbereitung fertig.
8.) Endlich Seafile installieren
Jede installierte Software besitzt auf der Systempartition einen Ordner in dem alle notwendigen Dateien abgelegt werden.
Dort ist allerdings in der Regel nicht wirklich viel Platz.
Die von Seafile kopierten und gespeicherten Bilder, Musik-Dateien oder Filme gehören dort nicht hin.
Also wird extra für diese Dateien ein zweiter Ordner angelegt.
sudo mkdir /opt/seafile
sudo mkdir /mnt/extern1/seaf
Es ist üblich Software, wie Seafile, nicht als root zu nutzen.
Deshalb wird ein spezieller SEAFILE-NUTZER (seafile) angelegt.
Befehl | |
|
|
Erläuterung | |
--gecos "" | Die sonst üblichen Fragen nach Name, Wohnort usw werden übersprungen |
--no-create-home | Der neue Nutzer benötigt kein home-Verzeichnis |
--disabled-login | Der neue Nutzer darf sich nicht direkt beim System anmelden |
Als nächstes werden die Eigentumsrechte der erstellten Ordner an den Nutzer seafile übergeben.
sudo chown -R seafile:seafile /opt/seafile
sudo chown -R seafile:seafile /mnt/extern1/seaf
Nun wechselt man zum Nutzer seafile und geht in den Ordner /opt/seafile
sudo su seafile
cd /opt/seafile
Im Internet, z.B. auf der Seite von Seafile, sucht man nach der aktuellen Versionsnummer.
Es folgt der Download der aktuellen Seafile-Server-Datei.
Anschließend wird dieses Archiv extrahiert.
wget https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_8.0.8_x86-64.tar.gz
tar xf seafile-server_8.0.8_x86-64.tar.gz
Danach wird der Ordner ./seafile-server-8.0.8 betreten und die eigentliche Installation gestartet.
cd ./seafile-server-8.0.8
./setup-seafile-mysql.sh
Folgende Eingaben werden erwartet:
Server Name: | |
Server-IP oder Domain: | |
Fileserver Port: (standard ist 8082) | 8082 oder RETURN |
Neue Datenbanken anlegen (1) oder vorhandene nutzen (2) ? |
2 |
mysql server host: (standard ist localhost) | localhost oder RETURN |
mysql server port: (standard ist 3306) | 3306 oder RETURN |
mysl Nutzer: | SEAFILE-NUTZER wie oben angelegt |
mysql Nutzer Passwort: | PASSWORT, wie oben angelegt |
ccnet Datendank: | 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 die Seafile-Server-Software gestartet werden.
./seafile.sh start
./seahub.sh start
Beim ersten Start von seahub wird ein Administratoren-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/extern1/seaf
ln -s /mnt/extern/seaf/seafile-data/ /opt/seafile/seafile-data
Die Arbeit als SEAFILE_NUTZER ist vorläufig erledigt.
Sein Account kann wieder verlassen werden.
exit
9.) Webserver nginx installieren
Damit Seafile auch über eine Webseite erreichbar wird, benötigt man einen Webserver.
sudo apt install nginx -y
Nginx sollte gestartet und als Systemfunktion aktiviert werden.
sudo systemctl start nginx
sudo systemctl enable nginx
Für jede per nginx erreichbare Webseite gibt es mindestens eine Konfigurationsdatei.
Die Konfiguration der Standardseite kann gelöscht werden.
sudo rm -rf /etc/nginx/sites-enabled/default
sudo rm -rf /etc/nginx/sites-available/default
Schließlich wird eine neue Konfigurationsdatei für Seafile angelegt.
sudo nano /etc/nginx/conf.d/seafile.conf
Inhalt:
server {
listen 80;
listen [::]:80;
server_name SERVER-DOMAIN;
autoindex off;
client_max_body_size 100M;
access_log /var/log/nginx/seafile.com.access.log;
error_log /var/log/nginx/seafile.com.error.log;
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;
}
location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://127.0.0.1:8082;
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;
}
location /media {
root /opt/seafile/seafile-server-latest/seahub;
}
}
Jetzt noch nginx neu starten
sudo nginx -s reload
und die neue Seite sollte erreichbar sein.
10.) Seafile als Systemservice mit Autostart
Es werden zwei neue Dateien angelegt.
sudo nano /etc/systemd/system/seafile.service
Inhalt:
[Unit]
Description=Seafile
After= mysql.service
After=network.target
[Service]
User=seafile
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
und
sudo nano /etc/systemd/system/seahub.service
Inhalt:
[Unit]
Description=Seafile
After= mysql.service
After=network.target
After=seafile.service
[Service]
User=seafile
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
Anmerkung:
In der offiziellen Anleitung von Seafile sieht der Inhalt dieser Datei etwas anders aus.
Die Zeilen
After=seafile.service
ExecStartPre=/bin/sleep 10
fehlen dort. Ich musste sie einfügen damit die Software bei mir ordentlich funktioniert.
Nun noch alle Systemfunktionen neu starten, seafile und seahub starten und als Systemfunktion aktivieren.
sudo systemctl daemon-reload
sudo systemctl start seafile.service
sudo systemctl enable seafile.service
sudo systemctl start seahub.service
sudo systemctl enable seahub.service
Hurra !!! Hurra !!! Seafile läuft.
11.) Jellyfin Installation
Zuerst wird eine möglicherweise vorhandene alte sources-list für Jellyfin entfernt.
sudo rm /etc/apt/sources.list.d/jellyfin.list
Dann wird noch fehlende Software installiert
sudo apt install apt-transport-https
und das Software Repositorium universe hinzugefügt.
sudo add-apt-repository universe
Die nächsten beiden Befelszeilen verstehe ich selbst nicht genau, aber sie sind wohl wichtig:
curl -fsSL https://repo.jellyfin.org/ubuntu/jellyfin_team.gpg.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/debian-jellyfin.gpg
echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/ubuntu $( lsb_release -c -s ) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
Dann kann Jellyfin normal installiert werden.
sudo apt update
sudo apt install jellyfin -y
Wie bei Seafile wird auch für Jellyfin eine Konfigurationsdatei für Nginx erstellt.
sudo nano /etc/nginx/conf.d/jellyfin.conf
Inhalt:
server {
listen 80;
server_name SERVER-DOMAIN;
access_log /var/log/nginx/jellyfin.access;
error_log /var/log/nginx/jellyfin.error;
set $jellyfin 127.0.0.1;
location / {
proxy_pass http://127.0.0.1:8096;
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-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
# Disable buffering when the nginx proxy gets very resource heavy upon streaming
proxy_buffering off;
}
# location block for /web - This is purely for aesthetics so /web/#!/ works instead of having to go to /web/index.html/#!/
location ~ ^/web/$ {
# Proxy main Jellyfin traffic
proxy_pass http://$jellyfin:8096/web/index.html/;
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-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
}
location /socket {
# Proxy Jellyfin Websockets traffic
proxy_pass http://$127.0.0.1:8096;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
}
# Security / XSS Mitigation Headers
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
}
Das war es schon fast.
11.) aus HTTP wird HTTPS
Will man Seafile und/oder Jellyfin über das Internet erreichbar machen,
so sollte ein Sicherheitszertifikat eingebunden werden.
Wie üblich wird etwas Software benötigt.
sudo apt update
sudo apt install python3-certbot-nginx -y
Anschließend kann diese Software, unter Angabe der Server-Domain, gestartet werden.
Mit Server-Domain ist die Internetadresse gemeint, unter der die Seafile-Seite erreichbar ist.
sudo certbot --authenticator standalone --installer nginx -d SERVER-DOMAIN --pre-hook "service nginx stop" --post-hook "service nginx start"
Folgende Angaben müssen gemacht werden:
Email-Adresse des Administrators: | |
AGBs annehmen ? | |
Darf die Emailadresse für Werbung genutzt werden ? | n |
(1) Keine Änderungen vornehmen (2) alle notwendigen Änderungen an den Seiteneinstellungen vornehmen ? |
2 |
Da auch Jellyfin über eine Webseite verfügt wird der obige Befehl erneut eingegeben.
Allerdings wird dieses Mal als SERVER-DOMAIN eben die Adresse von Jellyfin genutzt.
sudo certbot --authenticator standalone --installer nginx -d SERVER-DOMAIN --pre-hook "service nginx stop" --post-hook "service nginx start"
Die Fragen brauchen nicht erneut beantwortet werden.
Schließlich muss auch der seahub-Service auf https umgestellt werden.
Man stoppt seafile und seahub,
sudo systemctl stop seafile.service
sudo systemctl stop seahub.service
wechselt dann erneut zum SEAFILE-Nutzer seafile,
sudo su seafile
geht in den seafile-Ordner
cd /opt/seafile/conf
öffnet dort die seahub_settings.py Datei
nano ./seahub_settings.py
und ändert in der Zeile
FILE_SERVER_ROOT = http...
das http zu https. Dann kann der Nutzer seafile wieder verlassen werden.
exit
und sowohl seafils als auch seahub werden wieder gestartet.
sudo systemctl start seafile.service
sudo systemctl start seahub.service
Wieder ist ein Teil der Server-Installation erledigt. Hurra !!!
12.) Einfaches Network Attached Storage per Samba einrichten
Na, womit wird angefangen ?
Richtig !!! Es wird Software installiert.
sudo apt install samba -y
Damit ein Nutzer auf Samba-Freigaben zugreifen kann, muss er zur Gruppe der Samba-Nutzer gehören.
Der einfachste Weg dies zu erledigen ist ihm ein Passwort für Samba zu geben.
sudo smbpasswd -a NUTZER
Bevor irgendwelche Ordner freigegeben werden können, müssen sie erst erstellt werden.
Außerdem sollten die Eigentums- und Zugriffsrechte stimmen.
sudo mkdir /mnt/intern1/freigabe
sudo chmod 0777 /mnt/intern1/freigabe
sudo chown -R NUTZER:NUTZER /mnt/intern1/freigabe
sudo mkdir /mnt/intern2/freigabe
sudo chmod 0777 /mnt/intern2/freigabe
sudo chown -R NUTZER:NUTZER /mnt/intern2/freigabe
sudo mkdir /mnt/extern2/jelly
sudo chmod 0777 /mnt/extern2/jelly
sudo chown -R jellyfin:jellyfin /mnt/extern2/jelly
Der Nutzer jellyfin wurde bei der Installation von Jellyfin automatisch angelegt.
Die Eigentums- und Zugriffsrechte für /mnt/extern1 wurden bereits an anderer Stelle festgelegt.
Diese Partition dient ausschließlich der Speicherung der Daten von Seafile.
Die samba-Freigaben werden in der Datei smb.conf eingerichtet.
Man kann diese Datei editieren, oder eine neue erstellen
sudo nano /etc/samba/smb.conf
strg+o zum Abspeichern, dabei Name ändern z.B. smb-alt.conf
strg+x nano beenden
Datei erneut öffnen
sudo nano /etc/samba/smb.conf
Nun den kompletten Inhalt löschen (F9 hilft etwas)
neuer Inhalt
[global]
workgroup = WORKGROUP
server string = cloud (Samba, Ubuntu)
wins support = yes
security = user
map to guest = Bad Password
[freigabe-1]
comment = private Dateien
path = /mnt/intern1/freigabe
public = no
writeable = yes
guest ok = no
force create mode = 0777
force directory mode = 0777
force user = NUTZER
force group = NUTZER
[freigabe-2]
comment = Norton-Backup
path = /mnt/intern2/freigabe
public = no
writeable = yes
guest ok = yes
force create mode = 0777
force directory mode = 0777
force user = NUTZER
force group = NUTZER
[jelly]
comment = Filme und Musik von Jellyfin
path = /mnt/extern2/jelly
public = yes
writeable = yes
guest ok = yes
force create mode = 0777
force directory mode = 0777
force user = jellyfin
force group = jellyfin
Für /mnt/extern1/seaf wurde keine Freigabe erstellt.
Dort werden die Dateien von Seafile gespeichert.
Ein Neustart kann nicht schaden
sudo reboot now