Nextcloud auf Ubuntu Server 22.04 LTS einrichten

In diesem Beitrag werden wir eine Nextcloud (zu diesem Zeitpunkt Version 28) auf einem Ubuntu 22.04 Server installieren. Ich nutze hierfür eine Virtuelle Maschine auf einem Proxmox Host. Eine Installation auf Bare Metal (direkt auf einem Computer) ist natürlich genauso möglich. Nextcloud legt die Verwaltungsdateien und die Userdateien in zwei getrennten Ordnern ab. Hierbei ist…

In diesem Beitrag werden wir eine Nextcloud (zu diesem Zeitpunkt Version 28) auf einem Ubuntu 22.04 Server installieren. Ich nutze hierfür eine Virtuelle Maschine auf einem Proxmox Host. Eine Installation auf Bare Metal (direkt auf einem Computer) ist natürlich genauso möglich.

Nextcloud legt die Verwaltungsdateien und die Userdateien in zwei getrennten Ordnern ab. Hierbei ist es möglich den Pfad der Userdaten individuell zu bestimmen. Diesen Umstand möchte ich nutzen um die Dateien an ein im Netzwerk freigegebenen Ordner umzuleiten.

Hierbei ist es wichtig zu wissen, dass damit der Zugriff auf die Dateien auch außerhalb der Nextcloud möglich wird und somit das Berechtigungskonzept und die Zugriffsicherheit auf die Dateien kompromittiert wird. Ich nutze diese Tatsache um den Ordner der User-Dateien auf mein NAS umzulenken, damit ich auch außerhalb der Nextcloud diese über meine automatischen Backups sichern kann. Ebenfalls nutze ich als Arbeitsmaschine eine Proxmox Maschine, welche genug Leistung aber nicht genug Speicher besitzt. Ihr könnt den Teil der Netzlaufwerkseinbindung für euch selbst weg lassen und stattdessen einen Ordner unter z.B. /usr/ erstellen, welchen ihr mit den nötigen Rechten verseht.

Aber fangen wir an.

Nachdem wir uns auf den Server via SSH verbunden haben, werden wir als ersten Schritt die Paketquellen und die installierten Pakete aktualisieren.

apt update && apt upgrade -y

Als nächstes installieren wir die notwendigen Pakete zur Bereitstellung der Funktionen um Webseiten anzeigen zu können.

Beginnend mit den Webserverdiensten von Apache.

apt install apache2 -y

Und folgend mit den Funktionalitäten um PHP Serverseitig zu rendern.

Hierzu müssen wir zuerst die notwendige Paketquelle hinzufügen und anschließend die Paketinformationen aktualisieren.

apt install software-properties-common
add-apt-repository ppa:ondrej/php
apt update

Anschließend können wir die PHP Module in der Version 8.2 installieren.

apt install php8.2 libapache2-mod-php8.2 php8.2-zip php-dompdf php8.2-xml php8.2-mbstring php8.2-gd php8.2-curl php8.2-imagick libmagickcore-6.q16-6-extra php8.2-intl php8.2-bcmath php8.2-gmp php8.2-cli php8.2-mysql php8.2-zip php8.2-gd  php8.2-mbstring php8.2-curl php8.2-xml php-pear unzip nano php8.2-apcu redis-server ufw php8.2-redis php8.2-smbclient php8.2-ldap php8.2-bz2

Bevor wir weitermachen, müssen wir PHP noch konfigurieren. Hierzu öffnen wir die Datei PHP.ini mit dem Editor unserer Wahl (ich nutze hier nano).

nano /etc/php/8.2/apache2/php.ini

Folgende Einträge müssen in der unten aufgelisteten Form abgeändert werden. Achtet hier bei „memory_limit“ darauf, dass ihr nicht mehr Speicher vergebt als ihr in eurer Instanz zur Verfügung habt und haltet ebenso etwas Arbeitsspeicher für weitere Prozesse der Maschine frei. Hierbei reichen 1 bis 2 Gigabyte, ist aber abhängig von der weiteren Nutzung durch euch auf der entsprechenden Maschine.

memory_limit = 4096M
upload_max_filesize = 20G
post_max_size = 20G
date.timezone = Europe/Berlin
output_buffering = Off
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=10000
opcache.memory_consumption=1024
opcache.save_comments=1
opcache.revalidate_freq=1

Nach dem speichern der Datei muss noch eine Datenbank installiert werden.

apt install mariadb-server

Um die Installation abzuschließen müssen wir noch ein neues root Passwort anlegen, welches nicht das root Passwort der Maschine, sondern ein eigenständiges für die Datenbank sein sollte. Ebenso werden wir die Testdatenbank und die Standardbenutzer mit dem folgenden Befehl entfernen.

mysql_secure_installation

Ist die Installation abgeschlossen müssen wir noch eine Datenbank für die Nextcloud Instanz anlegen.

mysql
CREATE DATABASE nextcloud;

Für die Datenbank legen wir nun einen eigenen User für den Zugriff der Nextcloud an und geben ihm Zugriff auf die Datenbank.

CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'Hier_ein_sicheres_root-Passwort_vergeben';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';

Danach bereinigen wir noch alle geänderten Privilegien und verlassen die MYSQL Eingabe.

FLUSH PRIVILEGES;
EXIT;

Als nächstes laden wir uns die aktuellste Version von Nextcloud herunter, entpacken diese und verschieben die Dateien in den Webserverbereich.

cd /tmp && wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
mv nextcloud /var/www/

Um die Nextcloud erreichen zu können, müssen wir eine Konfiguration für den Virtual Host anlegen.

nano /etc/apache2/sites-available/nextcloud.conf

Wir kopieren folgenden Inhalt hinein. Hierbei müssen wir in der Zeile „ServerName“ die spätere URL oder die interne IP schreiben. Im späteren Verlauf ist die Webseite nur noch über die dort angegebene Adresse zu erreichen und die unten generierten SSL Zertifikate (Nur in Verbindung mit einer URL) werden für die hinterlegte URL generiert.

<VirtualHost *:80>
     ServerAdmin master@domain.com
     DocumentRoot /var/www/nextcloud/
     ServerName www.domain.de
     <Directory /var/www/nextcloud/>
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
          <IfModule mod_dav.c>
            Dav off
          </IfModule>
        SetEnv HOME /var/www/nextcloud
        SetEnv HTTP_HOME /var/www/nextcloud
     </Directory>
     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Nachdem wir die Konfiguration gesichert haben, aktivieren wir diese

a2ensite nextcloud.conf
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime

Ebenso starten wir den Webserver neu, damit die Änderungen zur Geltung kommen.

service apache2 restart

Wie oben bereits beschrieben werden wir hier einen neuen Ordner erzeugen und diesen mit den notwendigen Rechten für die Nextcloud bzw. dem Webserveruser (www-data) versehen.

mkdir /mnt/nextcloud_data/
chown -R www-data:www-data /mnt/nextcloud_data/

Um in dem soeben erzeugten Verzeichnis eine Netzwerkfreigabe einzubinden öffnen wir die fstab Datei.

nano /etc/fstab

und fügen folgenden Eintrag hinzu (Ihr müsst diesen euren Gegebenheiten anpassen)

//IP_des_Hosts/Ordner_auf_dem_Host /mnt/nextcloud_data cifs defaults,uid=33,gid=33,dir_mode=0770,file_mode=0770,username=<USERNAME>,password=<PASSWORD>

Als nächstes müssen wir den Webordner, indem wir die Nextcloud kopiert haben noch auf den Webuser umschreiben und entsprechende Dateisystemrechte geben.

chown -R www-data:www-data /var/www/nextcloud/
chmod -R 755 /var/www/nextcloud/

Um die Kommunikation mit der Nextcloud abzusichern werden wir im folgenden Schritt SSL Zertifikate über Lets Encrypt erzeugen.

Hierzu nutzen wir den Dienst Certbot, der nicht nur ein Zertifikat erzeugt, sondern dieses auch nach 90 Tagen erneuert, da die Zertifikate nur 90 Tage gültig sind.

Zu beachten ist jedoch, dass diese Zertifikate nur ausgestellt werden, wenn eure Nextcloud Instanz mit der in dem Befehl angegebenen Domain erreichbar ist. Hierzu müsst ihr eure Domain über den A-Record (IPv4) bzw. AAAA-Record (IPv6) auf eure Nexcloud umleiten.

apt install certbot python3-certbot-apache
certbot --apache -m master@domain.com -d cloud.domain.com

Nach dem Ausstellen des Zertifikats könnt ihr eure Domain ansurfen (https://) und die Installation abschließen. Denkt bei der Einrichtung daran, dass Datenverzeichnis auf das oben angelegte Verzeichnis umzulenken und nicht die Standardeinstellungen zu verwenden.

Optimierung der Nextcloud

Eure Nextcloud ist nun bereits fertig eingerichtet, jedoch gibt es einige Dinge, die ihr zur Performancesteigerung noch tun könnt.

Hierzu zählt vor allem das ausführen von Hintergrundaufgaben. Standardmäßig werden Arbeitsabläufe der Nextcloud nur abgearbeitet, wenn ein User angemeldet ist. Dies funktioniert soweit auch, stößt jedoch bei Aufgaben, die zyklisch laufen sollten (z.B. Indexierung von Inhalten) an seine Grenzen.

Um der Nextcloud zu ermöglichen Aufgaben zu jederzeit im Hintergrund auszuführen können wir diese auf so genannte Cronjobs umlenken. Diese werden zyklisch vom Server selbst angestoßen und bedingen keine Aktivität von Benutzern.

Die Hintergrundaufgaben müssen wir für den Benutzer www-data anlegen, da diese für den Webserver ausgelegt sind.

crontab -u www-data -e

Hierbei öffnet sich eine Datei, in der wir folgenden Eintrag hinterlegen

*/5  *  *  *  * php8.2 -f /var/www/nextcloud/cron.php

Dieser Eintrag besagt, dass alle 5 Minuten die Datei cron.php aufgerufen wird, in der alle notwendigen Hintergrundaufgaben der Nextcloud definiert sind.

Die Nextcloud sollte sich nach dem ersten triggern des Jobs selbstständig auf Cronjob umstellen.

Weitere Optimierungen stellen wir mit dem Editor unserer Wahl in der config.php ein.

nano /var/www/nextcloud/config/config.php

Alle Einträge müssen vor dem letzten „);“ eingefügt werden und enden mit einem „,“

'maintenance_window_start' => 1,
'default_phone_region' => 'DE',
'memcache.local' => '\OC\Memcache\APCu',
'filelocking.enabled' => true,
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => array(
  'host' => 'localhost',
  'port' => 6379,
  'timeout' => 0.0,
  'password' => '', // Optional, if not defined no password will be used.
  ),

Nach dem speichern der Datei sind die Einstellungen bereits aktiv und eure Nextcloud ist einsatzbereit.


Beitrag veröffentlicht

in

,

von

Schlagwörter:

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert