Generell sei auf die offizielle Webseite von Nextcloud hingewiesen, die auch in Nextcloud aufgerufen werden kann:


Dieser Link bezieht sich momentan auf Nextcloud 32, ab dem dieser Fehlerbeitrag startet.
Vorversionen können aber ähnliche/gleiche Fehler anzeigen oder auch zukünftige, je nach Fehlerbereich.
Hier starte ich die Fehler, die mir nach der Installation von Nextcloud 32 über den Webinstaller untergekommen und ich versuche auch gleich die bei mir erfolgreichen Lösungen hinzuzufügen.
Wenn Ihr also andere Fehler beobachtet, schreibt sie gerne unter diesen Beitrag und/oder wenn Ihr dazu eine Lösung habt, immer her damit.
Alle Lösungen, Befehle, Infos, .... auf eigene Gefahr und eigenes Risiko !!
Keine Haftung meinerseits auf irgendwas !!
BITTE vor jeglichen Aktionen ein Backup erstellen !!
Kein Backup, kein Mitleid !!
Bekannte Fehler und/oder fehlende Konfigurationen:
AppAPI-Bereitstellungs-Daemon
HTTPS-Zugriff und URLs
PHP OPcache
Fehler im Protokoll
Beginn des Wartungsfensters
MIME-Type-Migrationen verfügbar
In der Datenbank fehlen Indizes
E-Mail-Test
PHP Imagick-Modul
Lösung:AppAPI-Bereitstellungs-Daemon
Der Standard-Deploy-Daemon von AppAPI ist nicht eingerichtet. Bitte in den Einstellungen einen Standard-Deploy-Daemon registrieren, um externe Apps (Ex-Apps) zu installieren.
Entweder die App
AppAPI
deaktivieren und/oder deinstallierenoder fertig installieren/konfigurieren.
Bei diesem Daemon handelt es sich um eine seit Kurzem eingeführte neue Möglichkeit, neben der normalen Installation von Erweiterungen per App auch externe Erweiterungen über Docker Container hinzuzufügen.
Was Docker und dessen Container sind, möchte ich hier nicht beschreiben, das würde zu weit führen.
Weitere Infos zu diesem Daemon findet man hier:


Ich weiß nicht, inwieweit dieser Zusatz auf einem Raspberry Pi Sinn macht, da hier doch einige Ressourcen zusätzlich verbraucht werden.
Wer hier Nachteile in Sachen Performance feststellt, befürchtet oder diese Erweiterung nicht benötigt, kann diese "Fehlermeldung" ignorieren.
Da ich diese Möglichkeit aber nicht vorenthalten möchte und befürchte, dass man sich hier evtl. einige interessante Erweiterungen verbaut, habe ich meinen Konfigurationsweg hier beschrieben.
Ich nutze hier einen Pi 5 mit 8GB und einer 240GB SSD (per USB/SATA Adapter), kann daher nicht über z.B. einen Pi 4B mit 4GB berichten und habe dazu mangels freien Pi 4B auch keine Erfahrung.
Aber um das Ganze nun zu integrieren, bin ich wie folgt vorgegangen:
Docker installieren:
Wie immer führen wir zur Sicherheit ein komplettes Update vom Raspberry Pi OS aus:
Code: Alles auswählen
sudo apt update && sudo apt full-upgrade -y
ABER es schadet auch nicht, diesen zur Sicherheit nochmal laufen zu lassen.
Hierbei sollen die Pakete
ca-certificates
und curl
nachinstalliert werden.Code: Alles auswählen
sudo apt install ca-certificates curl -y
Im Normalfall muss dann auch folgendes Verzeichnis nicht angelegt werden, andernfalls erfolgt das durch:
Code: Alles auswählen
sudo install -m 0755 -d /etc/apt/keyrings
Code: Alles auswählen
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
Code: Alles auswählen
sudo chmod a+r /etc/apt/keyrings/docker.asc
Code: Alles auswählen
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Code: Alles auswählen
sudo apt update
Nun folgt die Installation von Docker selbst:
Code: Alles auswählen
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Code: Alles auswählen
sudo systemctl status docker
Code: Alles auswählen
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: enabled)
Active: active (running) since Fri 2025-10-10 18:13:25 CEST; 2min 28s ago
Invocation: hier stehen kryptische Zeichen
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 2918 (dockerd)
Tasks: 10
CPU: 235ms
CGroup: /system.slice/docker.service
└─2918 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/conttainerd.sock
Okt 10 18:13:25 nextcloud dockerd[2918]: time="2025-10-10T18:13:25.036167608+02.... usw.
Okt 10 18:13:25 nextcloud dockerd[2918]: time="2025-10-10T18:13:25.304049734+02.... usw.
.... und weitere Zeilen
....docker.service; enabled; preset: enabled
, das Ding läuft also.Die weiteren Meldungen geben zwar Hinweise/Warnungen (z.B. fehlende Limits), jedoch soll es an dieser Stelle nicht um Feintuning gehen.
Zum Test starten wir das
hello-world
Image, welches zeigt, ob Docker korrekt installiert wurde:Code: Alles auswählen
sudo docker run hello-world
Code: Alles auswählen
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
xxxxxxxxxxxx: Pull complete
Digest: sha256:hier stehen kryptische Zeichen
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm64v8)
.... und weitere Zeilen
Wenn alles glatt gegangen ist, kann man die oben gezeigten beiden Zeilen sehen:
Code: Alles auswählen
Hello from Docker!
This message shows that your installation appears to be working correctly.
HaRP Docker Container installieren:
Oben hatten wir nun Docker an sich installiert, welches nun parallel neben Nextcloud läuft.
Nun installieren wir das System, welches sich um das Management mit den Containern kümmert (HaRP).
Was HaRP genau treibt, könnt Ihr auf Github nachlesen:


Die Installation erfolgt nun mit folgendem Befehlsblock (bitte kompletten Block kopieren und im Terminal einfügen):
Code: Alles auswählen
sudo docker run \
-e HP_SHARED_KEY="some_very_secure_password" \
-e NC_INSTANCE_URL="https://127.0.0.1:8080" \
-v /var/run/docker.sock:/var/run/docker.sock \
-v `pwd`/certs:/certs \
--name appapi-harp -h appapi-harp \
--restart unless-stopped \
-p 8780:8780 \
-p 8782:8782 \
-d ghcr.io/nextcloud/nextcloud-appapi-harp:release
some_very_secure_password
durch ein eigenes und sicheres Passwort ersetzen !!Nun dauert es einen Moment, bis alles heruntergeladen und konfiguriert wird.
Das kann dann am Ende etwa so aussehen:
Code: Alles auswählen
Unable to find image 'ghcr.io/nextcloud/nextcloud-appapi-harp:release' locally
release: Pulling from nextcloud/nextcloud-appapi-harp
52f827f72350: Pull complete
28da4c4f13d4: Pull complete
9194795cd5c0: Pull complete
55546cf6c866: Pull complete
e63a89e80553: Pull complete
4f4fb700ef54: Pull complete
7d6ad5202130: Pull complete
ee224d243505: Pull complete
602a08d33f5e: Pull complete
3748f080aa5d: Pull complete
0a809c99037b: Pull complete
efd653d6baad: Pull complete
46485813fc3c: Pull complete
Digest: sha256:hier steht ein langer kryptischer Key
Status: Downloaded newer image for ghcr.io/nextcloud/nextcloud-appapi-harp:release
Hier steht eine lange kryptische Zeichenfolge


AppAPI konfigurieren:
Nachdem wir nun Docker und dessen Konfiguration auf dem Pi abgeschlossen haben, müssen wir Nextcloud natürlich sagen, wo es diese findet, um darauf zugreifen zu können.
Dazu rufen wir im Adminitrationsmenü weiter unten den Punkt
AppAPI
auf:
Im neuen Fenster klicken wir auf den Button
+ Daemon registrieren
:
Es erscheint folgende Voreinstellung:

Auf dem Bild ist beim oberen Pfeil normalerweise die Nextcloud URL im Feld eingetragen.
Je nachdem, wie man Nextcloud aufgerufen hat, erscheinen unterschiedliche URLs voreingetragen.
Ein Netzinterner Aufruf zeigt dort die interne URL, die auch nur intern funktioniert.
Ein Externer Aufruf zeigt die externe URL.
Ich habe testweise das Feld gelöscht (wie auf dem Bild zu sehen) und dann auf
Verbindung prüfen
geklickt, siehe unteren Pfeil.Es hat trotzdem funktioniert und es erschien bei mir
Verbindung zum Daemon erfolgreich
.Nun erfolgt ein Klick auf den Button
Registrieren
links neben dem Button zur Prüfung.Es erfolgt eine kurze Abfrage nach dem Adminpasswort und danach ist die Registrierung des Daemons abgeschlossen:

Diese Beschreibung wird bald fortgesetzt ....
Lösung:HTTPS-Zugriff und URLs
Unsicherer Zugriff auf die Website über HTTP. Es wird dringend empfohlen, deinen Server so einzurichten, dass HTTPS erforderlich ist. Ohne HTTPS funktionieren einige wichtige Webfunktionen wie "Kopieren in die Zwischenablage" oder "Service Worker" nicht!
Hier entweder die Verschlüsselung einrichten, nachdem der Zugriff statt http per https aufgerufen wird.
Dies wird normalerweise in der Anleitung zu Nextcloud beschrieben.
Wer Nextcloud nur intern ohne Verschlüsselung betreiben will, kann diese Meldung ignorieren.
Wer Nextcloud nur intern aber trotzdem verschlüsselt nutzen möchte, kann ein eigenes selbstzertifiziertes Zertifikat verwenden.
Normalerweise müsste eins mit dem Namen
ssl-cert-snakeoil.key
im Verzeichnis /etc/ssl/private
liegen, welches bei der Aktivierung von SSL im Apachen eingebunden werden sollte.Beim Aufruf von Nextcloud muss dieses Zertifikat im Browser zugelassen/installiert werden.
Lösung:Fehler im Protokoll
XX Fehler in den Protokollen seit XX. Monat Jahr, Uhrzeit
Hier muss man ins Protokoll schauen, um zu sehen, was wirkliche Fehler sind oder nur Hinweise.
Z.B. werden Loginfehlversuche ebenfalls im Protokoll vermerkt, wo man normalerweise nichts ändern muss.
Das Protokoll findet man im Administrationsbereich unter Protokollierung.
Wenn alle Fehler im Protokoll beseitigt sind und/oder man es heruntergeladen hat, kann man es mit folgendem Befehl zurücksetzen:
Code: Alles auswählen
sudo -u www-data truncate /var/www/data/nextcloud.log --size 0
Lösung:PHP OPcache
Das PHP OPcache-Modul ist nicht ordnungsgemäß konfiguriert. Der "OPcache interned strings"-Puffer ist fast voll. Um sicherzustellen, dass sich wiederholende Strings effektiv zwischengespeichert werden können, wird empfohlen, "opcache.interned_strings_buffer" mit einem Wert größer als "8" in der PHP-Konfiguration zu setzen.
Den oben genannten Wert ändern wir in der genannten Datei
php.ini
, indem wir diese aufrufen:Code: Alles auswählen
sudo nano /etc/php/8.X/fpm/php.ini
8.X
durch die aktuell installierte Version ersetzen !!Im Editor suchen wir per Tastenkombination
<strg><w>
nach opcache.interned_strings_buffer
.In der gefundenen Zeile wird ganz am Anfang das
#
entfernt, um die Zeile zu aktivieren.Am Ende der Zeile steht ein Wert in MB (MegaByte), vordefiniert ist
8
(identisch mit dem Standardwert bei deaktivierter Zeile).Bei einigen Fundstellen im Internet habe ich
64
als Wert gefunden.Größere Werte funktionieren auch nicht ohne Weiteres, bei mir folgten bei größeren Werten Fehlermeldungen und der Webserver startete nicht mehr.
Code: Alles auswählen
; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=64
Code: Alles auswählen
sudo service apache2 reload && sudo service php8.X-fpm reload && sudo service mysql restart
php8.X-fpm
wieder das 8.X
durch die eigene Version ersetzen.
Lösung:Beginn des Wartungsfensters
Der Server hat keine konfigurierte Startzeit für das Wartungsfenster. Das bedeutet, dass ressourcenintensive tägliche Hintergrundaufgaben auch während deiner Hauptnutzungszeit ausgeführt werden. Wir empfehlen, das Wartungsfenster auf eine Zeit mit geringer Nutzung festzulegen, damit Benutzer weniger von der Belastung durch diese umfangreichen Aufgaben beeinträchtigt werden.
Hier muss in der Konfiguration die Startzeit des Wartungsfensters eingetragen werden:
Code: Alles auswählen
sudo nano /var/www/html/config/config.php
Code: Alles auswählen
'maintenance_window_start' => 1,
Das Beispiel mit der
1
stellt die Uhrzeit des Zeitfensters auf den Zeitraum 01:00 UTC and 05:00 UTC (Nachts).UTC = Universal Time Coordinated
Alle Infos dazu für Nextcloud findet man hier:


Da wir hier in DE von der UTC geografisch abweichen, ist zur normalen Uhrzeit +1h zu berücksichtigen, in der Sommerzeit +2h.
Ich habe bei mir im Moment also als Startzeit für das Fenster
2
eingetragen, damit sollte die Wartung irgendwann zwischen 03:00 Uhr und 07:00 Uhr Normalzeit starten und zur Sommerzeit zwischen 04:00 und 08.00 Uhr.Man kann diese Konfiguration auch per
occ
Befehl absetzen aber ich schaue gerne in die Konfig, was ich irgendwann mal eingestellt habe.Wer dieses Zeitfenster ganz deaktivieren will, gibt laut Doku den Wert
100
ein, muss aber damit rechnen, dass die Wartung irgendwann erfolgt, im ungünstigen Fall, wenn der Server zu gut besucht wird.
Lösung:MIME-Type-Migrationen verfügbar
Eine oder mehrere MIME-Type-Migrationen sind verfügbar. Gelegentlich werden neue MIME-Typen hinzugefügt, um bestimmte Dateitypen besser handhaben zu können. Die Migration der MIME-Typen dauert bei größeren Instanzen lange, daher erfolgt sie bei Upgrades nicht automatisch. Verwende den Befehl `occ maintenance:repair --include-expensive`, um die Migrationen durchzuführen.
Code: Alles auswählen
sudo -u www-data php /var/www/html/occ maintenance:repair --include-expensive
Lösung:In der Datenbank fehlen Indizes
Einige fehlende optionale Indizes wurden erkannt. Gelegentlich werden neue Indizes hinzugefügt (von Nextcloud oder installierten Anwendungen), um die Datenbankleistung zu verbessern. Das Hinzufügen von Indizes kann manchmal eine Weile dauern und die Leistung vorübergehend beeinträchtigen, daher wird dies bei Upgrades nicht automatisch durchgeführt. Sobald die Indizes hinzugefügt wurden, sollten Abfragen an diese Tabellen schneller sein. Bitte den Befehl `occ db:add-missing-indices` verwenden, um sie hinzuzufügen. Fehlende Indizes: "properties_name_path_user" in Tabelle "properties"
Code: Alles auswählen
sudo -u www-data php /var/www/html/occ db:add-missing-indices
Lösung:E-Mail-Test
Die E-Mail-Serverkonfiguration wurde noch nicht festgelegt oder überprüft. Bitte zu den Grundeinstellungen gehen, um die Einstellungen vorzunehmen. Anschließend die Schaltfläche "E-Mail senden" unterhalb des Formulars verwenden, um die Einstellungen zu überprüfen.
Hier weißt das System darauf hin, dass noch keine Mailkonfiguration eingerichtet wurde.
Wer Nextcloud ohne Mailing nutzen möchte, kann diesen Punkt selbstverständlich ignorieren.
Da Mailing aber u.U. doch sehr hilfreich sein kann, habe ich das bei mir eingerichtet.
Für diese Mailkonfiguration rufen wir wieder die Grundeinstellungen auf:

Auf der folgenden Seite scrollen wir weiter runter bis zu den Mailservereinstellungen:

Dort geben wir die Daten ein, die unser Mailprovider (oder wer einen eigenen Server betreibt, die Daten des eigenen Servers) ein und klicken anschließend auf
E-Mail senden
.Für die Änderung der Einstellungen werden wir nach unserem Adminpasswort gefragt, welches wir dann eingeben und
Bestätigen
.Bevor wir aber eine Testmail absenden können, erscheint nach dem Sendeversuch folgende Fehlermeldung neben dem Sendebutton:
Code: Alles auswählen
AxiosError: Request failed with status code 400
Dafür gehen wir im linken Menü auf
Persönliche Informationen
:
Dort sehen wir in der rechten Hälfte das Maileingabefeld, in das wir unsere Mailadresse eintragen.
Natürlich können hier auch gleich alle anderen Profilfelder ausgefüllt werden.

Jetzt gehen wir wieder zurück zu den
Grundeinstellungen
zur Mailserverkonfiguration und klicken erneut auf den Button E-Mail senden
.Hat alles geklappt, sollten wir in unserem Postfach unseres Mail-Clients eine Testmail vorfinden und hinter dem Button erscheint
E-Mail gesendet
.
Lösung:PHP Imagick-Modul
Das PHP-Modul "imagick" in dieser Instanz hat keine SVG-Unterstützung. Für eine bessere Kompatibilität empfiehlt es sich, es zu installieren.
Code: Alles auswählen
sudo apt install libmagickcore-dev -y
Der alte Befehl aus den Vorversionen
Code: Alles auswählen
sudo apt install libmagickcore-6.q16-6-extra -y
Das Paket wird nicht mehr gefunden.
Mit dem Paket darüber wird eine DEV Version installiert, die das fehlende Format beinhaltet, installiert aber auch eine ganze Menge anderes Zeug.
Aber mir ist im Moment keine andere Lösung zum momentanen Zeitpunkt bekannt und ich möchte eben SVG benutzen.