Picasoft utilise une image Nextcloud qui fait tourner PHP-FPM, permettant d’appeler des scripts PHP depuis nginx de façon efficace.

Traditionnellement, PHP se configure grâce à un fichier php.ini. Cependant, ce fichier contient de nombreuses directives, potentiellement modifiées par Nextcloud au fil des mises à jour.

Attention:

Malgré ce qui est indiqué dans un bout de sa documentation, écraser la configuration dans le fichier .user.ini ne semble pas être le plus pertinent : il contient déjà des directives qui n’ont pas été remplies par nous.

La meilleure solution est :

Note:

La version de PHP utilisée par Nextcloud est compilée avec l’option --with-config-file-scan-dir=/usr/local/etc/php/conf.d. Tous les fichiers .ini de ce dossier seront donc inclus dans la configuration, par ordre alphabétique. C’est pour cela que notre fichier commence par z, pour être inclus à la fin. Pour PHP-FPM c’est la même limonade, la compilation met le fichier de configuration à /usr/local/etc/php-fpm., qui inclue ensuite tous les fichiers .conf de /usr/local/etc/php-fpm.d.

Il suffit donc de modifier un des ces fichiers sur le dépôt et de redémarrer le conteneur applicatif.

Assez souvent, notre instance est très lente, voir finit par envoyer des timeout (HTTP 504), notamment sur la synchronisation des calendriers. Les logs donnent un avertissement :

[14-Apr-2022 13:40:32] WARNING: [pool www] server reached pm.max_children setting (5), consider raising it

Cette valeur désigne le « nombre maximum de processus fils à créer lorsque pm est réglé sur dynamic » et « affecte la limite du nombre de requêtes simultanées qui seront servies » ([source]). En d’autres termes, la configuration de base de Nextcloud n’autorise que 5 requêtes servies simultanément!

Après quelques recherches, cette réponse sur Reddit donne des valeurs qui semblent plus adéquates à la situation :

[www]
pm = dynamic
pm.max_children = 50
pm.start_servers = 15
pm.min_spare_servers = 15
pm.max_spare_servers = 25
pm.max_requests = 500

Comme ces valeurs concernent PHP-FPM, il suffit de les ajouter dans le fichier zz-php-fpm-custom.conf, puis de redémarrer le conteneur.

Pour PHP

Lien:

Idée prise ici.

Se rendre dans le conteneur et créer un fichier phpinfo.php qui affiche la configuration PHP. Exemple :

snippet.bash
$ docker exec -it nextcloud-app sh
echo "<?php phpinfo(); ?>" > phpinfo.php

Puis visiter cette page.

Attention:

Leaker toute la configuration est dangereux, à ne faire que parcimonieusement et penser à supprimer le fichier après usage.

Pour PHP-FPM

Depuis le conteneur, on peut récupérer les paramètres de la configuration pour voir s’ils sont bien pris en compte :

snippet.bash
$ php-fpm -tt
[...]
[14-Apr-2022 15:41:49] NOTICE: 	pm = dynamic
[14-Apr-2022 15:41:49] NOTICE: 	pm.max_children = 50
[14-Apr-2022 15:41:49] NOTICE: 	pm.start_servers = 15
[14-Apr-2022 15:41:49] NOTICE: 	pm.min_spare_servers = 15
[14-Apr-2022 15:41:49] NOTICE: 	pm.max_spare_servers = 25
[14-Apr-2022 15:41:49] NOTICE: 	pm.process_idle_timeout = 10
[...]

Pour voir les paramètres runtime : TODO : https://www.php.net/manual/fr/fpm.status.php

Attention:

Certains paramètres ne sont pas affichés sur cette page et il semble n’y avoir aucun moyen d'y accéder.

  • technique/adminserv/nextcloud/php.txt
  • de qduchemi