Aller au contenu
Couillaman le site une demo bientot ! ×

Passer de mod-php5 à php-fpm avec Apache


dokuro
 Share

Messages recommandés

Faisons les présentations

FPM est un moteur d’exécution de PHP qui, comme son nom l’indique, se veut plus rapide qu’une exécution standard. Il est très adapté dans le cas d’applications web. Bien que n’importe quel serveur web supportant CGI peut en tirer partie, sa popularité tient surtout à son utilisation conjointe avec Nginx, un serveur web qui est particulièrement performant comparé à Apache. D’ailleurs, ma machine virtuelle à la maison utilise, entre autres, ces deux gaillards, installés grâce au script d’autoinstall de nicolargo.

Je décrirais ici les manipulations qui ont été faites sur une Debian Wheezy 64bit, qui ici est virtualisée dans une machine KVM (ce qui n’a aucune espèce d’importance, Il est théoriquement possible d’adapter pour d’autres distributions (à vérifier notamment les emplacements des fichiers de configuration). Ensuite, toutes les commandes sont présentées comme saisies directement avec le compte root, ajoutez sudo en cas de besoin.

Installation/préparation

Grâce à ce magnifique outil que représentent les dépôts et apt, une seule commande permet d’installer les deux paquets qui nous seront nécessaires :

 

 
 
Shell
 
 
apt-get install libapache2-mod-fastcgi php5-fpm

 

Ensuite, pour ne pas créer de conflits, je conseille de couper les services qui seront concernés par les modifications de configuration :

 

 
 
Shell
 
 
#méthode "moderne"

service apache2 stop
service php-fpm stop


#méthode "standard"
/etc/init.d/apache2 stop
/etc/init.d/php-fpm stop
Configuration de php-fpm

Personnellement j’ai choisi de faire écouter fpm sur un port réseau plutôt que sur un (ou une, je sais plus trop) socket local. J’ai donc modifié le fichier /etc/php5/fpm/pool.d/www.conf, en particulier la ligne suivante :

 

 
 
Shell
 
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000

 

J’ai donc commenté l’ancienne configuration et ajouté la nouvelle. Évidemment, pensez à vérifier que le port est libre avant.

Pourquoi le réseau ? Théoriquement, le gain de vitesse serait plus élevé en passant par une socket locale, car on évite la ré-encapsulation du “trafic” PHP en passant par l’interface loopback. Mais l’utilisation du réseau permet de rester stable sur de plus grosses charges, et dans le cadre d’une infrastructure qui séparerait le traitement de PHP du serveur web pur (comme ça pourrait être le cas de la base de données), c’est de toute façon la seule solution. Je pense donc à ceux qui, contrairement à moi, voudraient faire la bascule sur une infrastructure qui accueille plus de monde que mes ~50 visiteurs par jour.

D’ailleurs, voilà le genre d’erreur sur laquelle vous pourriez tomber en cas de saturation de socket :

 

 
PHP
 
 
connect() to unix:/var/run/php5-fpm.sock failed or **apr_socket_recv: Connection reset by peer (104)**

 

Note : si vous avez fait des modifications sur la configuration de PHP à l’époque de mod-php5 (dans le fichier /etc/php5/apache2/php.ini), il faudra les reporter dans le fichier/etc/php5/fpm/php.ini. Vous pourriez tenter un diff sur les deux fichiers pour vérifier les points à reporter, ou plus bourrin, écraser le “nouveau” fichier avec votre ancien. Mais là, si ça pète, je répond de rien, je n’ai pas procédé de la sorte.

Sinon FPM reprend tous les fichiers de configurations annexes de PHP (lien symbolique de conf.d vers le dossier parent), donc les extensions installées continueront théoriquement de fonctionner.

Configuration de fastcgi

CGI est une interface pour l’exécution de scripts. Pour utiliser FPM avec Apache, on a donc installé le module fastcgi. Et histoire de gagner du temps, puisque ce sera la seule méthode d’exécution de PHP pour tous les vhost, on va procéder de manière globale, directement au niveau d’Apache. Voilà ce qu’on doit entrer dans le fichier /etc/apache2/conf.d/mod_fastcgi.conf (le créer s’il n’existe pas) :

 

 
Apache
 
 
<
IfModule mod_fastcgi.c>

FastCGIExternalServer /usr/sbin/php5-fpm -host 127.0.0.1:9000
AddHandler php5-fastcgi .php


Action php5-fastcgi /usr/sbin/php5-fpm.fcgi
ScriptAlias /usr/sbin/php5-fpm.fcgi /usr/sbin/php5-fpm


<Directory /usr/sbin>
Options ExecCGI FollowSymLinks
SetHandler fastcgi-script
Order allow,deny
Allow from all
</Directory>
</IfModule>

Notez bien que l’on renseigne l’adresse réseau de php-fpm. Pourquoi un fichier dans conf.d plutôt que modifier directement dans mods-available ? Pour garder la configuration d’origine en cas de souci.

Ensuite, on désactive “l’ancien” module mod-php5, et on active le nouveau mod-fastcgi, sinon, ça ne servirait à rien :

 

 
 
 
Shell
 
 
 
a2dismod php5
a2enmod fastcgi

 

 Vraiment ne pas oublier de désactiver mod-php5, sinon c’est lui qui restera en service, avec FPM qui attendra désespérément dans le vide. Oui oui, on en a fait l’expérience icon_biggrin.gif

Remise en service

 

Les services sont installés, configurés, activés, y’a plus qu’à lancer :

 

 
 
 
 
Shell
 
#Méthode moderne

service php-fpm start
service apache2 start


#A l'ancienne
/etc/init.d/php-fpm start
/etc/init.d/apache2 start

 

Étape subsidiaire : Une fois que vous avez définitivement validé la bascule, vous pouvez supprimer le paquet libabache2-mod-php5 pour être sur de ne pas le voir réactivé par accident, ce qui pourrait causer les mêmes désagréments que le passage de mod-php5 à php-fpm (en particulier si vous modifiez la configuration de php).

 

Conclusion :

 

Let the magic begins icon_smile.gif Personnellement, je n’ai pas fait de vérifications chiffrées de l’amélioration de performances, mais vu comment Piwik fuse, j’aurais tendance à dire que ça répond bien. La consommation mémoire est un peu plus élevée, mais rien de mortel non plus. La génération des miniatures d’images dans WordPress est plus rapide aussi (moins d’attente après l’upload). Bref, c’est du bon.

Pour la sortie d’Apache 2.4, le wiki propose une méthode légèrement différente. Je ne sais pas s’il faut la recommander aux utilisateurs d’Ubuntu qui y ont accès. De toute façon, cette installation d’FPM n’est qu’une première étape d’une migration prévue vers Nginx. Comprenez donc que je ne me sens pas plus concerné que ça.

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

 Share

×
×
  • Créer...