Pour débuter
Outils de base
VIM
06 min
SSH
14 min
rsync
20 min
Shell fish
13 min
Serveur HTTP
Apache
40 min
Nginx
30 min
PHP
NodeJS
Base de données
MySQL
15 min
Redis
08 min
Emails
HTTPS
FTP
ProFTPD
14 min
Sécurité
Pour le confort
Déploiement

PHP FPM est une implémentation alternative à PHP FastCGI qui offre en général de bien meilleur performances qu'en tant que module Apache.

Le principe est de faire fonctionner PHP de manière séparée et d'installer le module FastCGI d'Apache afin de faire communiquer Apache et PHP.

Installation

Vous l'aurez compris, pour installer PHP FPM il faut passer par le gestionnaire de paquet

sudo apt-get install php5-fpm

Pour qu'apache puisse communiquer avec PHP5 FPM il faut installer le module fast-cgi.

sudo apt-get install libapache2-mod-fastcgi

Voilà, maintenant il va falloir configurer les choses.

Configuration

La configuration de PHP se trouve dans le dossier /etc/php5, à l'intérieur de ce dossier vous aurez plusieurs sous-dossiers correspondant aux multiples versions de PHP que vous aurez installé sur votre système.

  • cli, configuration utilisée lorsque l'on appelle PHP en ligne de commande
  • fpm, configuration utilisée pour PHP FPM

Dans notre cas il faudra donc modifier le fichier /etc/php5/fpm/php.ini. La configuration proposée par défaut est relativement correcte et vous ne devriez pas avoir grand-chose à changer. On remarquera que la propriété display_errors est à off par défaut, ce qui veut dire qu'en cas d'erreur rien ne sera affiché à l'utilisateur. Il faudra alors regarder les fichiers de logs pour comprendre les problèmes.

Comme d'habitude la configuration est morcelée en plusieurs fichier et on retrouve dans le dossier conf.d les fichiers permettant de configurer les modules PHP. Par défaut, vous ne devriez avoir qu'un fichier correspondant à la configuration d'opcache. Si vous installez de nouveaux modules, il faudra passer par ce dossier pour les configurer.

Enfin, nous avons la possibilité de gérer le nombre de processus PHP qui seront lancés en ajoutant ou modifiant les configurations situées dans le dossier /etc/php5/fpm/pool.d/. Si vous comptez héberger plusieurs applications différentes il peut être intéréssant de créer plusieurs ressources fonctionnant avec des utilisateurs différents.

  • listen, permet d'indiquer le fichier de socket qui sera utilisé pour communiquer avec le processus
  • user et group, permet d'indiquer l'utilisateur qui sera le propriétaire de votre processus. Il faudra bien vérifier que l'utilisateur (ou le groupe) en question ait les bons droits.

Si vous modifiez la configuration il faudra redémarrer PHP5 FPM pour qu'elle soit prise en compte.

sudo service php5-fpm restart

Configuration d'Apache en FastCGI

Maintenant que notre PHP FPM est lancé il faut dire à Apache comment traiter les fichiers PHP. Pour cela on va modifier la configuration de notre module /etc/apache2/mods-available/fastcgi.conf (on peut aussi gérer cette configuration par Virtual Host dans le cas où on a créé plusieurs configurations dans pool.d).

<IfModule mod_fastcgi.c>
  AddHandler php5-fcgi .php
  Action php5-fcgi /php5-fcgi
  Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
  FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header  Authorization

  <Directory /usr/lib/cgi-bin>
      Require all granted
  </Directory>
</IfModule>

Une fois cette modification effectuée il vous faudra activer le module Action

sudo a2enmod actions
sudo service apache2 restart

Maintenant votre Apache utilisera votre ressource PHP FPM lorsqu'il rencontrera des fichiers PHP.

Installation de modules PHP

Certaines fonctionnalités de PHP ne sont pas incluses dans le core et il faudra installer des modules pour les faire fonctionner. À vous d'installer les modules dont vous avez besoin.

Voici quelques exemples :

php -m # affiche la liste des modules disponibles (compilés avec php)
sudo apt-get install php5-mcrypt # pour CakePHP
sudo apt-get install php5-curl # on a tjrs besoin de curl ^^
sudo apt-get install php5-gd # Librairie pour le traitement d'image

Les modules sont automatiquement activés, et les fichiers de configurations sont placés dans le dossier conf.d. N'oubliez pas de redémarrer Apache pour que vos modifications soient prises en compte.