<hr>
<h2>Ziel der Anleitung</h2>
<p>Diese Anleitung beschreibt eine klassische Nextcloud-Installation auf einem Linux-Server. Sie eignet sich für kleine Umgebungen, Homelab-Systeme oder interne Server, bei denen Nextcloud direkt auf dem System installiert wird.</p>
<p>Verwendete Komponenten:</p>
<ul>
<li>Apache2 als Webserver</li>
<li>PHP 8.3 mit benötigten Modulen</li>
<li>MariaDB als Datenbank</li>
<li>Redis und APCu für Caching und File Locking</li>
<li>Cronjob für Hintergrundaufgaben</li>
<li>optional LDAP/Active Directory</li>
<li>optional Reverse Proxy Manager für HTTPS-Zugriff von außen</li>
</ul>
<p>Hinweis: Platzhalter wie <code>cloud.example.de</code>, <code>192.168.x.x</code>, <code>nextclouduser</code> und <code>sicheres_passwort</code> müssen an die eigene Umgebung angepasst werden.</p>
<hr>
<h2>1. System aktualisieren</h2>
<p>Zuerst wird das System aktualisiert:</p>
<pre><code>
sudo apt update
sudo apt upgrade -y
</code></pre>
<p>Falls noch nicht vorhanden, können grundlegende Werkzeuge installiert werden:</p>
<pre><code>
sudo apt install -y software-properties-common unzip nano wget curl ca-certificates
</code></pre>
<hr>
<h2>2. Apache installieren</h2>
<p>Nextcloud kann mit Apache betrieben werden. Installation:</p>
<pre><code>
sudo apt install -y apache2
</code></pre>
<p>Apache starten und aktivieren:</p>
<pre><code>
sudo systemctl enable --now apache2
</code></pre>
<hr>
<h2>3. PHP 8.3 installieren</h2>
<p>Je nach Ubuntu-Version ist PHP 8.3 nicht direkt in den Standard-Paketquellen enthalten. In diesem Fall kann das Ondřej-PPA verwendet werden:</p>
<pre><code>
sudo add-apt-repository ppa:ondrej/php -y
sudo add-apt-repository ppa:ondrej/apache2 -y
sudo apt update
</code></pre>
<p>Danach PHP 8.3 und die benötigten Module installieren:</p>
<pre><code>
sudo apt install -y \
php8.3 libapache2-mod-php8.3 php8.3-cli php8.3-fpm \
php8.3-mysql php8.3-zip php8.3-xml php8.3-mbstring \
php8.3-gd php8.3-curl php8.3-imagick php8.3-intl \
php8.3-bcmath php8.3-gmp php8.3-apcu php8.3-redis \
php8.3-smbclient php8.3-ldap php8.3-memcached php8.3-bz2 \
php-pear redis-server libmagickcore-6.q16-6-extra
</code></pre>
<hr>
<h2>4. PHP-Konfiguration anpassen</h2>
<p>Die Apache-PHP-Konfiguration öffnen:</p>
<pre><code>
sudo nano /etc/php/8.3/apache2/php.ini
</code></pre>
<p>Empfohlene Werte, abhängig von Servergröße und Umgebung:</p>
<pre><code>
memory_limit = 1024M
upload_max_filesize = 20G
post_max_size = 20G
date.timezone = Europe/Berlin
output_buffering = Off
</code></pre>
<p>Für OPcache können folgende Werte gesetzt oder angepasst werden:</p>
<pre><code>
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=10000
opcache.save_comments=1
opcache.revalidate_freq=1
</code></pre>
<p>Hinweis: Sehr hohe Werte wie <code>memory_limit = 10G</code> oder <code>opcache.memory_consumption = 2048</code> sind nur sinnvoll, wenn der Server entsprechend viel RAM hat. Für viele Installationen reichen kleinere Werte aus.</p>
<hr>
<h2>5. MariaDB installieren und Datenbank anlegen</h2>
<p>MariaDB installieren:</p>
<pre><code>
sudo apt install -y mariadb-server
sudo systemctl enable --now mariadb
</code></pre>
<p>Grundabsicherung starten:</p>
<pre><code>
sudo mysql_secure_installation
</code></pre>
<p>Danach in die MariaDB-Konsole wechseln:</p>
<pre><code>
sudo mysql
</code></pre>
<p>Datenbank und Benutzer erstellen:</p>
<pre><code>
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'sicheres_passwort_hier_eintragen';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
</code></pre>
<p>Wichtig: Das Passwort sollte lang und zufällig sein und nicht in öffentlichen Dokumentationen oder Git-Repositories landen.</p>
<hr>
<h2>6. Nextcloud herunterladen</h2>
<p>In das temporäre Verzeichnis wechseln und Nextcloud herunterladen.</p>
<p>Beispiel mit einer festen Version:</p>
<pre><code>
cd /tmp
wget https://download.nextcloud.com/server/releases/latest.zip -O nextcloud.zip
unzip nextcloud.zip
sudo mv nextcloud /var/www/
</code></pre>
<p>Berechtigungen setzen:</p>
<pre><code>
sudo chown -R www-data:www-data /var/www/nextcloud/
sudo chmod -R 755 /var/www/nextcloud/
</code></pre>
<hr>
<h2>7. Datenverzeichnis vorbereiten</h2>
<p>Es ist sinnvoll, das Nextcloud-Datenverzeichnis außerhalb des Webroots abzulegen.</p>
<p>Beispiel:</p>
<pre><code>
sudo mkdir -p /home/data
sudo chown -R www-data:www-data /home/data
sudo chmod 750 /home/data
</code></pre>
<p>Dieses Verzeichnis wird später im Webinstaller als Datenverzeichnis angegeben.</p>
<hr>
<h2>8. Apache VirtualHost erstellen</h2>
<p>Neue Apache-Konfiguration anlegen:</p>
<pre><code>
sudo nano /etc/apache2/sites-available/nextcloud.conf
</code></pre>
<p>Beispielkonfiguration:</p>
<pre><code>
<VirtualHost *:80>
ServerAdmin admin@example.de
ServerName cloud.example.de
DocumentRoot /var/www/nextcloud
<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}/nextcloud_error.log
CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
</VirtualHost>
</code></pre>
<p>Benötigte Apache-Module aktivieren:</p>
<pre><code>
sudo a2ensite nextcloud.conf
sudo a2enmod rewrite headers env dir mime
sudo systemctl restart apache2
</code></pre>
<hr>
<h2>9. Webinstaller ausführen</h2>
<p>Jetzt im Browser die lokale IP oder Domain aufrufen:</p>
<pre><code>
http://SERVER-IP/
</code></pre>
<p>Im Installer werden eingetragen:</p>
<ul>
<li>Admin-Benutzer und Admin-Passwort</li>
<li>Datenverzeichnis, zum Beispiel <code>/home/data</code></li>
<li>Datenbank: MariaDB/MySQL</li>
<li>Datenbankname: <code>nextcloud</code></li>
<li>Datenbankbenutzer: <code>nextclouduser</code></li>
<li>Datenbankpasswort: das zuvor gesetzte Passwort</li>
<li>Datenbankhost: <code>localhost</code></li>
</ul>
<p>Nach Abschluss können die Standard-Apps installiert werden, falls gewünscht.</p>
<hr>
<h2>10. APCu aktivieren</h2>
<p>APCu wird für lokalen Cache verwendet.</p>
<p>Datei öffnen:</p>
<pre><code>
sudo nano /etc/php/8.3/mods-available/apcu.ini
</code></pre>
<p>Folgenden Wert setzen:</p>
<pre><code>
apc.enable_cli=1
</code></pre>
<hr>
<h2>11. Redis für File Locking konfigurieren</h2>
<p>Redis-Konfiguration öffnen:</p>
<pre><code>
sudo nano /etc/redis/redis.conf
</code></pre>
<p>Diese Werte setzen oder anpassen:</p>
<pre><code>
port 0
unixsocket /var/run/redis/redis.sock
unixsocketperm 770
</code></pre>
<p><code>www-data</code> zur Redis-Gruppe hinzufügen:</p>
<pre><code>
sudo usermod -a -G redis www-data
</code></pre>
<p>Redis und Apache neu starten:</p>
<pre><code>
sudo systemctl restart redis-server
sudo systemctl restart apache2
</code></pre>
<hr>
<h2>12. Nextcloud config.php optimieren</h2>
<p>Die Nextcloud-Konfiguration öffnen:</p>
<pre><code>
sudo nano /var/www/nextcloud/config/config.php
</code></pre>
<p>Innerhalb des bestehenden Arrays können folgende Werte ergänzt oder angepasst werden:</p>
<pre><code>
'trusted_proxies' =>
array (
0 => '192.168.x.x',
),
'overwriteprotocol' => 'https',
'default_language' => 'de',
'default_locale' => 'de',
'default_phone_region' => 'DE',
'skeletondirectory' => '',
'loglevel' => 2,
'filelocking.enabled' => true,
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => '/var/run/redis/redis.sock',
'port' => 0,
'timeout' => 0.0,
),
'log_type' => 'file',
'logfile' => '/var/www/nextcloud/data/nextcloud.log',
'logdateformat' => 'F d, Y H:i:s',
'maintenance' => false,
</code></pre>
<p>Hinweise:</p>
<ul>
<li><code>trusted_proxies</code> nur setzen, wenn wirklich ein Reverse Proxy verwendet wird.</li>
<li>Die IP-Adresse muss die interne IP des Reverse Proxys sein.</li>
<li><code>overwriteprotocol => https</code> ist hinter einem HTTPS-Reverse-Proxy häufig notwendig.</li>
<li><code>loglevel = 2</code> ist für den Normalbetrieb sinnvoller als <code>4</code>, da <code>4</code> sehr viele Debug-Informationen erzeugt.</li>
</ul>
<hr>
<h2>13. Cronjob für Nextcloud einrichten</h2>
<p>Nextcloud sollte nicht per AJAX-Cron laufen, sondern per System-Cron.</p>
<p>Cron für <code>www-data</code> öffnen:</p>
<pre><code>
sudo crontab -u www-data -e
</code></pre>
<p>Eintragen:</p>
<pre><code>
*/5 * * * * php -f /var/www/nextcloud/cron.php
</code></pre>
<p>Danach in Nextcloud unter:</p>
<pre><code>
Administrationseinstellungen → Grundeinstellungen → Hintergrund-Aufgaben
</code></pre>
<p>auf <code>Cron</code> umstellen.</p>
<hr>
<h2>14. HTTPS und HSTS</h2>
<p>Wenn Nextcloud direkt mit Let's Encrypt auf dem Server betrieben wird, kann HSTS in der Apache-SSL-Konfiguration gesetzt werden.</p>
<p>Beispiel innerhalb des SSL-VirtualHosts:</p>
<pre><code>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
</code></pre>
<p>Wichtig: HSTS sollte erst aktiviert werden, wenn HTTPS zuverlässig funktioniert. Bei falscher Konfiguration kann man sich sonst selbst aussperren oder Browser auf HTTPS zwingen, obwohl das Zertifikat/Proxy-Setup noch nicht sauber ist.</p>
<hr>
<h2>15. Einstellungen im Nginx Proxy Manager</h2>
<p>Wenn Nextcloud hinter Nginx Proxy Manager läuft, sind folgende Optionen sinnvoll:</p>
<ul>
<li>Block Common Exploits: aktivieren</li>
<li>Websockets Support: aktivieren</li>
<li>Force SSL: aktivieren</li>
<li>HTTP/2 Support: aktivieren</li>
<li>HSTS: erst aktivieren, wenn HTTPS sauber funktioniert</li>
</ul>
<p>Im Feld <code>Advanced</code> können folgende Werte ergänzt werden:</p>
<pre><code>
client_body_buffer_size 512k;
proxy_read_timeout 86400s;
client_max_body_size 0;
location /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/webfinger {
return 301 $scheme://$host/index.php/.well-known/webfinger;
}
location /.well-known/nodeinfo {
return 301 $scheme://$host/index.php/.well-known/nodeinfo;
}
</code></pre>
<hr>
<h2>16. Optionale LDAP-/Active-Directory-Anbindung</h2>
<p>Für die LDAP-Anbindung wird in Nextcloud die App <code>LDAP user and group backend</code> benötigt.</p>
<p>Beispielwerte mit Platzhaltern:</p>
<pre><code>
Host: ldap://192.168.x.x
User DN: CN=ldap,CN=Users,DC=example,DC=de
Passwort: Passwort des LDAP-Benutzers
Base DN: DC=example,DC=de
</code></pre>
<p>Erklärung:</p>
<ul>
<li><code>Host</code>: IP oder DNS-Name des Domain Controllers</li>
<li><code>User DN</code>: Distinguished Name des LDAP-Benutzers</li>
<li><code>Passwort</code>: Passwort dieses LDAP-Benutzers</li>
<li><code>Base DN</code>: Basis der Domäne, zum Beispiel <code>DC=example,DC=de</code></li>
</ul>
<p>In produktiven Umgebungen sollte nach Möglichkeit LDAPS verwendet werden:</p>
<pre><code>
ldaps://dc01.example.de
</code></pre>
<hr>
<h2>17. Wartungsbefehle und Fehlerbehebung</h2>
<h3>Fehlende Datenbank-Indizes</h3>
<p>Wenn Nextcloud fehlende Indizes meldet:</p>
<pre><code>
cd /var/www/nextcloud
sudo -u www-data php occ db:add-missing-indices
</code></pre>
<h3>Too Many Requests / Bruteforce-Sperre</h3>
<p>Wenn ein Benutzer sein Passwort geändert hat, aber ein alter Client weiter mit dem alten Passwort verbindet, kann Nextcloud die IP blockieren.</p>
<p>Typische Meldung:</p>
<pre><code>
OCA\DAV\Connector\Sabre\Exception\TooManyRequests
</code></pre>
<p>Zurücksetzen für eine bestimmte öffentliche Client-IP:</p>
<pre><code>
sudo -u www-data php /var/www/nextcloud/occ security:bruteforce:reset <OEFFENTLICHE-IP>
</code></pre>
<p>Beispiel:</p>
<pre><code>
sudo -u www-data php /var/www/nextcloud/occ security:bruteforce:reset 203.0.113.10
</code></pre>
<h3>Nextcloud-Systemcheck</h3>
<p>Nach der Installation sollte der Nextcloud-Adminbereich geprüft werden:</p>
<pre><code>
Administrationseinstellungen → Übersicht
</code></pre>
<p>Dort werden Hinweise zu fehlenden PHP-Modulen, falschen Proxy-Einstellungen, fehlenden Indizes oder Hintergrundaufgaben angezeigt.</p>
<hr>
<h2>18. Abschluss-Checkliste</h2>
<ul>
<li>System aktualisiert</li>
<li>Apache installiert und aktiviert</li>
<li>PHP 8.3 inklusive Module installiert</li>
<li>PHP-Werte angepasst</li>
<li>MariaDB installiert</li>
<li>Datenbank und Benutzer erstellt</li>
<li>Nextcloud nach <code>/var/www/nextcloud</code> entpackt</li>
<li>Datenverzeichnis vorbereitet</li>
<li>Apache VirtualHost eingerichtet</li>
<li>Webinstaller abgeschlossen</li>
<li>APCu aktiviert</li>
<li>Redis für File Locking eingerichtet</li>
<li>Cronjob für <code>www-data</code> eingerichtet</li>
<li>Reverse Proxy korrekt konfiguriert</li>
<li>Admin-Übersicht in Nextcloud geprüft</li>
</ul>
<hr>
<h2>Fazit</h2>
<p>Mit Apache, PHP 8.3, MariaDB, Redis und APCu lässt sich eine stabile Nextcloud Community Edition Installation aufbauen. Wichtig ist, nach der Grundinstallation die Optimierungen sauber nachzuziehen: Caching, Cronjob, Proxy-Einstellungen und Admin-Übersicht entscheiden später darüber, ob die Installation dauerhaft sauber und performant läuft.</p>