ACHTUNG! Alles wird auf eigene Gefahr hin durchgeführt!
Es wird keine Zusicherung, Garantie, Richtigkeit oder Vollständigkeit gegeben, die auf oder über diese Webseite zur Verfügung gestellt werden.
In diesem Leitfaden wird die Nextcloud Installation manuell auf einem neu aufgesetzten Pi4 durchgeführt.
Einige Angaben müssen/sollten angepasst werden. Beispiel: MeineDomain.TLD, sowie Passwörter oder Verzeichnisse.
Tastenkombination für nano
Speichern mit STRG + o
Verlassen mit STRG + x
Suchen mit STRG + w
Zu einer ganz bestimmten Zeile mit STRG + _
Mit der Tabulatortaste kann in Linux die Autovervollständigung genutzt werden.
Die aktuelle PiOS Lite arm64 herunterladen und via RPi auf die SD-Card flashen.
Tipp: Mit der Tastenkombination STRG + SHIFT + x kommt man im RPi in die erweiterten Einstellungen.
Überprüfe nachdem Vorgang noch einmal, ob sich die ssh Datei im /boot Verzeichnis der SD-Karte befindet, damit die Freischaltung des ssh Dienstes direkt geschieht.
Nach erfolgreichem booten und verbinden via ssh werden standardmäßig folgende Befehle einmal ausgeführt sudo apt update && sudo apt upgrade -y
Danach werden einmal die Einstellungen vorgenommen mit sudo raspi-config
Unter 'System Options' sollte 'Password' ausgeführt werden um das Passwort 'raspberry' zu ändern. (ggf. noch Hostname ändern)
Unter 'Localisation Options' sollte 'Locale' (xx_XX.UTF-8 UTF-8), 'Timezone' und ggf. 'Keyboard' noch eingestellt werden.
Unter 'Advanced Options' noch 'Expand Filesystem' ausführen, um den Speicherplatz auf der SD-Karte automatisch zu konfigurieren.
Die Einstellungen beenden und das System anschließend Neustarten (reboot).
Über den Befehl sudo mariadb wird sich mit dem Datenbankserver verbunden. Mit den nächsten Zeilen wird ein neuer DB-User erstellt und das entsprechende Passwort vergeben (das Passwort muss in den Anführungszeichen stehen), eine neue Datenbank erstellt und dem User cloud Rechte für die Datenbank cloud gegeben.
create user cloud@localhost identified by "Passwort"; create database cloud; grant all privileges on cloud.* to cloud@localhost; exit;
Feste IPv4 für lokales Netzwerk
Dem Pi4 muss immer die gleiche IP-Adresse zugewiesen werden! In der FRITZ!Box kann dies unter Heimnetz → Netzwerk bei dem jeweiligen Gerät bearbeitet werden. Dort können auch die Ports freigegeben werden, falls der Zugriff über das Internet erfolgen soll.
Wer einen Internetzugang über einen Kabelanbieter nutzt, kann sich eine IPv4 Adresse mieten, um auch außerhalb des lokalen Netzwerkes Zugriff zu erlangen.
Bei dem verlinkten Anbieter gibt es bereits Anleitungen hierzu, daher wird dieser Schritt übersprungen.
Das Zertifikat kann automatisch beantragt und hinterlegt werden oder nur beantragt werden und selbst hinterlegt werden, hier wird die automatisierte Variante beschrieben. Über den Befehl
Wenn der Befehl das erste Mal ausgeführt wird, wird man bei Let's Encrypt registriert. Dafür wird eine E-Mail-Adresse benötigt.
Die Lizenzbedingungen müssen akzeptiert werden. Danach wird man gefragt, ob man sich bei einer Art Newsletter der Electronic Frontier Foundation anmelden möchte. Mit Y wird die Anmeldung bestätigt, mit N abgelehnt. Dies ist nicht verpflichtend.
Die SSL-Zertifikate von Let's Encrypt haben eine Gültigkeit von 90 Tagen. Über crontab wird diese Erneuerung automatisiert. Mit dem Befehl sudo crontab -e wird der automatisierte Befehl erstellt bzw. bearbeitet. Dort wird dann ganz unten folgendes hinzugefügt 45 7 * * * /usr/bin/certbot renew damit wird jeden Tag um 7:45 Uhr der Befehl certbot renew ausgeführt.
Das Zertifikat wird ohne Passwort für 365 Tage über folgende Befehle selbst erstellt sudo mkdir /var/cert cd /var/cert sudo openssl genrsa -out server.key 4096 sudo openssl req -new -key server.key -out server.csr -sha256 sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
In dem Verzeichnis sollten sich drei Dateien befinden, dies kann überprüft werden mit dem Befehl ls
Zuerst wird ein neues Verzeichnis erstellt, wo später die externe Festplatte eingehängt wird. Über den Befehl sudo mkdir /media/USBDrive
Jetzt wird das externe Speichermedium angeschlossen. Einen Überblick der angeschlossenen Hardware bekommt man über den Befehl lsblk Diese könnte so aussehen
NAME
MAJ:MIN
RM
SIZE
RO
TYPE
MOUNTPOINT
sda
8:0
0
7,3T
0
disk
└─sda1
8:1
0
7,3T
0
part
mmcblk0
179:0
0
59,5G
0
disk
├─mmcblk0p1
179:1
0
256M
0
part
/boot
└─mmcblk0p2
179:2
0
59,2G
0
part
/
In diesem Beispiel ist sda bzw. sda1 die Partition mit 8 TB (7,3T) im Dateisystem btrfs. Auf die Formatierung des Speichermediums wird hier vorerst verzichtet.
sudo blkid zeigt die PARTUUID und auch das Dateisystem. Diese ist für den nächsten Schritt von Bedeutung (PARTUUID kopieren).
Über den Befehl sudo nano /etc/fstab die externe Festplatte hinterlegen, damit diese bei Systemstart mit eingehängt wird. Es wird die erste Partition darauf verwendet.
sudo mount -a kann getestet werden, ob das Speichermedium eingehängt wird. Überprüft wird es mit dem bereits bekannten Befehl lsblk
Um das externe Speichermedium zu verwenden, muss dies Apache2 mitgeteilt werden. Zuerst wird ein neues Verzeichnis erstellt und die Rechte entsprechend gesetzt sudo mkdir /media/USBDrive/nextcloud && sudo chown -R www-data:www-data /media/USBDrive/nextcloud
sudo nano /etc/apache2/apache2.conf wird folgendes einfach nach dem Blockabschnitt <Directory /var/www/> hinzugefügt, einfach mit STRG + w danach suchen
Installieren und ein neues Verzeichnis auf dem externen Speichermedium erstellen, wo später die Backup Dateien gespeichert werden, über sudo mkdir /media/USBDrive/backup && sudo apt install borgbackup
Zuerst wird das Backup Repository initialisiert über sudo borg init --encryption=repokey /media/USBDrive/backup ein Backup wird dann bspw. so erstellt sudo borg create --stats --compression lz4 /media/USBDrive/backup::bkup1 /etc/ /home/ /root/ /var/ das Backup wird in dem Verzeichnis widerhergestellt, indem man sich aktuell befindet, über sudo borg extract /media/USBDrive/backup::bkup1 extract durch delete ersetzten um das entsprechende Backup zu löschen.
Die Dokumentation von Borg ist sehr ausführlich beschrieben. Daher wird hier nicht weiter darauf eingegangen.
Die Logdatei wird noch erstellt und die Rechte wieder vergeben sudo touch /var/log/nextcloud.log sudo chown -R www-data:www-data /var/log/nextcloud.log
Zusätzlich wird mit sudo nano /etc/fail2ban/filter.d/nextcloud.conf ein neuer Filter erstellt mit folgendem Inhalt (Insgesamt sind es 4 Zeilen)
Damit die Änderungen wirksam werden, muss man fail2ban neu starten sudo service fail2ban restart
sudo fail2ban-client status sshd gibt eine Übersicht aus. Die Nextcloud Log kann nach der Installation so überprüft werden sudo fail2ban-regex /var/log/nextcloud.log /etc/fail2ban/filter.d/nextcloud.conf
Webserver, Mailserver, FTP usw. kann darüber noch abgesichert werden. Mit sudo fail2ban-client status erhält man eine Übersicht, welche Dienste von fail2ban aktiv sind.
sudo apt-get install ufw -y wird die Firewall installiert. Der Befehl sudo ufw default deny blockiert einmal alle Arten von Verbindungen. Nun wird ssh und der Webserver freigegeben. Über die Befehle sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp
Die Firewall wird gestartet mit sudo ufw enable Bei einer Änderung muss diese neu geladen werden über sudo ufw reload Deaktivieren kann man die Firewall wieder mit sudo ufw disable
Andere Dienste müssen zusätzlich mit freigegeben werden.
Zuerst wechseln wir in das entsprechende Verzeichnis wo später das Nextcloud-System ausgeführt wird und laden das entsprechende Archiv herunter mit cd /var/www sudo wget https://download.nextcloud.com/server/releases/nextcloud-23.0.0.zip
Anschließend entpacken über sudo unzip nextcloud-23.0.0.zip
Über den bekannten Befehl ls wird die Übersicht der Dateien und Verzeichnisse angezeigt und ggf. müssen die Daten noch verschoben werden, über sudo mv nextcloud/* /var/www/MeineDomain.TLD
Das leere Verzeichnis und die .zip Datei wieder löschen mit sudo rm -r nextcloud nextcloud-23.0.0.zip
Die Rechte wieder mit dem Befehl sudo chown -R www-data:www-data /var/www/MeineDomain.TLD setzten und die Installation im Browser abschließen.
Nextcloud im Browser einrichten
Im Browser wir nun die Domain (URL) oder die lokale IP-Adresse aufgerufen. Es wird nach einem Benutzernamen und Passwort gefragt für die Cloudverwaltung. Die Zugangsdaten für die Datenbankverbindung wären in diesem Beispiel User=cloud, Passwort=Passwort, Name=cloud und Server=localhost
Bei dem Datenverzeichnis wird natürlich das externe Speichermedium angegeben, /media/USBDrive/nextcloud/ dort wird alles gespeichert, was später in die Cloud hochgeladen wird.
einrichten
Nach erfolgreicher Installation findet man unter den Einstellungen → Verwaltung → Übersicht die Sicherheits- & Einrichtungswarnungen, dort werden mit Sicherheit auch einige Probleme direkt aufgelistet.
Ein vorhandenes PHP-Modul muss noch aktiviert werden über sudo a2enmod headers Apache2 anschließend neu starten sudo systemctl restart apache2
Die PHP Konfiguration bearbeiten, das Speicherlimit erhöhen und die OPCache Nutzung vorbereiten. output_buffering wird direkt mit deaktiviert, upload_max_filesize, post_max_size und upload_tmp_dir einstellen wie gewünscht.
Wenn die Zeile mit einem Semikolon ; beginnt, muss dieses entfernt werden. Mit STRG + w kann in nano gesucht werden.
Als Nächstes wird die sudo nano /etc/apache2/sites-available/MeineDomain.TLD.conf bzw. für lokalen Zugriff die 000-default.conf wieder angepasst und folgendes in den SSL Bereich hinzugefügt
Danach wird mit sudo nano /etc/php/7.4/mods-available/apcu.ini folgende Zeile hinzugefügt apc.enable_cli=1 und Apache2 wieder neu starten sudo systemctl restart apache2
Nun wird noch die Aktivierung des PHP Caches durchgeführt, mit sudo nano /var/www/MeineDomain.TLD/config/config.php und dem Array am Ende
hinzufügen. Das Array wird mit der geschlossenen Klammer und dem Semikolon ); geschlossen, achte einfach auf die bereits vorhandenen Einträge. Apache2 wieder neu starten, damit die Änderungen wirksam werden mit sudo systemctl restart apache2
Die PHP occ Befehle müssen in dem Verzeichnis der Nextcloud ausgeführt werden. Über cd /var/www/MeineDomain.TLD wird mit dem User www-data die Befehle durchgeführt.
Externe Überwachungsprogramm mit einem Token versehen, besonders wenn die Cloud aus dem Internet erreichbar ist. Mit sudo -u www-data php occ config:app:set serverinfo token --value DeinToken wird der Token gesetzt.
In den Einstellungen unter Grundeinstellungen wird die Hintergrund-Aufgaben geändert auf Cron. Dieser Cronjob unterscheidet sich aber vom certbot bzw. Let's Encrypt. Wir nutzen hier nicht den User root, sondern www-data mit dem Befehl sudo crontab -u www-data -e wird folgende Zeile eingefügt
Durch die zwei Apps kann der Login zusätzlich mittels Zwei-Faktor-Authentifizierung abgesichert werden, über TOTP Apps (RFC 6238), Signal, SMS* und Telegram. *Anbieter wird benötigt, z.B. websms.de
Da Telegram bekannter sein dürfte, habe ich mich für diese Variante entschieden. Es wird ein Telegram-Account benötigt.
Es wird über Telegram nach BotFather gesucht und eine Konversation gestartet. Über die Textnachricht /newbot wird ein neuer Bot erstellt und der Name Mein Bot Name und der Username (muss) endenmit_bot angegeben. Man erhält eine Antwort mit dem entsprechenden Token ...123:ABC...
Es wird in das Verzeichnis cd /var/www/MeineDomain.TLD gewechselt und folgender Befehl ausgeführt sudo -u www-data php occ twofactorauth:gateway:configure telegram den Telegram Bot Token einfügen und fertig.
ocDownloader mit ARIA2 installieren
Bevor die App installiert wird, werden folgende weitere Pakete installiert, über sudo apt-get install aria2 curl php-curl python3-pip und installieren die youtube-dl für Pyhton über sudo pip install youtube-dl als nächstes wwerden zwei Verzeichnisse erstellt, über sudo mkdir /var/log/aria2c /var/local/aria2c
Dann werden zwei Dateien erstellt über touch und entsprechend die Rechte vergeben, über die Befehle sudo touch /var/log/aria2c/aria2c.log touch /var/local/aria2c/aria2c.sess chown www-data.www-data -R /var/log/aria2c /var/local/aria2c chmod 770 -R /var/log/aria2c /var/local/aria2c
Gestartet wird ARIA2 dann mit einen RPC-Passwort, dieses wird später in den Einstellungen hinterlegt, über sudo -u www-data aria2c --enable-rpc --rpc-allow-origin-all -c -D --log=/var/log/aria2c/aria2c.log --check-certificate=false --save-session=/var/local/aria2c/aria2c.sess --save-session-interval=2 --continue=true --input-file=/var/local/aria2c/aria2c.sess --rpc-save-upload-metadata=true --force-save=true --log-level=warn --rpc-secret=DEIN_KEY
Die Ports 6881-6999 werden standardmäßig genutzt, diese müssen in der Firewall freigegeben und neugestartet werden über die drei Befehle sudo ufw allow 6881:6999/tcp sudo ufw allow 6881:6999/udp sudo ufw reload