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 au 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 de monter un fichier dans /usr/local/etc/php/conf.d/. C’est ce qui est fait actuellement.

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 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.

Il suffit donc de modifier ce fichier 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 :

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

Il suffit de les ajouter dans le fichier z-php-custom.ini, puis de redémarrer le conteneur.

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.

Attention:

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

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