Im Backend vermeldete ownCloud schon längere Zeit, dass es einen funktionierenden PHP Memory Cache vermisse. Bisher war mir das relativ egal, weil ich nicht viele Dateien und auch nicht viele Nutzer/innen hatte. Das hatte sich in den letzten Wochen und Monaten aber gründlich geändert, so dass ich bei drei meiner oC Installationen tätig werden musste. Nach dem Update auf oC 8.2.2 und Dank etwas freier Zeit ging ich das Problem endlich an.
APC und APCu waren zwar bei allen Servern an Bord, aber unter Ubuntu 14.04 und PHP5 „zu alt“. Ich probierte es mit Redis. Hier ist das PHP5 Modul von Ubuntu 14.04 zwar ebenfalls zu alt, aber es gibt in den PECL Repositories einfach zu installierenden Ersatz.
Ein
dpkg -l | grep php5-redis
klärt, ob ein solches PHP Modul installiert ist. Wenn ja, dann muss dieses zuerst runter vom Server. Danach kann der Redis Server an Bord:
apt-get install redis-server
Ein Blick in
/etc/redis/redis.conf
sollte ergeben, dass Redis an 127.0.0.1 lauscht und somit nicht von außen zu erreichen ist. Wer sich nicht sicher ist, kann von außen mit telnet nachsehen. Weiter sollte ein
service redis-server status
zeigen, dass der Redis-Server auch läuft.
Um PECL nutzen zu können benötigen wir noch die folgenden Pakete
apt-get install php-pear php5-dev
Wer, wie ich hier, Horde5 über PEAR bezieht, hat die Pakete schon. Ein
pecl install redis
bringt dann ein frischeres php Modul für Redis an Bord. Am Ende der Installation weißt PECL darauf hin, dass dieses Modul der vorhandenen PHP Umgebung bekannt gegeben werden muss. Da hilft
echo 'extension=redis.so' > /etc/php5/mods-available/redis.ini php5enmod redis service apache2 restart
Dann wird der Memory Cache ownCloud in
/pfad/zu/owncloud/config/config.php
bekannt gegeben, indem der folgenden Code ans Ende gehängt wird (vor die letzte schließende Klammer):
'memcache.local' => '\\OC\\Memcache\\Redis', 'filelocking.enabled' => 'true', 'memcache.distributed' => '\\OC\\Memcache\\Redis', 'memcache.locking' => '\\OC\\Memcache\\Redis', 'redis' => array ( 'host' => 'localhost', 'port' => 6379, 'timeout' => 0, 'dbindex' => 0, ),
Im Backend von ownCloud herrscht nun etwas mehr Ruhe.
Was ownCloud leider nicht überprüft ist, ob es überhaupt über HTTP zu erreichen ist. Es schimpft immer über eine fehlende HSTS Konfiguration, bis eine solche eingerichtet ist.
Das ist mit
a2enmod headers
und dem Eintrag
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
für die ownCloud Domain dann nach einem Neustart des Apachen auch erledigt, hat aber Nebenwirkungen: HTTP Verbindungen sind hiermit für die gesamte Domain ab dem ersten Aufruf über HTTPS für den Client-Browser erledigt. Muss man wollen.
Geholfen beim Einrichten haben mir die folgenden empfehlenswerten Quellen: 1, 2, 3, 4