Remi Collet : Ma station de travail PHP
samedi 16 avril 2016 à 09:15Je vois régulièrement passer des questions sur l'utilisation d'anciennes versions de PHP sur Fedora (qui fournit la 5.6) ou de versions plus récentes sur RHEL / CentOS (qui fournit la 5.4).
Un développeur utilisant PHP a souvent besoin de tester son travail avec plusieurs versions. Donc voici un petit descriptif de la station de travail que j'utilise quotidiennement
Système d'exploitation : Fedora 23 Workstation x86_64 (mais les exemples fonctionnent aussi sur RHEL ou CentOS 7)
Dépôts tiers : rpmfusion (pour écouter de la musique en travaillant) et évidement remi
# wget http://rpms.remirepo.net/fedora/remi-release-23.rpm # dnf install remi-release-23.rpm # dnf config-manager --set-enabled remi
Installation des versions de PHP
J'utilise les Software Collections qui permettent d'installer plusieurs versions en parallèle sans toucher au système de base, les versions de PHP 5.4, 5.5, 5.6 et 7.0 sont disponibles dans mon dépôt, donc:
# yum install php54 php54-fpm php54-php-mbstring php54-php-mysqlnd ... # yum install php55 php55-fpm php55-php-mbstring php55-php-mysqlnd ... # yum install php56 php56-fpm php56-php-mbstring php56-php-mysqlnd ... # yum install php70 php70-fpm php70-php-mbstring php70-php-mysqlnd ...
Configuration de l'environnement Web
PHP FastCGI Process Manager
Je n'utilise pas mod_php qui n'autorise qu'une seule version du module, mais FPM.
Je ne suis pas en production mais sur une station de développement, donc afin de limiter la charge, je modifie la configuration de chaque FPM pour utiliser le mode "ondemand". J'utilise aussi un port réseau différent pour chaque version
Example, pour PHP 7.0, dans le fichier /etc/opt/remi/php70/php-fpm.d/www.conf
listen = 127.0.0.1:9070 pm = ondemand
Je configure le port pour SELinux
# semanage port -a -t http_port_t -p tcp 9070
Et ensuite j'active le service
# systemctl start php70-php-fpm # systemctl enable php70-php-fpm
Et j'applique pour chaque version.
Apache
Je crée 1 hôte virtuel pour chaque version de PHP
Dans le fichier /etc/hosts, déclaration des alias IP
192.168.0.15 myip php70scl php56scl php55scl php54scl
Création d'un fichier de configuration, avec les alias vers les dépôts git dans lesquels je travaille, ainsi que les hôtes virtuels: /etc/httpd/conf.d/remi.conf
Alias /glpi090 "/work/GIT/GLPI/090-bugfixes" Alias /glpimaster "/work/GIT/GLPI/master" Alias /galette "/work/GIT/galette/galette"Options Indexes MultiViews FollowSymLinks AllowOverride All Require all granted ServerName php70scl SetHandler "proxy:fcgi://127.0.0.1:9070" ServerName php56scl SetHandler "proxy:fcgi://127.0.0.1:9056" ServerName php55scl SetHandler "proxy:fcgi://127.0.0.1:9055" ServerName php54scl SetHandler "proxy:fcgi://127.0.0.1:9054"
Et j'utilise donc les adresses http://php70scl/, http://php56scl/, http://php55scl/ et http://php54scl/ dans mon navigateur.
Ligne de commande
Pour passer d'une version à l'autre, je choisi simplement la version voulue en utilisant les modules d'environnements
$ module load php70 $ ... $ module unload php70
Développement sur du code PHP
J'utilise évidement les outils disponibles dans le dépôt, et qui sont prévus pour fonctionner avec le PHP disponible.
# yum install atoum composer phpunit phpcompatinfo phpcs apigen ...
Par exemple :
$ git clone https://github.com/vendor/project.git $ cd project $ composer install $ phpunit --verbose $ ...
Développement des extensions PHP
Il faut évidement installer les outils de développement
# yum install php70-php-devel php56-php-devel php55-php-devel php54-php-devel
Par exemple :
$ cd /work/GIT/uopz $ module load php70 $ phpize $ ./configure $ make $ make test
Conclusion
Cette configuration, qui me parait simple, me semble idéale pour un développeur qui a besoin de plusieurs versions de PHP mais veut se concentrer sur son travail, et bénéficier de l'ensemble des paquets disponibles dans une distribution assez complète, avec le bénéfice des Software Collections disponibles dans mon dépôt.
J'aurais aussi pu utiliser Docker... mais cette solution me semble bien plus simple, enfin j'utilise quand même Docker pour PHP 5.3.
Original post of Remi Collet.Votez pour ce billet sur Planet Libre.
Articles similaires
- Remi Collet : PHP-FPM et systemd (06/06/2013)
- Remi Collet : Apache httpd server 2.4.10 et PHP-FPM 5.6 dans Fedora 21 (01/08/2014)
- Remi Collet : Red Hat va fournir PHP 5.4 pour RHEL-6 (16/06/2013)
- Remi Collet : Plusieurs versions de PHP sur un serveur Apache 2.4 (07/11/2013)
- Remi Collet : Red Hat va fournir PHP 5.5 pour RHEL-6 (20/03/2014)