Redis Memcache für Owncloud / Nextcloud unter Ubuntu einrichten

Um die Geschwindigkeit der eigenen Owncloud bzw. Nextcloud Installation mithilfe eines Cache aufzubessern gibt es mehrere Techniken die eingesetzt werden können. Hier beschreibe ich kurz wie man Redis einsetzt. Als Betriebssystem wurde ein Ubuntu 17.04 sowie Nextcloud 12.0.3 eingesetzt.

  1. Redis und Modul für PHP installieren
    apt-get install redis-server php7.0-redis
  2. Redis Konfigurieren
    Redis kann entweder über auf einem eigenem Server installiert werden und per IP/Port (6379) angesprochen werden oder aber direkt auf dem gleichen System wie eure Owncloud. In dem Fall bietet sich an die Kommunikation über ein unix Socket einzustellen. Hier folgenden Bereich auskommentieren und die Berechtigungen 770 setzen.

    vi /etc/redis/redis.conf
    # Unix socket.
    #
    # Specify the path for the Unix socket that will be used to listen for
    # incoming connections. There is no default, so Redis will not listen
    # on a unix socket when not specified.
    #
    unixsocket /var/run/redis/redis.sock
    unixsocketperm 770
  3. Apache Benutzer der Redis Gruppe hinzufügen
    Damit nun das PHP-Modul auch auf das unix Socket zugreifen kann, müssen wir den Benutzer des Webservers in die Gruppe „redis“ aufnehmen.

    vi /etc/group

    Unter Ubuntu ist dies für apache2 der Benutzer: www-data.

    redis:x:119:www-data
  4. Owncloud/Nextcloud config.php anpassen
    In der Config fügen wir nun folgende Zeilen ein, damit auch Redis als Caching Software verwendet wird.

    vi config/config.php
     'memcache.locking' => '\OC\Memcache\Redis',
     'memcache.local' => '\OC\Memcache\Redis',
     'redis' => array(
                   'host' => '/var/run/redis/redis.sock',
                   'port' => 0,
                   'dbindex' => 0,
                   'password' => 'secret',
                   'timeout' => 1.5,
                  ),
    
  5. Dienste neustarten
    Schlussendlich nochmal den Redis-Server sowie Apache2 neustarten, damit auch alle Änderungen aktiv werden.

    service redis-server restart
    service apache2 restart

Mögliche Fehler:
Am Anfang hatte ich noch folgenden Fehler, welcher aber auf die fehlende Gruppenzugehörigkeit zurückzuführen war:

Internal Server Error
The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the server log.

Schaut man genau ins error.log sieht man, dass es ein Berechtigungsfehler ist und hier bei Punkt 2 und 3 nochmal angesetzt werden sollte.

[Thu Dec 14 11:34:25.451617 2017] [core:notice] [pid 3333] AH00094: Command line: '/usr/sbin/apache2'
[Thu Dec 14 11:38:05.020250 2017] [:error] [pid 3338] [client 10.0.0.55:32848] PHP Warning:  Redis::connect(): connect() failed: Permission denied in /var/www/owncloud/lib/private/RedisFactory.php on line 82, referer: https://cloud.domain.info/
[Thu Dec 14 11:38:08.363190 2017] [:error] [pid 3339] [client 10.0.0.55:32851] PHP Warning:  Redis::connect(): connect() failed: Permission denied in /var/www/owncloud/lib/private/RedisFactory.php on line 82
[Thu Dec 14 11:38:10.320506 2017] [:error] [pid 3339] [client 10.0.0.55:32851] PHP Warning:  Redis::connect(): connect() failed: Permission denied in /var/www/owncloud/lib/private/RedisFactory.php on line 82, referer: https://cloud.domain.info/
ls /var/run/redis/ -al
total 4
drwxrwsr-x  2 redis redis   80 Dec 14 11:39 .
drwxr-xr-x 32 root  root  1200 Dec 14 11:21 ..
-rw-r--r--  1 redis redis    5 Dec 14 11:39 redis-server.pid
srwxrwx---  1 redis redis    0 Dec 14 11:39 redis.sock

owncloud Server erfolgreich aktualisieren

Owncloud Maintenance Modus
Owncloud Maintenance Modus

Ich beschreibe hier kurz wie man seine bestehende Owncloud Version aktualisieren kann. Als Betriebssystem benutze ich ein Ubuntu 14.04.
Schritt 1: Aktuelle Owncloud Version herunterladen

cd /tmp/
wget https://download.owncloud.org/community/owncloud-8.0.2.tar.bz2
tar xjv owncloud-8.0.2.tar.bz2

Schritt 2: Owncloud in Maintenance Modus versetzen

cd /var/www
vi owncloud/config/config.php
# Set Maintenance Mode TRUE
'maintenance' => true,

Schritt 3: Webserver stoppen

# Stop Webserver / Apache2
service apache2 stop

Schritt 4: Owncloud Installation verschieben, neue Owncloud Version in richtige Stelle kopieren und Config kopieren

mv owncloud owncloud-old
mv /tmp/owncloud /var/www
cp owncloud-old/config/config.php owncloud/config/
chown www-data:www-data owncloud -R

Schritt 5: Owncloud Upgrade durchführen

cd owncloud
sudo -u www-data php occ upgrade
Turned on maintenance mode
Checked database schema update
Checked database schema update for apps
Updated database
Disabled 3rd-party app: calendar
Disabled 3rd-party app: contacts
Disabled 3rd-party app: documents
Disabled 3rd-party app: search_lucene
Updated <files_pdfviewer> to 0.7
Updated <activity> to 1.2.0
Updated <files_sharing> to 0.6.1
Updated <gallery> to 0.6.0
Turned off maintenance mode
Update successful

Schritt 6: Webserver starten

service apache2 start

[stextbox id=“info“]Ich bin zuerst der offiziellen Upgrade Doku gefolgt, doch dort wurden die Berechtigungen nicht neu gesetzt (chown). Daraufhin hatte ich nach dem Upgrade nur eine weiße Seite und folgende Fehlermeldung im apache2 error.log:

[Fri Mar 13 10:44:25.692970 2015] [:error] [pid 9759:tid 139709684631296] [client 62.153.223.62:34329] FastCGI: server "/usr/lib/cgi-bin/php5.fcgi" stderr: PHP message: PHP Warning: flock() expects parameter 1 to be resource, boolean given in /var/www/owncloud/lib/private/config.php on line 178, referer: https://cloud.constey.de/
[Fri Mar 13 10:44:25.693061 2015] [:error] [pid 9759:tid 139709684631296] [client 62.153.223.62:34329] FastCGI: server "/usr/lib/cgi-bin/php5.fcgi" stderr: PHP message: PHP Fatal error: Call to a member function getValue() on a non-object in /var/www/owncloud/lib/private/legacy/config.php on line 46, referer: https://cloud.constey.de/

Nach dem „chown www-data:www-data owncloud -R“ lief aber alles wie geschmiert.[/stextbox]