Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu’il s’agit d’une erreur. {{indexmenu_n>10}} ## Modifier un paramètre PHP ou PHP-FPM ### Cas général Picasoft utilise une image Nextcloud qui fait tourner [PHP-FPM](https://www.php.net/manual/fr/install.fpm.php), 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. <bootnote warning> Malgré ce qui est indiqué dans un [bout de sa documentation](https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/big_file_upload_configuration.html#configuring-upload-limits-within-the-gui), é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. </bootnote> La meilleure solution est : - Pour PHP : monter un fichier `.ini` dans `/usr/local/etc/php/conf.d/`. C'est ce qui [est fait actuellement](https://gitlab.utc.fr/picasoft/projets/services/nextcloud-pica/-/blob/9662f0502e1cc1ca057a532cae9a45955c3a4384/docker-compose.yml#L21). - Pour PHP-FPM : monter un fichier `.conf` dans `/usr/local/etc/php-fpm.d`. C'est ce qui [est aussi fait actuellement](https://gitlab.utc.fr/picasoft/projets/services/nextcloud-pica/-/blob/9662f0502e1cc1ca057a532cae9a45955c3a4384/docker-compose.yml#L22). <bootnote>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](https://www.php.net/manual/fr/configuration.file.php). 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`.</bootnote> Il suffit donc de modifier un des ces fichiers sur le dépôt et de redémarrer le conteneur applicatif. ### Cas d'application 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](https://www.reddit.com/r/NextCloud/comments/9e5ljv/nextcloud_and_phpfpm_adjustments/e5ppadx/) 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](https://gitlab.utc.fr/picasoft/projets/services/nextcloud-pica/-/blob/master/zz-php-fpm-custom.conf), puis de redémarrer le conteneur. ### Vérifier les paramètres #### Pour PHP <bootnote web>Idée prise [ici](https://docs.nextcloud.com/server/latest/admin_manual/issues/general_troubleshooting.html#php-version-and-information).</bootnote> Se rendre dans le conteneur et créer un fichier `phpinfo.php` qui affiche la configuration PHP. Exemple : ```bash $ docker exec -it nextcloud-app sh echo "<?php phpinfo(); ?>" > phpinfo.php ``` Puis visiter [cette page](https://cloud.picasoft.net/phpinfo.php). <bootnote warning>Leaker toute la configuration est dangereux, à ne faire que parcimonieusement et penser à supprimer le fichier après usage.</bootnote> #### 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 : ```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 <bootnote warning>Certains paramètres ne sont pas affichés sur cette page et il semble n'y avoir [aucun moyen d'y accéder](https://serverfault.com/questions/878096/how-to-check-current-pm-max-children-setting).</bootnote> technique/adminserv/nextcloud/php.txtde qduchemi