In diesem Artikel wird beschrieben, wie wir eine Nextcloud in eigenem Netz aufsetzen, und zwar in DMZ Bereich. Der Server sollte vom Internet aus als auch von lokalem Netz erreichbar sein. Auf dem unterstehenden Schema sind 2 Firewalls zu sehen. Wir können das selbstverständlich auch mit einer Firewall und verschiedenen vLans konfigurieren. Die Einstellungen auf den Firewalls müssen so eingestellt werden, dass der Server in DMZ vom lokalen Netz erreichbar ist. Von außen sollte der Server per Port 443 erreichbar sein und die Internetadresse nextcloud.<yourdomain.xx> muss in DNS eingetragen sein.
In DMZ Bereich installieren wir auf einer VM Linux Debian. Der Server ist von dem lokalen Netz erreichbar und von DMZ zu lokalem Netz sind alle Port geschlossen. Den Server installieren und konfigurieren wir in DMZ von lokalem Netz. Damit die Zugriffe funktionieren, müssen wir bestimmte Regel in den Firewalls eintragen. IP-Adressen der externen Firewall WAN: feste IP vom Provider (https://nextcloud.<youdomain.xx>) LAN-DMZ-Seite: 192.168.2.1 Ausgangsinformationen des Nextcloud Servers:
IP-Adressen der internen Firewall LAN-DMZ-Seite: 192.168.2.2 LAN-Lokales-Netz-Seite:172.16.0.1
Lokales Netzwerk Netz: 172.16.0.0/22 Gateway: 172.16.0.1/22 DNS: 192.168.2.1 oder andere DNS
Eine VM in DMZ wird erstellt. Entsprechend viel RAM und entsprechende große Festplatte bzw. Festplatten sollten wir definieren. Es wird Debian 12 Standard Installation durchgeführt. Die IP wie z.B. oben wird definiert. Weitere Installation der Pakete als root wird durchgeführt.
Den Server müssen wir für Nextcloud vorbereiten. Zuerst wird Apache, MySQL und PHP installiert. Bevor wir das machen, sollten wir noch die Liste der Repositorys ergänzen. Im ersten Schritt werden die Pakete curl und lsb-release installiert. Danach wird ein PHP-Repository für das Debian-System hinzuzufügen. Am Ende müssen wir noch die GPG-Schlüssel in das Verzeichnis /etc/apt/trusted.gpg.d herunterladen.
d-ncloud:~# apt-get install curl lsb-release
d-ncloud:~# echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list
Es wird noch zusätzlich ein Paket installiert. Dieses Paket enthielt Header-Dateien und statische Bibliotheken, die zum Kompilieren von Programmen mit MagickCore erforderlich sind.
d-ncloud:~# apt-get install -y libmagickcore-dev
Die PHP Einstellungen müssen angepasst werden. Mit php -v können wir zuerst herausfinden, welche PHP-Version installiert wurde. Danach wechseln wir den Ordner und editieren die php.ini Datei. Die 8.x muss durch die richtige Version ersetzt werden. In der Debian-12.0.0 ist das die Version 8.2.
d-ncloud:~# cd /etc/php/8.x/apache2
Mit nano können wir die php.ini Datei bearbeiten. Für die Nextcloud Version 26 können wir die folgenden Werte einsetzen, meistens auskommentieren.
file_uploads = On allow_url_fopen = On memory_limit = 512M upload_max_filesize = 500M post_max_size = 600M max_execution_time = 300 display_errors = Off date.timezone = Europe/Amsterdam output_buffering = Off
In der gleichen /etc/php/8.x/apache2/php.ini Datei müssen wir noch einiger Zeilen auskommentieren.
Die Datei /etc/php/8.x/cli/conf.d/20-apcu.ini wird geöffnet und am Ende der Datei wird die folgende Zeile eingefügt.
apc.enable_cli = 1
Der Apache Dienst wird neu gestartet um die geänderte Werte aufzunehmen.
d-ncloud:~# systemctl restart apache2.service
Installieren und Konfigurieren von MariaDB
Es wird mariadb installiert. Nach der Installation und Konfiguration werden noch die Datenbank für Nextcloud und ein Benutzer mit Passwort für den Zugriff auf die Datenbank angelegt.
Wir beginnen mit der Installation und Konfiguration der mariadb. Die Pakete mariadb-server mariadb-client werden installiert. Nach der Installtion überprüfen wir den Status der Datenbank
Die Datenbank sollte man noch absichern z.B. Passwort vergeben und einige Einstellungen anpassen. Wir verwenden am besten den Befehl mysql_secure_installation. Das Passwort wird definiert und sonnst nehmen wir die vorgeschlagene Option. Die ist immer als Großbuchstabe angezeigt.
d-ncloud:~# mysql_secure_installation
Datenbank und Benutzer für Nextcloud anlegen
In einem shell Fenster melden wir uns mir dem unterstehenden mysql-Befehl in der mariadb-Shell an. Das Passwort was wir definiert haben, muss man eingeben. Sollten wir als root eingeloggt sein, reicht es wir nur mysql -u root eingeben. Danach sind wir in der maradb-Shell. Das erkennen wir Anhang des Prompt-Zeichen MariaDB [(none)]>
d-ncloud:~# mysql -u root -p
Die Datenbank und der Benutzer mit Passwort wird angelegt. Das Wort secret+- ist das Passwort von dem Benutzer. Ersetze das Passwort so wie es für dich am besten passt.
MariaDB [(none)]> CREATE DATABASE nextcloud_db; MariaDB [(none)]> CREATE USER nextclouduser@localhost IDENTIFIED BY 'secret+-';
Dem Benutzer nextclouduser wird erlaubt, auf die Datenbank nextcloud_db zuzugreifen.
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud_db.* TO nextclouduser@localhost;
Die Tabellenberechtigungen werden neu geladen. Danach verlassen wir mit exit; mariadb-Shell.
Nextcloud wird heruntergeladen, in unserem Fall die neuste Version. Wenn wir eine ältere Version brauchen, dann können wir uns alle verfügbaren Version in Browser mit dem Link https://download.nextcloud.com/server/releases anschauen.
d-ncloud:~# cd /var/www/ d-ncloud:~# curl -o nextcloud.zip https://download.nextcloud.com/server/releases/latest.zip
Wir installieren noch das unzip Paket.
d-ncloud:~# apt install unzip
Nextcloud wird entpackt und Berechtigungen des Verzeichnisses werden angepasst.
Vorausetzungen für das abholen des Let's Entcrypt Zertifikates.
Um ein Zertifikat für unsere Subdomain nextcloud.<youdomain.xx>von Let's Entcrypt zu holen, muss man bestimme Voraussetzungen erfühlen.
Der Apache-Dienst muss man richtig konfigurieren. Das haben wir schon gemacht.
Unsere Internetadresse (unsere Server) muss aus dem Internet erreichbar sein. Kurz gesagt, die Subdomain-Adresse muss in einem öffentlichen DNS eingetragen sein. In unserem Fall befindet sich der Server in DMZ und besitzt eine private IP-Adresse, deshalb müssen wir folgendes tun.
In öffentlichen DNS wird die öffentliche IP-Adresse des externen Routers/Firewall eingetragen.
Eine Firewallregel wird definiert. Alle Anfragen an Port 443 werden an unsere Server (IP-Adresse, private Adresse) weitergeleitet.
Sollten wir keine feste IP-Adresse besitzen, können wir auch den DynDNS Service nutzen.
Wenn die Voraussetzungen erfüllt sind, können wir unser Zertifikat abholen.
Wir holen uns das Zertifikat für unsere Subdomain nextcloud.<youdomain.xx>.
Die Installation von Nextcloud wird fortgefahren. Im Browser wird die definierte URL angegeben https://nextcloud.youdomain.xx Es wird selbstverständlich die richtige URL eingegeben. Hier kann man den Administrator definieren und die Eingaben zu der Datenbank machen.
Im Hintergrund werden Tabellen in der Datenbank erstellt und der Administrator Benutzer angelegt. Im nächsten Schritt hat man die Möglichkeit die Standardapps zu installieren, das dauert eine Weile. Es kann man auch diesen Schritt überspringen und die Apps später zu installieren. Ich installiere die immer.
Nach Abschluss der Installation kann man sich einloggen und Nextcloud verwalten.
Nextcloud muss in regelmäßigen Abständen bestimme Aufgabe ausführen, deshalb müssen wir ein Cronjob erstellen. Den Cronjob sollte der Benutzer: www-data ausführen.
d-ncloud:~# crontab -u www-data -e
Die Ausführung sollte alle 5 Minuten stattfinden. Die folgende Zeile wird am Ende der Datei eingefügt.
*/5 * * * * php -f /var/www/nextcloud/cron.php
Das Letsencrypt Zertifikat ist nur 3 Monate gültig, deshalb müssen wir in regelmäßigen Abständen, kleiner als 3 Monate, das Zertifikat erneuern. Das Zertifikat kann man erst erneuern, wenn die Gültigkeit des Zertifikates nicht länger als 30 Tage ist. Per Cronjob kann man die Erneuerung steuern. In der Datei /etc/crontab kann die folgenden Zeilen einfügen. Jeden Sonntag um 3:00 Uhr wird dieser cronjob ausgeführt. Es wird versucht das Zertifikat zu erneuern und Apache wird neu geladen.
Wir können noch mit bestimmten Einstellungen in der /var/www/nextcloud/config/config.php die Nextcloud Performance verbessern. Zwei Caching-Programme APCU und Redis, die sich in der Vergangenheit bewährt haben und gut mit der Nextcloud zusammenarbeiten, können wir installieren und konfigurieren. Danach müssen wir die entsprechen Einstellungen in der config.php Datei vornehmen.
Das PHP Modul php-apcu haben wir schon installiert. Jetzt müssen wir in der Datei /var/www/nextcloud/config/config.php eine Zeile einfügen.
'memcache.local' => '\OC\Memcache\APCu',
Redis Caching wird installiert.
d-ncloud:~# apt install redis-server php-redis
Die Datei /etc/redis/redis.conf wird von uns ein bisschen angepasst. Die folgenden Zeilen sollte man auskommentieren.
port 6379 unixsocket /run/redis/redis-server.sock unixsocketperm 770
Der Benutzer redis wird zu der Gruppe www-data zugefügt.
d-ncloud:~# usermod -a -G redis www-data
In der Nextcloud Config-Datei /var/www/nextcloud/config/config.php werden die redis Einstellungen definiert. Die Datei wird z.B. mit nano geöffnet und bearbeitet. Folgende Zeilen werden zugefügt.