Menü Schließen

Nextcloud um Caching mit Redis und APCu erweitern

Nextcloud Logo

Für den optimalen Betrieb wird empfohlen distributed und einen local Cache zu verwenden. Hier kommen Redis und APCu ins Spiel.

Redis Webseite: Rhttps://redis.io/edis
APCu Webseite: PHP: APCu – Manual

Installation Redis und APCu

Je nach installierter PHP Version folgendes ausführen, für PHP7.4:

# apt install redis-server php7.4-redis php7.4-apcu

Per Default ist APCu in PHP deaktiviert und muss mittels php.ini Konfiguration aktiviert werden.

apc.enabled=1
apc.enable_cli=1

Läuft APCu:

# php -i | grep apc
/etc/php/7.4/cli/conf.d/20-apcu.ini,
/etc/php/7.4/cli/conf.d/25-apcu_bc.ini,
apc
apcu
apc.coredump_unmap => Off => Off
apc.enable_cli => On => On
apc.enabled => On => On
apc.entries_hint => 4096 => 4096
apc.gc_ttl => 3600 => 3600
apc.mmap_file_mask => no value => no value
apc.preload_path => no value => no value
apc.serializer => php => php
apc.shm_segments => 1 => 1
apc.shm_size => 32M => 32M
apc.slam_defense => Off => Off
apc.smart => 0 => 0
apc.ttl => 0 => 0
apc.use_request_time => Off => Off

Redis mittels Passwort absichern

# echo DiesIstMeinSehrLangesUndTollesPasswort2021! | sha256sum

Den generierten Hash dann in der Konfiguration von Redis eintragen:

# sed -i "s/# requirepass foobared/requirepass <hier den obigen Hash eintragen>/" /etc/redis/redis.conf
oder direkt in die Konfig eintragen
# vim /etc/redis/redis.conf
requirepass = <hier den obigen Hash eintragen>

Die Redis Konfiguration anpassen und den Unixsocket aktivieren und die maximale Anzahl an verbundenen Clients (maxclients) auf 200 setzen:

# sed -i s/\#\ unixsocket/\unixsocket/g /etc/redis/redis.conf
# sed -i "s/unixsocketperm 700/unixsocketperm 770/" /etc/redis/redis.conf
# sed -i "s/# maxclients 10000/maxclients 200/" /etc/redis/redis.conf

Fehler bzgl. THP im Kernel vorbeugen:

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

# echo never > /sys/kernel/mm/transparent_hugepage/enabled

Fehler für Server mit wenig RAM vorbeugen:

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

# nano /etc/sysctl.conf
vm.overcommit_memory = 1

# sysctl vm.overcommit_memory=1

Nun noch die Rechte für den Webserver auf den Socket setzen.

# usermod -aG redis www-data

Nun den Redis-Server neustarten:

# service redis-server restart
# ps ax |grep redis
  508 ?        Ssl    0:02 /usr/bin/redis-server 127.0.0.1:6379

Testen der Redis Konfiguration mit Passwort:

# redis-cli
127.0.0.1:6379> set key 1 10.
-> (error) NOAUTH Authentication required.

Obige Meldung zeigt, dass ein Passwort benötigt wird was wir wie folgt eingeben:

127.0.0.1:6379> auth <hier den obigen Hash eintragen>
-> "OK"
127.0.0.1:6379> quit

Nextcloud für Redis konfigurieren

Als nächstes wird die Konfiguration von Nextcloud angepasst und um Redis erweitert.

# nano /pfad_zu_nextcloud/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,
     'dbindex'  => 0,
     'password' => '<hier den obigen Hash eintragen>',
     'timeout'  => 1.5,
],

Redis – Fehler

Trotz korrekter Konfiguration für redis-server.sock erhielt ich diesen Fehler und die Nextcloud wurde nicht geladen.

Got error 'PHP message: PHP Warning: Redis::connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in RedisFactory.php on line 92'

Lösung war den ‘host’ Eintrag auf folgendes zu ändern:

von:
     'host'     => '/var/run/redis/redis-server.sock',
     'port'     => '0',
in:
     'host'     => '127.0.0.1',
     'port'     => '6379',

Thats it … Have Fun !

4 Kommentare

  1. tobi

    hi, den port musste ich mit ‘ ‘ ergänzen, also statt

    ‘port’ => 6379,

    so

    ‘port’ => ‘6379’,

    eintragen, ohne ‘ ‘ startete nextcloud nicht mehr bei mir.

    liebe grüße

  2. Martin

    Vielen Dank für die ausführliche Anleitung. Es funktioniert natürlich auch mit php8.1.

    Bei mir gab es eine Fehlermeldung beim start vom redis-server. Schuld war requirepass = …

    # vim /etc/redis/redis.conf
    requirepass =

    Hier muss das = weg, also so:
    # vim /etc/redis/redis.conf
    requirepass

    Viele Grüße
    Martin

Schreibe einen Kommentar

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