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 !
Interessiert in verschiedenste IT Themen, schreibe ich in diesem Blog über Software, Hardware, Smart Home, Games und vieles mehr. Ich berichte z.B. über die Installation und Konfiguration von Software als auch von Problemen mit dieser. News sind ebenso spannend, sodass ich auch über Updates, Releases und Neuigkeiten aus der IT berichte. Letztendlich nutze ich Taste-of-IT als eigene Dokumentation und Anlaufstelle bei wiederkehrenden Themen. Ich hoffe ich kann dich ebenso informieren und bei Problemen eine schnelle Lösung anbieten. Wer meinen Aufwand unterstützen möchte, kann gerne eine Tasse oder Pod Kaffe per PayPal spenden – vielen Dank.
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
Hi tobi,
ja das ist korrekt, wurde wohl gefiltert. Ich habe es korrigiert. Thx
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
Hey Martin,
danke für die Infos und das ich helfen konnte. VG