
Friendica-Performance mit Redis unter Debian 12 optimieren
Heute gibt es mal eine "kurze" Anleitung, wie ich Redis in Linux unter Debian 12 installiert und in Friendica eingebunden habe.
Diese Anleitung basiert auf Karsten Riegers https://www.c-rieger.de/nextcloud-installationsanleitung/ (Abschnitt 4. Installation und Konfiguration von Redis).
In meinem Beispiel verwende ich Apache2, PHP-FM und MariaDB.
Zuerst den Redis-Server installieren:
sudo apt install -y redis-server
Nun eine Backup-Datei erstellen:
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
Den Standard-Port deaktivieren:
sudo sed -i 's/port 6379/port 0/' /etc/redis/redis.conf
Unix-Socket aktivieren:
sudo sed -i s/\#\ unixsocket/\unixsocket/g /etc/redis/redis.conf
Socket-Berechtigungen anpassen:
sudo sed -i 's/unixsocketperm 700/unixsocketperm 770/' /etc/redis/redis.conf
Maximale Clients erhöhen:
sudo sed -i 's/# maxclients 10000/maxclients 10240/' /etc/redis/redis.conf
In dieser Zeile muss bei "HierKommtDeinPasswortHin" ein eigenes, sicheres Passwort eingegeben werden:
sudo sed -i 's/# requirepass foobared/requirepass HierKommtDeinPasswortHin/' /etc/redis/redis.conf
Webserver-Benutzer (www-data) zur Redis-Gruppe hinzufügen:
sudo usermod -aG redis www-data
Ein Backup erstellen:
sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak
Kernel-Einstellung für Redis optimieren:
sudo sed -i '$avm.overcommit_memory = 1' /etc/sysctl.conf
PHP-Redis-Erweiterung installieren (bitte die Versionsnummer für die eigene PHP-Version anpassen):
sudo apt install php8.2-redis
Danach einmal den kompletten Server neustarten:
sudo reboot now
Nach dem Neustart des Servers prüfen, ob Redis läuft:
sudo systemctl status redis-server
Bei Fehlern in die Logs schauen (mit "q" beenden):
sudo journalctl -u redis-server
Nun Redis in Friendica hinzufügen, dafür die Konfigurations-Datei von Friendica öffnen (Pfad ggf. anpassen):
sudo nano /var/www/html/friendica/config/local.config.php
Im Abschnitt 'system', der bei mir beispielhaft so aussieht:
'system' => [
'default_timezone' => 'Europe/Berlin',
'language' => 'de',
'url' => 'https://deinedomain.de',
],
folgendes hinzufügen (auch hier das individuelle Passwort eingeben!):
'cache_driver' => 'redis',
'lock_driver' => 'redis',
'redis_host' => '/var/run/redis/redis-server.sock',
'redis_port' => 0,
'redis_db' => 0,
'redis_password' => 'HierKommtDeinPasswortHin'
Das sollte dann (beispielhaft!) so aussehen:
'system' => [
'default_timezone' => 'Europe/Berlin',
'language' => 'de',
'url' => 'https://deinedomain.de',
'pidfile' => '/var/www/html/friendica/pids/daemon.pid',
'cache_driver' => 'redis',
'lock_driver' => 'redis',
'redis_host' => '/var/run/redis/redis-server.sock',
'redis_port' => 0,
'redis_db' => 0,
'redis_password' => 'HierKommtDeinPasswortHin'
],
Bitte achte darauf, dass hinter dem letzten Eintrag in diesem Abschnitt ('HierKommtDeinPasswortHin') kein Komma gehört!
Die Datei nun Speichern (Strg + O, Enter) und schließen (Strg + X).
Nun einmal Apache2 neustarten:
sudo systemctl restart apache2
Ebenso PHP-FM:
sudo systemctl restart php8.2-fpm
Um zu testen, ob Friendica nun mit Redis funktioniert mit dem Redis-Client verbinden (bitte auch hier das eigene Passwort benutzen!):
sudo redis-cli -s /var/run/redis/redis-server.sock -a HierKommtDeinPasswortHin
Dann erscheint folgende Meldung (die ignoriert werden kann):
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
In diesem Prompt:
redis /var/run/redis/redis-server.sock>
folgendes eingeben:
MONITOR
Als Rückmeldung sollte die Meldung:
OK
erscheinen.
Das Terminal so geöffnet lassen und im Webbrowser ein paar Seiten der Friendica-Instanz aufrufen. Nun sollten es im Terminal (beispielhaft) so aussehen:
1744001449.962000 [0 unix:/run/redis/redis-server.sock] "AUTH" "(redacted)"
1744001449.968793 [0 unix:/run/redis/redis-server.sock] "GET" "deinedomain.de:lock:worker_process"
1744001449.968910 [0 unix:/run/redis/redis-server.sock] "EXISTS" "deinedomain.de:lock:worker_process"
1744001449.969016 [0 unix:/run/redis/redis-server.sock] "SETNX" "deinedomain.de:lock:worker_process" "i:0;"
1744001449.969080 [0 unix:/run/redis/redis-server.sock] "WATCH" "deinedomain.de:lock:worker_process"
1744001450.021151 [0 unix:/run/redis/redis-server.sock] "GET" "deinedomain.de:getInfoFromURL:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
1744001450.021264 [0 unix:/run/redis/redis-server.sock] "EXISTS" "deinedomain.de:getInfoFromURL:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Dieser Test kann mit Strg+C abgebrochen werden. Nun sollte im Terminal wieder der Prompt zu sehen sein:
redis /var/run/redis/redis-server.sock>
Hier:
INFO
eingeben.
Nun werden Informationen über Redis aufgelistet, wie z.B. Versionsnummer und weiteres.
Jetzt noch:
DBSIZE
eingeben, hier sollte ein Wert größer als 0 stehen, z.B. (integer) 123 oder ähnliches.
Als letztes
exit
eingeben.
Mittels btop oder htop kann man nun sehr schön sehen, wie der Speicherverbrauch als auch die Systemauslastung gesunken ist. Desweiteren sollten sich die Ladezeiten der Friendica-Instanz verbessern.