Homeserver/NAS mit Ubuntu 18.04: Teil 5, Nextcloud

Homeserver 18.04 Teil 5 Beitragsbild

Dieser Artikel ist Teil der Reihe selbstgebauter Homeserver/Nas mit Ubuntu 18.04


Nextcloud ist die Eierlegende-Wollmilchsau für selbstgehostete Cloudanwendungen. Das Projekt findet sich unter nextcloud.com, ist OpenSource und kann kostenlos heruntergeladen und genutzt werden.

In Nextcloud können Kalender und Kontakte gespeichert werden und mit dem Smartphone synchronisiert werden. Nextcloud kann Dienste wie Google Calendar komplett ersetzten. Außerdem gibt es einen Desktopclient mit welchem Dateien über mehrere Computer synchronisiert werden können, genau wie das bei Diensten wie Dropbox der Fall ist. Eine App für das Smartphone ermöglicht den Zugriff auf die Dateien von unterwegs. Außerdem ermöglicht die App den sofortigen Upload von Fotos oder Videos die mit dem Smartphone erstellt werden. Nextcloud bietet ein übersichtliches Webinterface, über welches man von jedem Computer mit jedem Webbrowser auf die Dateien auf dem Homeserver zugreifen kann.

Nextcloud ist in PHP geschrieben und benötigt einen Webserver und eine Datenbank.

Als Webserver wird Apache und als Datenbank MariaDB installiert.

Installation der MariaDB-Datenbank

MariaDB ist ein Datenbank-Server, welcher kompatibel zu Oracles MySQL-Server ist. Da Oracle den freien MySQL-Server sehr stiefmütterlich behandelt wird zunehmend auf MariaDB als Alternative gesetzt.

Der Datenbank-Server wird installiert mit

sudo apt install mariadb-server

Mit dem nächsten Befehl kann die MariaDB Installation abgesichert, bzw. für den Produktivbetrieb bereit gemacht werden indem z.B. der anonyme Benutzer gelöscht wird.

Im Gegensatz zu anderen Distributionen, oder wenn MariaDB aus anderen Quellen installiert wird, findet bei Ubuntu die Authentifizierung über einen Unix-Socket mit den Rechten des lokalen Benutzer statt. Wenn also ein MariaDB-Befehl als Root oder mit sudo aufgerufen wird, wird dieser auch als Rootuser im Datenbankserver ausgeführt. Ein lokaler Benutzer der sudo nicht nutzen darf (z.B. die bereits angelegten User heimnetz und heimgast) hat auch keinen Rootzugriff auf den Datenbankserver. Aus diesem Grund ist es nicht nötig und nicht sinnvoll in dieser Konfiguration ein Rootpasswort für den Datenbankserver zu vergeben. Wer sich für weitere Details interessiert findet hierzu einen interessanten Beitrag im Blog von Michael Kofler.

Die Absicherung erfolgt nun mit folgendem Befehl und folgenden Antworten:

sudo mysql_secure_installation

Enter current password for root (enter for none): Enter
Set root password? [Y/n]: N
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

Anlegen der Datenbank für Nextcloud

Nach der Installation des Datenbabank-Servers kann die Datenbank für die Nextcloud angelegt werden. Als erstes muss man sich auf dem Datenbank-Server einloggen.

sudo mysql -u root

Dann wird eine neue Datenbank mit dem Namen nextcloud angelegt

CREATE DATABASE nextcloud;

Im nächsten Schritt wird ein neuer Datenbankbenutzer für die Nextcloud Installation vergeben. Für diesen Benutzer wird ein Passwort vergeben, da dieser im Gegensatz zum Rootuser nicht an ein lokales Benutzerkonto gekoppelt ist. Das Passwort muss natürlich individuell festgelegt werden.

CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'password';

im letzten Schritt werden dem Benutzer nextcloud alle Rechte an der gleichnamigen Datenbank eingeräumt.

GRANT ALL ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Damit ist die Datenbank bereit. Die Änderungen werden nur noch gespeichert und anschließend loggen wir uns aus dem Datenbankserver wieder aus.

FLUSH PRIVILEGES;
EXIT;

Installation des Apache Webserver

Nun wird der Apache Webserver installiert. Die Wahl fällt auf Apache, weil dieser weit verbreitet, gut dokumentiert ist und in der offiziellen Dokumentation von Nextcloud verwendet wird. Das Ausführen der PHP-Dateien übernimmt mod_php, eine Erweiterung für Apache.

Apache und mod_php werden mit diesem Befehl installiert:

sudo apt install apache2 libapache2-mod-php7.2

Außerdem benötigt Nextcloud weitere PHP-Module, welche mit den folgenden Befehl installiert werden:

sudo apt install php7.2-gd php7.2-json php7.2-mysql php7.2-curl php7.2-mbstring php7.2-intl php-imagick php7.2-xml php7.2-zip

Damit ist der Webserver grundsätzlich schon einsatzbereit. Ein Aufruf im Webbrowser über http://mimashome.ddns.org oder die IP-Adresse http://192.168.30.114 gibt bereits eine Webseite aus.

Apache Default Page

Einrichten des Let’s Encrypt https-Zertifikats

Damit die Übertragung der Daten über das Internet verschlüsselt und ohne störende Fehlermeldungen des Browsers erfolgen kann, wird ein Schlüsselpaar und ein Verschlüsselungszertifikat benötigt. Seit der Gründung von Let’s Encrypt sind solche, von allen Browsern und Betriebssystemen anerkannte Zertifikate nicht nur kostenlos sondern auch automatisiert und sofort zu erhalten. Ein echter Meilenstein für das Internet.

Die Erstellung der Schlüssel und das Beantragen, sowie die anschließende Zertifikatsverwaltung übernimmt die Software Certbot, welche zuerst wieder installiert werden muss.

sudo apt install certbot python-certbot-apache

Dann wird ein Schlüsselpaar erstellt und ein Zertifikat für unsere DynDNS Adresse beantragt.

sudo certbot --apache certonly

Hierzu müssen ein paar Fragen beantwortet werden

  • Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to
    cancel): deine Emailadresse für Benachrichtigungen
  • Please read the Terms of Service. (A)gree/(C)ancel: A
  • Would you be willing to share your email address with the Electronic Frontier
    Foundation. (Y)es/(N)o: Y oder N, je nachdem ob man Mitteilungen Lets Encrypt bekommen möchte
  • No names were found in your configuration files. Please enter in your domain
    name(s) (comma and/or space separated) (Enter ‘c’ to cancel): mimashome.ddns.net

Jetzt werden die Daten überprüft und die Zertifikate erstellt und unter /etc/letsencrypt/live/mimashome.ddns.net gespeichert.

Automatische Erneuerung der Zertifikate einrichten

Aus Sicherheitsgründen sind Let’s Encrypt Zertifikate nur drei Monate gültig. Sofern einem das Zertifikat abhanden kommt, ist der potentielle Schaden geringer als bei einem Zertifikat mir langer Laufzeit. Um ein wartungsarmes System zu bekommen muss die Aktualisierung der Zertifikate automatisiert werden. Dies übernimmt ein Cronjob, der wiederum regelmäßig einen Certbot-Befehl zum erneuern des Zertifikats ausführt.

Hierzu öffnen wir die Datei /etc/crontab

sudo nano /etc/crontab

und fügen vor der abschließenden Raute den folgenden Befehl ein:

@weekly root certbot renew

die crontab sollte dann etwa so aussehen

Crontab für Let's Encrypt

Damit wird einmal wöchentlich die Gültigkeitsdauer aller vorhandenen Zertifikate überprüft und bei Bedarf eine Neuausstellung beantragt.

Installation von Nextcloud und Konfiguration des Apache Webserver

Als erstes besorgen wir uns die Nextcloud Dateien. Diese findet man auf der offiziellen Webseite unter Downloads. Die Dateien können aber auch direkt über die Kommandozeile heruntergeladen werden, wobei wir zuerst in unser Homeverzeichnis wechseln und dann den Download starten.

cd ~
wget https://download.nextcloud.com/server/releases/latest.tar.bz2

Damit wird automatisch die aktuelle Version von Nextcloud heruntergeladen (Danke für den Tipp in den Kommentaren).

Nach dem Download werden die Dateien nach /var/www/html entpackt. Dies ist das Standardverzeichnis in welchem der Apache Webserver Webseiten erwartet. Beim entpacken wird automatisch das Unterverzeichnis Nextcloud erstellt. Anschließend werden die Dateirechte auf den Benutzer des Apache Webservers geändert, so dass Apache die Dateien lesen und für Updates auch beschreiben darf.

sudo tar -xjvf latest.tar.bz2 -C /var/www/html/
sudo chown -R www-data:www-data /var/www/html/nextcloud

Apache konfigurieren

Nun folgt noch die Konfiguration des Webservers. Für jeden Dienst der über Apache ausgeliefert wird, wird eine sogenannte Virtual-Host unter /etc/apache2/sites-available Konfiguration erstellt. Diese erstellen wir mit dem folgenden Befehl und öffnen die leere Datei anschließend mit dem Texteditor.

sudo touch nano /etc/apache2/sites-available/001-nextcloud.conf
sudo nano /etc/apache2/sites-available/001-nextcloud.conf

In diese Date wird folgender Inhalt kopiert:

<VirtualHost *:80>
ServerName mimashome.ddns.net

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

Redirect permanent / https://mimashome.ddns.net
</VirtualHost>

<IfModule mod_ssl.c>
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
<VirtualHost *:443>

ServerName mimashome.ddns.net

DocumentRoot /var/www/html/nextcloud

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

# SSL Konfiguration
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/mimashome.ddns.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mimashome.ddns.net/privkey.pem
SSLProtocol All -SSLv2 -SSLv3 -TLSv1.1

<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>

#Nextcloud Konfiguration
<Directory /var/www/html/nextcloud/>
Options +FollowSymlinks
AllowOverride All

<IfModule mod_dav.c>
Dav off
</IfModule>

SetEnv HOME /var/www/html/nextcloud
SetEnv HTTP_HOME /var/www/html/nextcloud
</Directory>

</VirtualHost>
</IfModule>

Nun wird die bereits vorhandene Standardseite deaktiviert und dafür unsere neue Nextcloudkonfiguration aktiviert.

sudo a2dissite 000-default.conf
sudo a2ensite 001-nextcloud.conf

Außerdem benötigt Nextcloud noch ein paar weitere Apache Module, die mit diesem Befehl aktiviert werden.

sudo a2enmod ssl rewrite headers env dir mime

Damit alle jetzt vorgenommenen Änderungen aktiviert werden muss der Apache Webserver einmal neu gestartet werden mit

sudo systemctl restart apache2

Nextcloud einrichten

Jetzt kann Nextcloud über den Webbrowser eingerichtet werden. Dazu wird die angelegte Dyndns Adresse über eine verschlüsselte https-Verbindung aufgerufen. https://mimashome.ddns.net.
Hier werden wir bereits von der funktionierenden, aber noch nicht eingerichteten Nextcloud empfangen.

Zuerst müssen wir jedoch im Dateisystem noch ein Verzeichnis anlegen in welches Nextcloud unsere Dateien speichert. In der Standardeinstellung würden diese auf der SystemSSD liegen. Wir wollen aber natürlich dass die Dateien auf unserem sicheren Storage-Raid abgelegt werden. Dazu wird das Verzeichnis zuerst erstellt und anschließend die Rechte so angepasst dass Apache und damit Nextcloud Zugriff bekommen.

sudo mkdir /mnt/storage/nextcloud
sudo chown -R www-data:www-data /mnt/storage/nextcloud

Dann werden die Felder auf der Konfigurationsseite ausgefüllt.

  • Benutzername und Passwort können hier frei vergeben werden. Hiermit loggt man sich später in die Nextcloud ein
  • Dateiverzeichnis sollte geändert werden, so dass dieses nicht auf der SystemSSD sondern auf unseren Storage-Raid liegt. In diesem Fall /mnt/storage/nextcloud
  • Datenbank-Benutzer ist nextcloud
  • Datenbank-Password ist das beim Anlegen der Datenbank vergebene Passwort
  • Datenbank-Name ist nextcloud
  • localhost bleibt unverändert, da sich die Datenbank auf dem gleichen Computer befindet.

Mit einem Klick auf Installation abschließen wird Nextcloud eingerichtet und einsatzbereit gemacht.

Nextcloud einrichten

Damit ist Nextcloud grundsätzlich Einsatzbereit. Allerdings haben wir derzeit nur Zugriff auf die Dateien unter /mnt/storage/nextcloud. Daten die wir über die im vorherigen Artikel  angelegt haben sind noch nicht erreichbar.

Dies lösen wir dadurch, dass über die Nextcloud App “external storage support” die bereits vorhandenen Verzeichnisse eingebunden werden. Damit Nextcloud auch Schreibzugriff auf die Dateien hat, die ja mit dem Benutzer heimnetz erstellt werden und nicht mit dem Benutzer des Webservers, benötigen wir noch die Software smbclient, die wieder über das Terminal installiert werden muss. Damit Nextcloud die Änderung mitbekommt starten wir anschließend den Apache einmal neu.

sudo apt install smbclient
sudo systemctl restart apache2

Zum aktivieren der App in Nextcloud klickt man in der rechten oberen Ecke auf das Symbol mit dem Anfangsbuchstaben des Benutzernamens und anschließend auf Apps.

Bei den Apps findet man unter dem Punkt deaktivierte Apps die App External Storage Support, welche mit einem Klick auf aktivieren verfügbar gemacht wird.

Nextcloud Apps aktivieren

Zum Einbinden der vorhandenen Ordner gehen wir wieder auf das Symbol in der rechten oberen Ecke und anschließend auf Einstellungen. Im linken Bereich findet man verwirrender Weise zwei Punkte mit dem Namen “Externe Speicher“. Zum Einrichten benötigen wir den unteren.

  • Ordnername wird entsprechend der Freigabe benannt. Z.B. lokale Videos
  • Externer Speicher ist SMB/CIFS
  • Authentifizierung ist Benutzername und Passwort
  • Konfiguration:
    Host ist localhost
    Share ist der Name der Freigabe. Z.B. Video
    Entfernter Unterordner bleibt leer
    Domain bleibt ebenfalls leer
    Benutzername ist heimnetz oder heimgast. Je nachdem ob die Dateien mit Schreibrechten (heimnetz) oder aus Sicherheitsgründen nur mit Leserechten (heimgast) eingebunden werden sollen
    Passwort ist das zum Benutzername gehörende Passwort

Ein klick auf den kleinen Haken am Ende des Formularfeldes bindet den Ordner in Nextcloud ein.

Nextcloud mount SMB-Shares

Dies wird für alle Freigaben wiederholt, die in Nextcloud eingebunden werden sollen. Also z.B. Audio, Dokumente…

Anschließend sind die eingebundenen Freigaben über Nextcloud erreichbar.


Homeserver/NAS mit Ubuntu 18.04: Teil 1, Einleitung, Hardware und Kosten
Homeserver/NAS mit Ubuntu 18.04: Teil 2, Systeminstallation
Homeserver/NAS mit Ubuntu 18.04: Teil 3, Grundkonfiguration
Homeserver/NAS mit Ubuntu 18.04: Teil 4, Dateifreigaben im Heimnetz
Homeserver/NAS mit Ubuntu 18.04: Teil 5, Nextcloud
Homeserver/NAS mit Ubuntu 18.04: Teil 6, Media Streaming mit Plex
Homeserver/NAS mit Ubuntu 18.04: Teil 7, Backups mit Duplicati und Rsnapshot


Anzeige:
Aktualisiert am 22. Juli 2018 um 21:56 . Preise können sich geändert haben. Alle Angaben ohne Gewähr.

2 Kommentare

Kommentar hinterlassen


Die Angabe eines Namens oder einer Webseite ist optional. Weitere Informationen: siehe Datenschutzerklärung