Symbolbild: Storage

Memory-Caching in Nextcloud 28 mit Redis

In Nextcloud gibt es verschiedene Möglichkeiten des Memory-Cachings. Bislang war hier PHP-APCu das Mitel der Wahl. Mittlerweile schwenkt Nextcloud aber auf die Redis-Datenbank für das Memory-Caching um. Redis ist als vielseitig einsetzbare Open-Source-Datenbank bekannt.

Folgende Anleitung ist auf Basis einer Nextcloud 28.0.1 auf Ubuntu 22.04 LTS mit Apache 2, MariaDB 10.6 und PHP 8.3 erstellt worden.

Seit Nextcloud 27 erhält man in der Administrationsübersicht immer folgende ständige Warnung:

Die Datenbank wird für transaktionale Dateisperren verwendet. Um die Leistung zu verbessern, konfigurieren Sie bitte Memcache, falls verfügbar. Weitere Informationen findest du in der Dokumentation ↗.

Damit diese (nervige) Meldung verschwindet, installieren wir jetzt die Redis-Datenbank und konfigurieren sie für Nextcloud.

Zuerst installierst Du Redis und das entsprechende PHP-Modul:

sudo apt install redis php-redis

Jetzt prüfst Du, ob in der Redis-Konfiguration der richtige Wert für den Port gesetzt ist:

sudo vi /etc/redis/redis.conf

Suche in der Datei nach folgendem Wert:

port 6379

Außerdem solltest Du prüfen, ob folgende beiden Werte auskommentiert sind:

# unixsocket /var/run/redis/redis-server.sock
# unixsocketperm 700

Danach den Redis-Server einmal neu durchstarten:

sudo systemctl restart redis.service

Im Anschluss daran muss die Konfiguration noch in der Nextcloud gesetzt werden.

Das kann man entweder über die Bash direkt setzen (bitte den Pfad entsprechend anpassen):

sudo -u www-data php /var/www/nextcloud/occ config:system:set filelocking.enabled --value "true"
sudo -u www-data php /var/www/nextcloud/occ config:system:set memcache.distributed --value "\\OC\\Memcache\\Redis"
sudo -u www-data php /var/www/nextcloud/occ config:system:set memcache.locking --value "\\OC\\Memcache\\Redis"
sudo -u www-data php /var/www/nextcloud/occ config:system:set redis host --value "localhost"
sudo -u www-data php /var/www/nextcloud/occ config:system:set redis port --value "6379"

Oder man fügt in der Konfiguration direkt ein (auch hier den Pfad direkt anpassen). Zunächst öffnet man die config.php:

sudo vi /var/www/nextcloud/config/config.php

Und anschließend fügt man vor dem die Datei abschließenden ); folgendes ein:

'filelocking.enabled' => true,
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => [
    'host' => 'localhost',
    'port' => 6379,
],

Jetzt kurz in der Administrationsübersicht prüfen, ob alles passt. Wenn nicht, hilft in jedem Fall ein Reboot:

sudo reboot now

10 Kommentare

  1. Hi, tolle einfache und schnelle Anleitung. Ich habe es nun auf mehreren Seiten so gelegen und auch alle Schritte befolgt, leider funktioniert es bei mir nicht.
    Entweder meldet nextcloud immer noch die Memcache Fehlermeldung, obwohl alles aktiviert ist. Und sobald Dein Tutorial nehme oder die offizielle Anleitung für die Einträge in der config.php, dann bekomme ich beim Aufruf der nextcloud immer nur „Internal Server Error“.

  2. Hi Martin, ich habe nach der Apfelsaft Anleitung mein Glück versucht.
    Proxmox VM mit Ubuntu Server 22 LTE und NC 28.0.1
    Ich bin an der Stelle mit den 5 Befehlen sudo -u www-data php /var/www/nextcloud/occ config:system:set f……
    gescheitert. Fehlermeldungen siehe unten.
    Als Alternative hast Du die Editierung der config.php (sudo vi /var/www/nextcloud/config/config.php) geschrieben.
    bei mir ist ganz am Ende in der letzten Zeile eine runde Klammer mit Semikolon. );
    bei Dir am Ende Eckige Klammer mit Komma. nicht ganz links ],
    Wo und mit welchem Einrücken sollen die Zeilen eingefügt werden?

    Viele Grüße
    Michael

    Fehlermeldung der Befehlsserie:

    An unhandled exception has been thrown:
    Doctrine\DBAL\Exception: Failed to connect to the database: An exception occurred in the driver: could not find driver in /var/www/nextcloud/lib/private/DB/Connection.php:139
    Stack trace:
    #0 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Connection.php(1654): OC\DB\Connection->connect()
    #1 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Connection.php(1081): Doctrine\DBAL\Connection->getWrappedConnection()
    #2 /var/www/nextcloud/lib/private/DB/Connection.php(261): Doctrine\DBAL\Connection->executeQuery()
    #3 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(337): OC\DB\Connection->executeQuery()
    #4 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(377): Doctrine\DBAL\Query\QueryBuilder->executeQuery()
    #5 /var/www/nextcloud/lib/private/DB/QueryBuilder/QueryBuilder.php(280): Doctrine\DBAL\Query\QueryBuilder->execute()
    #6 /var/www/nextcloud/lib/private/AppConfig.php(418): OC\DB\QueryBuilder\QueryBuilder->execute()
    #7 /var/www/nextcloud/lib/private/AppConfig.php(184): OC\AppConfig->loadConfigValues()
    #8 /var/www/nextcloud/lib/private/AppConfig.php(374): OC\AppConfig->getApps()
    #9 /var/www/nextcloud/lib/private/App/AppManager.php(128): OC\AppConfig->getValues()
    #10 /var/www/nextcloud/lib/private/App/AppManager.php(149): OC\App\AppManager->getInstalledAppsValues()
    #11 /var/www/nextcloud/lib/private/legacy/OC_App.php(231): OC\App\AppManager->getInstalledApps()
    #12 /var/www/nextcloud/lib/private/AppFramework/Bootstrap/Coordinator.php(90): OC_App::getEnabledApps()
    #13 /var/www/nextcloud/lib/base.php(700): OC\AppFramework\Bootstrap\Coordinator->runInitialRegistration()
    #14 /var/www/nextcloud/lib/base.php(1200): OC::init()
    #15 /var/www/nextcloud/console.php(48): require_once(‚…‘)
    #16 /var/www/nextcloud/occ(11): require_once(‚…‘)
    #17 {main}An unhandled exception has been thrown:
    Doctrine\DBAL\Exception: Failed to connect to the database: An exception occurred in the driver: could not find driver in /var/www/nextcloud/lib/private/DB/Connection.php:139
    Stack trace:
    #0 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Connection.php(1654): OC\DB\Connection->connect()
    #1 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Connection.php(1081): Doctrine\DBAL\Connection->getWrappedConnection()
    #2 /var/www/nextcloud/lib/private/DB/Connection.php(261): Doctrine\DBAL\Connection->executeQuery()
    #3 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(337): OC\DB\Connection->executeQuery()
    #4 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(377): Doctrine\DBAL\Query\QueryBuilder->executeQuery()
    #5 /var/www/nextcloud/lib/private/DB/QueryBuilder/QueryBuilder.php(280): Doctrine\DBAL\Query\QueryBuilder->execute()
    #6 /var/www/nextcloud/lib/private/AppConfig.php(418): OC\DB\QueryBuilder\QueryBuilder->execute()
    #7 /var/www/nextcloud/lib/private/AppConfig.php(184): OC\AppConfig->loadConfigValues()
    #8 /var/www/nextcloud/lib/private/AppConfig.php(374): OC\AppConfig->getApps()
    #9 /var/www/nextcloud/lib/private/App/AppManager.php(128): OC\AppConfig->getValues()
    #10 /var/www/nextcloud/lib/private/App/AppManager.php(149): OC\App\AppManager->getInstalledAppsValues()
    #11 /var/www/nextcloud/lib/private/legacy/OC_App.php(231): OC\App\AppManager->getInstalledApps()
    #12 /var/www/nextcloud/lib/private/AppFramework/Bootstrap/Coordinator.php(90): OC_App::getEnabledApps()
    #13 /var/www/nextcloud/lib/base.php(700): OC\AppFramework\Bootstrap\Coordinator->runInitialRegistration()
    #14 /var/www/nextcloud/lib/base.php(1200): OC::init()
    #15 /var/www/nextcloud/console.php(48): require_once(‚…‘)
    #16 /var/www/nextcloud/occ(11): require_once(‚…‘)
    #17 {main}An unhandled exception has been thrown:
    Doctrine\DBAL\Exception: Failed to connect to the database: An exception occurred in the driver: could not find driver in /var/www/nextcloud/lib/private/DB/Connection.php:139
    Stack trace:
    #0 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Connection.php(1654): OC\DB\Connection->connect()
    #1 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Connection.php(1081): Doctrine\DBAL\Connection->getWrappedConnection()
    #2 /var/www/nextcloud/lib/private/DB/Connection.php(261): Doctrine\DBAL\Connection->executeQuery()
    #3 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(337): OC\DB\Connection->executeQuery()
    #4 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(377): Doctrine\DBAL\Query\QueryBuilder->executeQuery()
    #5 /var/www/nextcloud/lib/private/DB/QueryBuilder/QueryBuilder.php(280): Doctrine\DBAL\Query\QueryBuilder->execute()
    #6 /var/www/nextcloud/lib/private/AppConfig.php(418): OC\DB\QueryBuilder\QueryBuilder->execute()
    #7 /var/www/nextcloud/lib/private/AppConfig.php(184): OC\AppConfig->loadConfigValues()
    #8 /var/www/nextcloud/lib/private/AppConfig.php(374): OC\AppConfig->getApps()
    #9 /var/www/nextcloud/lib/private/App/AppManager.php(128): OC\AppConfig->getValues()
    #10 /var/www/nextcloud/lib/private/App/AppManager.php(149): OC\App\AppManager->getInstalledAppsValues()
    #11 /var/www/nextcloud/lib/private/legacy/OC_App.php(231): OC\App\AppManager->getInstalledApps()
    #12 /var/www/nextcloud/lib/private/AppFramework/Bootstrap/Coordinator.php(90): OC_App::getEnabledApps()
    #13 /var/www/nextcloud/lib/base.php(700): OC\AppFramework\Bootstrap\Coordinator->runInitialRegistration()
    #14 /var/www/nextcloud/lib/base.php(1200): OC::init()
    #15 /var/www/nextcloud/console.php(48): require_once(‚…‘)
    #16 /var/www/nextcloud/occ(11): require_once(‚…‘)
    #17 {main}An unhandled exception has been thrown:
    Doctrine\DBAL\Exception: Failed to connect to the database: An exception occurred in the driver: could not find driver in /var/www/nextcloud/lib/private/DB/Connection.php:139
    Stack trace:
    #0 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Connection.php(1654): OC\DB\Connection->connect()
    #1 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Connection.php(1081): Doctrine\DBAL\Connection->getWrappedConnection()
    #2 /var/www/nextcloud/lib/private/DB/Connection.php(261): Doctrine\DBAL\Connection->executeQuery()
    #3 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(337): OC\DB\Connection->executeQuery()
    #4 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(377): Doctrine\DBAL\Query\QueryBuilder->executeQuery()
    #5 /var/www/nextcloud/lib/private/DB/QueryBuilder/QueryBuilder.php(280): Doctrine\DBAL\Query\QueryBuilder->execute()
    #6 /var/www/nextcloud/lib/private/AppConfig.php(418): OC\DB\QueryBuilder\QueryBuilder->execute()
    #7 /var/www/nextcloud/lib/private/AppConfig.php(184): OC\AppConfig->loadConfigValues()
    #8 /var/www/nextcloud/lib/private/AppConfig.php(374): OC\AppConfig->getApps()
    #9 /var/www/nextcloud/lib/private/App/AppManager.php(128): OC\AppConfig->getValues()
    #10 /var/www/nextcloud/lib/private/App/AppManager.php(149): OC\App\AppManager->getInstalledAppsValues()
    #11 /var/www/nextcloud/lib/private/legacy/OC_App.php(231): OC\App\AppManager->getInstalledApps()
    #12 /var/www/nextcloud/lib/private/AppFramework/Bootstrap/Coordinator.php(90): OC_App::getEnabledApps()
    #13 /var/www/nextcloud/lib/base.php(700): OC\AppFramework\Bootstrap\Coordinator->runInitialRegistration()
    #14 /var/www/nextcloud/lib/base.php(1200): OC::init()
    #15 /var/www/nextcloud/console.php(48): require_once(‚…‘)
    #16 /var/www/nextcloud/occ(11): require_once(‚…‘)
    #17 {main}An unhandled exception has been thrown:
    Doctrine\DBAL\Exception: Failed to connect to the database: An exception occurred in the driver: could not find driver in /var/www/nextcloud/lib/private/DB/Connection.php:139
    Stack trace:
    #0 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Connection.php(1654): OC\DB\Connection->connect()
    #1 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Connection.php(1081): Doctrine\DBAL\Connection->getWrappedConnection()
    #2 /var/www/nextcloud/lib/private/DB/Connection.php(261): Doctrine\DBAL\Connection->executeQuery()
    #3 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(337): OC\DB\Connection->executeQuery()
    #4 /var/www/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(377): Doctrine\DBAL\Query\QueryBuilder->executeQuery()
    #5 /var/www/nextcloud/lib/private/DB/QueryBuilder/QueryBuilder.php(280): Doctrine\DBAL\Query\QueryBuilder->execute()
    #6 /var/www/nextcloud/lib/private/AppConfig.php(418): OC\DB\QueryBuilder\QueryBuilder->execute()
    #7 /var/www/nextcloud/lib/private/AppConfig.php(184): OC\AppConfig->loadConfigValues()
    #8 /var/www/nextcloud/lib/private/AppConfig.php(374): OC\AppConfig->getApps()
    #9 /var/www/nextcloud/lib/private/App/AppManager.php(128): OC\AppConfig->getValues()
    #10 /var/www/nextcloud/lib/private/App/AppManager.php(149): OC\App\AppManager->getInstalledAppsValues()
    #11 /var/www/nextcloud/lib/private/legacy/OC_App.php(231): OC\App\AppManager->getInstalledApps()
    #12 /var/www/nextcloud/lib/private/AppFramework/Bootstrap/Coordinator.php(90): OC_App::getEnabledApps()
    #13 /var/www/nextcloud/lib/base.php(700): OC\AppFramework\Bootstrap\Coordinator->runInitialRegistration()
    #14 /var/www/nextcloud/lib/base.php(1200): OC::init()

    1. Hallo,

      die Konfiguration musst Du in der config.php in der Zeile vor ); (also damit in der vorletzten Zeile) einfügen, weil damit das Config-Array geschlossen wird.

      Die Fehlermeldung in Deinen Logs sieht für mich so aus, als dass das PHP-Paket für mysql nicht installiert ist. Das einfach mit sudo apt install php-mysql nachholen. Ggf. musst du nach php noch die Version angeben (also: sudo apt install php8.1-mysql).

      Viele Grüße
      Erik

  3. Hi Eric, das mit der config.php hat jetzt gut geklappt. Ich habe festgestellt , dass auch eine php8.3 neben der php 8.2 vorhanden ist. ich habe manuell auf 8.2 umgestellt.
    Gerade läuft der rsync….
    Viele Grüße
    Michael

  4. Danke für die Anleitung
    Für mein Nextcloud Setup PHP8.2 musste ich die Installation ändern:
    sudo apt install redis php8.2-redis

    Dadurch wurde der Fehler behoben:
    „Memcache OC\Memcache\Redis not available for distributed cache (Is the matching PHP module installed and enabled?)

    1. Das für den Hinweis! Je nach Distribution greift bei der Umstellung auf eine neuere Version das auch bei der Paketverwaltung. Wenn man die Versionsnummer angibt, ist man in jedem Fall immer auf der sicheren Seite.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert