Nextcloud PHP Einstellungen anpassen

Hinweis

In diesem Artikel werden Einstellungen für das Docker Image nextcloud:X-fpm, bzw. nextcloud:fpm beschrieben! Diese können ebenfalls beim Apache Image Anwendung finden, werden aber andere Pfade benötigen…

Allgemeines

Im Grundzustand sind alle nötigen Einstellungen des PHP-FPM Prozesses bereits vorgenommen. In den Meisten Fällen werden diese ausreichen, allerdings können je nach Bedarf Individualisierungen vorgenommen werden. Hierbei können Einstellungen wie zum Beispiel das Memory Limit (RAM Speicher), die Größe der Uploads, oder auch die Menge der zu erstellenden Prozesse angepasst werden. Gerade Letztes ist für größere Installationen mit vielen Benutzern relevant, denn wenn die Gesamtheit der Prozesse mit der Bearbeitung von Anfragen beschäftigt ist, können verlängerte Wartezeiten auftreten.

Konfigurationen

Alle Einstellungen befinden sich im Container unterhalb des folgenden Ordners:

root@4a850acce455:/var/www/html# ls -lha /usr/local/etc/php-fpm.d/
total 56K
drwxr-xr-x 1 root root 4.0K Jul 22 03:10 .
drwxr-xr-x 1 root root 4.0K Jul 22 03:10 ..
-rw-r--r-- 1 root root  357 Jul 22 03:10 docker.conf
-rw-r--r-- 1 root root  20K Jul 22 03:10 www.conf
-rw-r--r-- 1 root root  20K Jul 22 03:10 www.conf.default
-rw-r--r-- 1 root root   45 Jul 22 03:10 zz-docker.conf

Standardkonfiguration

Für nextcloud existiert ein Pool mit dem Namen www. Dies erkennt man in den Konfigurationsdateien durch die [www] Sektion:

# grep -v -e '^;' -e '^$' www.conf

[www]
user = www-data
group = www-data
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
# grep -v -e '^;' -e '^$' docker.conf

[global]
error_log = /proc/self/fd/2
log_limit = 8192
[www]
access.log = /proc/self/fd/2
clear_env = no
catch_workers_output = yes
decorate_workers_output = no
#grep -v -e '^;' -e '^$' zz-docker.conf

[global]
daemonize = no
[www]
listen = 9000

Im Standardfall bindet der PHP-FPM Prozess sich an Port 9000 und loggt seine Ausgaben an Stderr (/proc/self/fd/2), sodass die Ausgaben mittels docker logs eingesehen werden können.

Einstellungen überladen

Es bietet sich also an, entweder alle Dateien (den Ordner) via Volume, oder die zz-docker.conf zu überladen, falls lediglich einzelne Einstellungen notwendig sind. In diesem Beispiel wird der komplette php-fpm.d Ordner überladen (3. Zeile unter Volumes). Dadurch können wir alle Dateien individuell gestalten und vermischen diese nicht:

version: '3'

services:
  nextcloud:
    container_name: nextcloud
    image: nextcloud:21-fpm
    volumes:
      - /srv/nextcloud/run:/var/run/php/
      - /srv/nextcloud/html/:/var/www/html/
      - /srv/nextcloud/config/php-fpm.d:/usr/local/etc/php-fpm.d/
    restart: unless-stopped
    env_file: /srv/nextcloud/config/env_nextcloud

Nun müssen noch die Einstellungen innerhalb einer Datei vorgenommen werden. Die anderen müssen nicht angelegt werden!

Beispiel-Konfiguration

# File: /srv/nextcloud/config/php-fpm.d/zz-docker.conf

[www]
# Benutzer / Gruppe für Datei-Operationen
user = www-data
group = www-data
# Socket an dem der PHP-FPM Prozess lauscht (Webserver kommuniziert hier mit PHP)
listen = /var/run/php/nc.socket
# Benutzer / Gruppe dem der Socket "gehoert"
listen.owner = www-data
listen.group = www-data

# dynamisches erstellen von PHP-Prozessen (je nach Bedarf)
# Alternative: ondemand (hier werden nur Prozesse bei Bedarf gestartet und nach einer Gewissen Zeit komplett abgeräumt)
pm = dynamic
# maximal 8 Prozesse koennen gestartet werden
pm.max_children = 8
# ein Prozess von Beginn starten und bereithalten
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 8

env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Upload Groeße erhoeht auf 4 GB 
php_admin_value[post_max_size] = 4096M
php_admin_value[upload_max_filesize] = 4096M

[global]
# notwendig damit php-fpm im Vordergrund läuft und der Docker Container nicht abstürzt (siehe /entrypoint.sh)
daemonize = no

PHP-Einstellungen anpassen

Unabhängig von den hier genannten Einstellungen, können eine Vielzahl mitels php_admin_value und php_admin_flag gesetzt werden. Die offiziellen Flags / Werte findet man in der PHP-Dokumentation:

https://www.php.net/manual/de/install.fpm.configuration.php

Nginx-Anbindung mit Socket

Weil php-fpm nun nicht mehr an einem TCP-Port (9000) lauscht, sondern einen Unix-Socket bereitstellt (/var/run/php/nc.socket), müsste man diesen in der nginx Konfiguration hinterlegen:

Eine komplette Beschreibung der Nginx Konfiguration findet man in der offiziellen Dokumentation, welche den Socket-Betrieb bereits vorgesehen hat: https://docs.nextcloud.com/server/21/admin_manual/installation/nginx.html