NextCloud – Ubuntu 20.04 LTS
1.Vorbereitungen Ubuntu 20.04 LTS
Benötigt wird ein Ubuntu 20.04 LTS auf einem Root/ vServer Eurer Wahl.
Empfehlen kann ich Euch den “Hetzner“.
Dort könnt Ihr Euch einen V-Server minutengenau abgerechnet bestellen und Eure Cloud direkt ausprobieren.
Wenn Ihr meinen Affiliate Link verwendet, schenkt Euch Hetzner 20 EUR zum ausprobieren.
https://hetzner.cloud/?ref=JzOsvjRDbjiL
Alternativ kann NextCloud auch zu Hause betrieben werden, dafür gib es verschiedenste Möglichkeiten (Empfehlungslinks von Amazon):
- günstige: https://amzn.to/3dxa94J
- die Mittelklasse: https://amzn.to/3dxa94J
(CPU, RAM und viele LAN Anschlüsse): - Power User: https://amzn.to/3qIJZ2t
Als Nächstes aktualisieren wir das System und installieren unzip:
sudo apt update && sudo upgrade -y sudo apt install unzip
1.1. Apache 2 Webserver installieren
Für unseren Server haben wir uns für den Apache2 Webserver entschieden und installieren diesen mit folgendem Befehl und prüfen direkt im Anschluss den Status:
sudo apt install -y apache2 apache2-utils systemctl status apache2
Die Ausgabe sollte in etwa so aussehen:
Sollte der Dienst nicht laufen, könnt Ihr diesen mit folgendem Befehl starten:
sudo systemctl start apache2
Der Dienst läuft jetzt, aber würde beim Reboot noch nicht mit starten. Damit der Apache2 auch beim nächsten Systemstart wieder mit startet:
sudo systemctl enable apache2
1.2. MariaDB Datenbank installieren
MariaDB installieren wir uns über Befehlszeile und prüfen anschließend, ähnlich wie bei dem Apache2 Webserver, die Statusausgabe:
sudo apt install mariadb-server mariadb-client systemctl status mariadb
Die Datenbank ist installiert. Die Ausgabe des systemcrl status mariadb sieht so oder so ähnlich aus:
Sollte die Datenbank nicht gleich gestartet sein, so könnt Ihr dies mit:
sudo systemctl start mariadb
Auch hier fügen wie die Anweisung hinzu, die Datenbank wieder mit zu starten, sollten wir das System rebooten:
sudo systemctl enable mariadb
Anschließend führen wir das Post-Installations Sicherheitsskript auf.
sudo mysql_secure_installation
Da die Datenbank noch kein Passwort besitzt, können wir auf die erste Frage des Passworts einfach mit einem ENTER quitieren. Jetzt werden wir nach einem Passwort gefragt und wir antworten mit Y, um ein neues root Passwort für MariaDB zu vergeben. GUT MERKEN oder AUFSCHREIBEN!
BILD
Alle weiteren Fragen könnt Ihr mit mit ENTER durchquittieren. Hier sind keine Angaben mehr nötig.
Einloggen können wir uns nun auch über die ROOT Rechte unseres OS root Benutzers. Das geht mit folgendem Befehl:
sudo mariadb -u root exit;
Mit exit; verlassen wir die Datenbankumgebung wieder. Wir können uns nun noch die Versionshinweise anschauen:
mariadb --version
1.3. PHP 7.4 installieren
Aktuell ist derzeit die Version 7.4:
sudo apt install php7.4 libapache2-mod-php7.4 php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-fpm
Wir haben uns für die php-fpm (FastCGI Process Manager Version) entschieden und aktivieren dies wie folgt, und starten anschließend den Apache2 neu:
sudo a2enmod proxy_fcgi setenvif sudo a2enconf php7.4-fpm sudo systemctl restart apache2
Damit haben wir PHP auf dem Ubuntu installiert und hiermit prüfen wir die Version:
php --version
2. NextCloud Installation
2.1. Nextcloud laden und entpacken
Wir loggen uns als root in unser Ubuntu ein und laden uns das aktuelle Installationsfile auf der Nextcloud Website. Zum Zeitpunkt des Scripts ist dies die Version 20.0.4:
wget https://download.nextcloud.com/server/releases/nextcloud-20.0.4.zip
Wir entpacken nun das Installationspaket in das Verzeichnis /var/www/nextcloud/ und vergeben die Rechte für unseren Apache2:
sudo unzip nextcloud-20.0.4.zip -d /var/www/ sudo chown www-data:www-data /var/www/nextcloud/ -R
2.2 Datenbank für NextCloud anlegen
Nun legen wir eine Datenbank und einen Datenbankbenutzer an. Diese könnt ihr frei wählen, notiert Euch diese aber gut. Die brauchen wir später ja für die Installation. In meinem Fall habe ich die Datenbank ‘nextcloud’ und den Nutzer ‘nextclouduser’ benannt. Diese könnt Ihr aber frei wählen, ersetzt diese dann in den folgenden Zeilen durch Eure Werte. Ebenso das ‘yourpasswd’:
sudo mysql create database nextcloud; create user nextclouduser@localhost identified by 'yourpasswd'; grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'yourpasswd'; flush privivleges; exit;
2.3. Virtuellen Host im Apache2 anlegen
In unseren Beispiel hier legen wir einen virtuelle Host an. Evtl. habt Ihr noch andere Websiten, die Ihr hier hosten wollt.
Ihr solltet jetzt eine Domain auf Euren Server konfiguriert haben. Ich habe in meinem Fall die cloud.meine-domain.com gewählt. Also eine Subdomain. Legt dafür in Eurer DNS Verwaltung der Domain einen A Record an:
cloud.deinedomain.com sollte auf die Server IP verweisen.
sudo nano /etc/apache2/sites-available/nextcloud.conf
In diese Datei kommt folgender Inhalt, Ihr denkt aber daran, die cloud.meine-domain.com gegen Eure zu ersetzen.
<VirtualHost *:80> DocumentRoot "/var/www/nextcloud" ServerName cloud.meine-domain.com ErrorLog ${APACHE_LOG_DIR}/nextcloud.error CustomLog ${APACHE_LOG_DIR}/nextcloud.access combined <Directory /var/www/nextcloud/> Require all granted Options FollowSymlinks MultiViews AllowOverride All <IfModule mod_dav.c> Dav off </IfModule> SetEnv HOME /var/www/nextcloud SetEnv HTTP_HOME /var/www/nextcloud Satisfy Any </Directory> </VirtualHost>
Jetzt bereiten wir den Apache auf den virtuelle Host vor uns aktivieren Apache Module:
sudo a2ensite nextcloud.conf sudo a2enmod rewrite headers env dir mime setenvif ssl
Die Konfiguration können wir testen:
sudo apache2ctl -t
Anschließend starten wir den Apache neu.
sudo systemctl restart apache2
In meinem Fall zeigte der Aufruf der cloud.meine-domain.com noch den Standard Startbildschirm des Ubuntu Apache2. Wir müssen hier noch den default-virtual Host deaktivieren:
sudo a2dissite 000-default
Nun installieren wir noch benötigte PHP Module nach:
sudo apt install php-imagick php7.4-common php7.4-mysql php7.4-fpm php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-bcmath php7.4-gmp sudo systemctl reload apache2
Damit konnte ich schon auf die Nextcloud über IP/ Domainnamen im Browser zugreifen.
2.4. Let’s Encrypt
Sicher ist sicher, auch hier ist die Vergabe eines Zertifikates sinnvoll und wichtig. Unsere Cloud soll sicher sein! Dazu installieren wir uns den Certbot:
sudo apt install certbot python3-certbot-apache
Als nächstes führen wir folgenden Befehl aus, um ein kostenloses Let’s Encrypt Zertifikat zu erhalten. Ersetzt die E-Mail und die Domain wieder auf Eure Werte.
sudo certbot --apache --agree-tos --redirect --staple-ocsp --email email@meine-domain.com -d cloud.meine-domain.com
Wir aktivieren noch den HSTS Header in der nextcloud-le-ssl.conf:
sudo nano /etc/apache2/sites-enabled/nextcloud-le-ssl.conf
Hier fügen wir über der Zeile </VirtualHost> folgender Zeile ein:
Header always set Strict-Transport-Security "max-age=31536000"
Wir lassen Apache2 die Konfiguration noch einmal prüfen, bevor wir den Dienst neu starten:
sudo apache2ctl -t sudo systemctl reload apache2
2.5. Datenverzeichnis festlegen und Installation abschließen
Ich möchte die Daten nicht im Unterverzeichnis /var/www/nextcloud liegen haben sondern parallel dazu im /var/www/cloud-data. Ihr könnt den Speicherort auch anders wählen, ersetzt dann einfach den Pfad durch Euren!:
sudo mkdir /var/www/cloud-data sudo chown www-data:www-data /var/www/cloud-data -R
Viel Vorbereitung war bis jetzt zu leisten, nun geht es in den Browser und wir stoßen die eigentliche Installation an:
https://cloud.meine-domain.com
Wir sehen nun den klassisch blauen NextCloud Screen und können einen ADMIN Account anlegen. Ich empfehle hier nicht den klassischen Admin oder Root, sondern wählt was eigenes aus. Passwort auswählen und eintragen.
Unter dem Feld Data Folder wird nun unser Datenverzeichnis eingetragen:
/var/www/cloud-data/
Dann fügen wir noch die Datenbank Daten ein.
Nextcloud führt nun die Installation durch und wir können uns anschließend mit dem Admin Konto einloggen und Benutzer anlegen.
Solltet Ihr mal Euren Root Zugang vergessen, so könnt Ihr Euch über die Konsole zum Server verbinden und das Passwort zurücksetzen mit:
sudo -u www-data php /var/www/nextcloud/occ user:resetpassword nextcloud_username
2.6. NextCloud optimieren
2.6.1. Memory Limit
2.6.2. Cache einrichten
2.6.3 Fehlende Indexe ergänzen
3. fail2ban
fail2ban können wir nicht nur auf E-Mail oder SSH Zugänge anwenden, sondern auch unsere NextCloud gegen Zugriffe fremder dahingehend schützen, dass nach einer vordefinierten Anzahl Fehlversuche der Zugang für den Nutzer gesperrt wird.
Dafür laden wir uns das fail2ban Paket:
apt install fail2ban
Anschließend legen wir uns eine Log-Datei an, in der die Fehlversuche gespeichert werden und die von fail2ban ausgelesen wird. Diese muss für den Webserver noch mit den passenden Rechten versehen werden.
Da wir jetzt ein Log File haben, können wir der NextCloud mitteilen, dass Fehlversuche protokoliert werden sollen, in eben genau dieser Datei. Dafür müssen wir in folgender Datei Änderungen vornehmen. Dazu rufen wir unseren Nano mit der Datei auf:
nano /var/www/nextcloud/config/config.php
Wir müssen nun folgenden Block in die Datei einfügen:
'log_type' => 'file', 'logtimezone' => 'Europe/Berlin', 'logfile' => '/var/log/nextcloud.log', 'loglevel' => 2,
Anschließend legen wir uns einen Filter für die NextCloud an. Das tun wir, indem wir folgende Datei erstellen:
nano /etc/fail2ban/filter.d/nextcloud.conf
In diese schreiben wir dann den Inhalt wie folgt:
[Definition] _groupsre = (?:(?:,?\s"\w+":(?:"[^"]+"|\w+))) failregex = ^{%(_groupsre)s,?\s"remoteAddr":""%(_groupsre)s,?\s"message":"Login failed: ^{%(_groupsre)s,?\s"remoteAddr":""%(_groupsre)s,?\s"message":"Trusted domain error. datepattern = ,?\s"time"\s:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"
Jetzt erstellen wir für fail2ban ein neues Jail. Dazu rufen wir wieder unseren Editor mit folgender Datei auf:
nano /etc/fail2ban/jail.conf
Am Ende der Datei kommt dann folgender Block als Ergänzung hinzu:
[nextcloud] backend = auto enabled = true port = 80,443 protocol = tcp filter = nextcloud maxretry = 3 bantime = 86400 findtime = 43200 logpath = /var/log/nextcloud.log
Die Zeile action = sendet eine E-Mail an den Admin. Sollte dies nicht gewünscht sein, so könnt Ihr diese auch weglassen. Wir starten den Dienst neu:
service fail2ban restart
Nun können wir den Filter auch testen:
fail2ban-client status
Nach einem Versuch, mich einzuloggen und ein falsches Passwort zu nutzen, konnte man den fehlgeschlagenen Versuch direkt erkennen.
Hier noch ein genauerer Blick auf den Filter:
fail2ban-regex /var/log/nextcloud.log /etc/fail2ban/filter.d/nextcloud.conf
Damit haben wir auch das Aussperren Fremder absolviert.
Ich hoffe das Tutorial war verständlich, Ihr seid gut durchgekommen. Bei Fragen schreibt in die Kommentare oder schickt mir eine E-Mail.
Grüße
Sascha
Quellen:
https://www.linuxbabe.com/ubuntu/install-nextcloud-ubuntu-20-04-apache-lamp-stack
https://www.linuxbabe.com/ubuntu/install-lamp-stack-ubuntu-20-04-server-desktop
https://askubuntu.com/questions/1010300/apache-virtual-host-not-working
Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!