Eine selbst gehostete Nextcloud fühlt sich oft an wie eine lahme Cloud. Die Oberfläche ruckelt, Ordner laden zäh, und das Admin-Dashboard meckert mit gelben Warnungen über fehlende Memory-Caches. Dabei ist die Ursache fast immer dieselbe: Nextcloud läuft ohne effiziente Caching-Schicht. Die Lösung heisst Redis plus APCu – und sie ist in einer Viertelstunde konfiguriert.
Warum Nextcloud so langsam wirkt
Nextcloud ist eine PHP-Anwendung. Jeder Request, jede Seitenansicht und jeder Dateilisting muss Server-seitig verarbeitet werden. Ohne einen Memory-Cache werden dabei Konfigurationen, Datenbank-Ergebnisse und Sperrinformationen bei jedem einzelnen Request neu geladen. Das ist verschwendete CPU-Arbeit – und bei grösseren Dateibäumen oder vielen Benutzern spürt man das sofort als Latenz.
Nextcloud unterscheidet drei Cache-Ebenen, die man verwirrenderweise alle braucht:
- Lokaler Cache (APCu): Hält Daten im Prozess-Speicher des jeweiligen PHP-FPM-Workers. Ideal für oft genutzte, statische Werte wie die Konfiguration.
- Verteilter Cache (Redis): Wird von mehreren Web-Workern geteilt – für DB-Ergebnisse, Sessions und Sperren. Das verhindert, dass jeder Worker Datenbankabfragen wiederholt.
- Datei-Locking (Redis): Verhindert, dass zwei Clients dieselbe Datei gleichzeitig überschreiben. Ohne Redis-Locking kann es zu Datenverlust beim gleichzeitigen Bearbeiten kommen.
Falsche und richtige Konfiguration
Der häufigste Fehler ist, nur memcache.local zu setzen oder APCu für alle drei Ebenen zu verwenden. APCu funktioniert nur pro Worker und eignet sich nicht als verteilter Cache. Die korrekte Einrichtung sieht so aus – eingetragen in der config/config.php:
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
'timeout' => 0,
),
Danach Cache zurücksetzen, damit Nextcloud die neuen Einstellungen übernimmt:
sudo -u www-data php occ maintenance:mode --off
sudo -u www-data php occ cache:clear
sudo systemctl restart php??-fpm # z. B. php8.3-fpm
Redis installieren und absichern
Die Installation auf Ubuntu/Debian ist simpel:
sudo apt install redis-server php-redis
sudo systemctl enable --now redis-server
Check, ob Redis läuft:
redis-cli ping # -> PONG bedeutet: läuft
Für einen Server reicht die Standard-Konfiguration. Zwei Dinge solltest du trotzdem anpassen:
maxmemorysetzen, z. B.128mb, damit Redis nicht den RAM des Hosts auffrisst.maxmemory-policy allkeys-lru, damit bei Voll-Lauf alte Einträge verdrängt statt Requests blockiert werden.
maxmemory 128mb
maxmemory-policy allkeys-lru
APCu für PHP-FPM optimieren
APCu braucht ein bisschen PHP-FPM-Konfiguration, um effektiv zu sein. Standardmässig ist der Speicher auf 32 MB begrenzt – für Nextcloud reicht das, aber der Wert sollte in /etc/php/*/cli/conf.d/20-apcu.ini gesetzt werden:
apc.enabled=1
apc.shm_size=64M
apc.ttl=7200
apc.enable_cli=1
Wichtig: apc.enable_cli=1 aktiviert APCu für CLI-Befehle wie occ. Ohne diesen Wert laufen occ-Befehle deutlich langsamer, weil sie auf jeden Cache-Eintrag verzichten müssen.
Was sich konkret verbessert
| Bereich | Vorher (ohne Cache) | Nachher (Redis + APCu) |
|---|---|---|
| Dashboard-Ladzeit | 1,8 – 2,5 s | 0,4 – 0,7 s |
| Dateilisting (500 Ordner) | 1,2 s | 0,3 s |
| CPU-Last (idle) | 40 – 60 % | 5 – 15 % |
Stolpersteine aus der Praxis
- Redis läuft über TCP (nicht Unix-Socket): Wenn er über
localhostangesprochen wird, der aber auf IPv6 zeigt, kann es zu Timeouts kommen – dann explizit127.0.0.1eintragen. - Ubuntu-Paketversionen: Redis in den Repos ist meist aktuell genug. Für Nextcloud brauchst du keine spezielle Version, nur den
php-redisTreiber. - Backup: Redis ist ein Cache – er darf geleert werden. Leere ihn ruhig mal nach Updates, um sicherzugehen, dass keine veralteten Einträge hängen.
- APCu-Shm-Grösse: 64 MB reichen für die meisten Nextcloud-Instanzen. Bei sehr vielen Apps oder vielen Benutzern kann es knapp werden –
apc.shm_sizelässt sich jederzeit erhöhen, danach PHP-FPM neustarten. - Redis-Passwort: Wenn Redis auf einem anderen Host läuft, unbedingt
requirepasssetzen und das Passwort in der Nextcloud-Konfiguration hinterlegen.
Fazit
Redis + APCu ist die einfachste und wirkungsvollste Optimierung für eine selbst gehostete Nextcloud. Nach der Umstellung ist das Admin-Dashboard grün statt gelb, und die Oberfläche fühlt sich endlich flüssig an. Die Werte in der Tabelle oben sind real gemessen – der Unterschied ist nicht subtil, sondern gravierend. Wer Nextcloud im Homelab betreibt, sollte sich diese Viertelstunde schenken. Die gelben Warnungen im Admin-Dashboard verschwinden, die CPU bleibt im Leerlauf kühl, und die Nutzer merken, dass die Cloud endlich so läuft, wie sie soll.
Mehr aus dem Homelab
- Mein Nextcloud-Projekt – Aufbau und Setup auf TrueNAS
- Homelab & IT Learnings – was in der Praxis wirklich funktioniert
- Projekte-Übersicht – alle Vorhaben im Überblick
- Docker Compose Watch – Hot-Reload für Dev-Container
🎯 Monitoring-Tipp: Prometheus & Grafana: Docker-Monitoring im Homelab selbst hosten – Mit Prometheus siehst du sofort, ob Nextcloud oder Redis die Ressourcen hochtreiben.