Nextcloud hat den Ruf, langsam zu sein. In den meisten Fällen liegt das nicht an der Software, sondern an vier Voreinstellungen, die für eine Testinstallation gedacht sind. Wer sie ändert, hat einen Dienst, der sich anfühlt wie ein kommerzieller Anbieter, auf einem VPS für ein paar Euro im Monat.
Zuerst: die Prüfliste des Systems lesen#
Nextcloud sagt selbst, was fehlt. Der Weg dorthin ist Verwaltung → Übersicht, und er wird zu oft überflogen.
sudo -u www-data php occ status
sudo -u www-data php occ setupchecks # je nach Version: check
Was dort steht, ist keine Meinung, sondern eine Liste offener Punkte. Die vier wichtigsten daraus:
1. Hintergrundaufgaben: nicht per AJAX#
Standardmäßig führt Nextcloud Wartungsaufgaben aus, wenn jemand die Seite offen hat. Vorschaubilder, Dateiscans, Aufräumarbeiten und Mails hängen daran. Ohne Besucher passiert nichts und dann wächst der Rückstand, bis alles gleichzeitig kommt.
sudo -u www-data php occ background:cron
# /etc/systemd/system/nextcloudcron.service
[Service]
Type=oneshot
User=www-data
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
# /etc/systemd/system/nextcloudcron.timer
[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
[Install]
WantedBy=timers.target
systemctl enable --now nextcloudcron.timer
systemctl list-timers | grep nextcloud
2. Fehlende Datenbankindizes#
Nextcloud führt Indizes mit Updates ein, legt sie aber nicht automatisch an, bei großen Tabellen würde das die Installation minutenlang blockieren. Bis jemand den Befehl gibt, laufen Abfragen ohne Index.
sudo -u www-data php occ db:add-missing-indices
sudo -u www-data php occ db:add-missing-columns
sudo -u www-data php occ db:add-missing-primary-keys
Bei großen Installationen dauert das und sperrt Tabellen, also in ein Wartungsfenster legen, und vorher sichern. Der Gewinn ist danach unmittelbar spürbar, besonders in der Dateiliste.
3. Zwischenspeicher und Dateisperren#
Ohne Zwischenspeicher fragt Nextcloud viele Kleinigkeiten immer wieder bei der Datenbank an. Und die Sperrverwaltung für gleichzeitige Zugriffe landet ebenfalls in der Datenbank, das ist der Grund für die berüchtigte Meldung, eine Datei sei gesperrt.
// config/config.php
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => '/var/run/redis/redis-server.sock',
'port' => 0,
],
apt install redis-server php-redis php-apcu
systemctl enable --now redis-server
APCu ist prozesslokal. Wird die Sperrverwaltung darauf gelegt, sehen zwei PHP-Prozesse unterschiedliche Sperren und dann treten genau die Konflikte auf, die verhindert werden sollten. Für memcache.locking gehört ein gemeinsamer Speicher wie Redis dahinter, nicht APCu.
4. PHP-Grenzen für große Dateien#
Wer 4-GB-Videos hochlädt, scheitert an Voreinstellungen, die für Formulare gedacht sind:
; php.ini (FPM)
memory_limit = 1G ; Nextcloud empfiehlt mindestens 512M
upload_max_filesize = 16G
post_max_size = 16G
max_execution_time = 3600
# und im Proxy davor, sonst bricht er vorher ab
client_max_body_size 16G;
proxy_request_buffering off;
Die dritte Stelle wird gern vergessen: Auch der Reverse-Proxy hat eine Grenze, und er bricht ab, bevor PHP überhaupt gefragt wird.
Der Reverse-Proxy und die vertrauenswürdigen Adressen#
// config/config.php
'trusted_domains' => ['cloud.example.com'],
'trusted_proxies' => ['10.9.0.1'], // genau die Adresse des Proxys
'overwriteprotocol' => 'https',
'overwrite.cli.url' => 'https://cloud.example.com',
Ohne overwriteprotocol erzeugt Nextcloud hinter einem TLS-beendenden Proxy Links mit http://, die Anmeldung wirkt dann kaputt, obwohl der Server läuft. Und trusted_proxies gehört auf eine Adresse; ein ganzes Netz einzutragen hebt den Zweck auf.
Updates: einer nach dem anderen#
Nextcloud überspringt keine Hauptversionen. Von 28 auf 31 sind es drei Schritte, jeder mit eigenem Datenbankumbau.
# Vor jedem Schritt: Sicherung von Datenbank, config/ und data/
sudo -u www-data php occ maintenance:mode --on
sudo -u www-data php updater/updater.phar
sudo -u www-data php occ upgrade
sudo -u www-data php occ maintenance:mode --off
Dazu die Erweiterungen: Eine App, die für die neue Version noch nicht freigegeben ist, wird beim Update deaktiviert. Wenn es eine ist, an der Arbeitsabläufe hängen, ist das ein Grund zu warten, nicht ein Grund, den Update-Schritt zu erzwingen.
Läuft Nextcloud als VM unter Proxmox, ist ein Snapshot davor der bequemste Rückweg (Proxmox-Storage); die Datenebene bleibt trotzdem Sache des Backups.
Häufige Fragen#
Wie viel RAM braucht Nextcloud?#
Für eine Handvoll Nutzer laufen 2 GB. Angenehm wird es ab 4 GB, weil dann PHP-Prozesse, Datenbank-Puffer und Redis gleichzeitig Platz haben.
Warum ist die Weboberfläche langsam, die Synchronisation aber schnell?#
Weil die Oberfläche viele kleine Anfragen stellt. Genau dort wirken Objekt-Zwischenspeicher und Datenbankindizes, die Punkte 2 und 3 oben.
Kann ich die Daten auf externen Speicher legen?#
Ja, über externen Speicher oder ein Objektspeicher-Backend. Rechne dabei mit höherer Latenz pro Datei; für Archive gut, für den täglichen Arbeitsordner spürbar.
Container oder direkt installiert?#
Beides trägt. Das offizielle Container-Abbild nimmt PHP-Konfiguration ab, macht aber Eingriffe an php.ini und occ etwas umständlicher. Wer viel selbst justiert, ist mit einer klassischen Installation direkter dran.
Was tun, wenn Dateien „gesperrt“ bleiben?#
Zuerst Punkt 3 prüfen, meist liegt die Sperrverwaltung falsch. Danach lassen sich hängende Sperren mit occ maintenance:repair bzw. gezielt in der Sperrtabelle auflösen.
Kurz gesagt#
- Hintergrundaufgaben als systemd-Timer, nie per AJAX.
occ db:add-missing-indices, im Wartungsfenster, mit Sicherung.- Redis für Sperren, APCu nur lokal. Beides zusammen.
- Grenzwerte an drei Stellen: PHP, FPM und Proxy.
- Hauptversionen einzeln aktualisieren, Erweiterungen vorher prüfen.
Geschrieben aus dem laufenden Betrieb: MRMedia betreibt eigene Proxmox- Hosts, einen Backup-Server und Kundendienste in der EU. Fehler in einer Anleitung sind Fehler im eigenen Betrieb. Korrekturen bitte über Discord.