Fedora-Fr - Communauté francophone Fedora - Linux

Planet de Fedora-Fr : la communauté francophone autour de la distribution Linux Fedora

A propos

Cette page est actualisée toutes les heures.

Cette page est une sélection de blogs autour de Fedora. Fedora-Fr.org décline toute responsabilité au sujet des propos tenus par les auteurs des blogs de ce planet. Leurs propos sont leur entière responsabilité.

Le contenu de ce planet appartient à leurs auteurs respectifs. Merci de consulter leur blogs pour obtenir les licences respectives.

Mot-clefs : HowTo

Installer PHP 7.2 sur CentOS, RHEL ou Fedora

Remi Collet

Voici un guide rapide pour mettre à jour le PHP fournit par Fedora, RHEL ou CentOS par la dernière version 7.2.

 

Configuration des dépôts:

Sur Fedora, les dépôts standards sont suffisant, sur Enterprise Linux (RHEL, CentOS) il est aussi nécessaire de configurer le dépôt Extra Packages for Enterprise Linux (EPEL), et sur RHEL d'activer le canal optional.

Fedora 27

wget http://rpms.remirepo.net/fedora/remi-release-27.rpm
dnf install remi-release-27.rpm

Fedora 26

wget http://rpms.remirepo.net/fedora/remi-release-26.rpm
dnf install remi-release-26.rpm

RHEL version 7.4

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
subscription-manager repos --enable=rhel-7-server-optional-rpms

RHEL version 6.9

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm epel-release-latest-6.noarch.rpm
rhn-channel --add --channel=rhel-$(uname -i)-server-optional-6

CentOS version 7.4

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm

CentOS version 6.8

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm epel-release-latest-6.noarch.rpm

 

Activation du dépôt remi-php72

Les paquets sont dans les dépôts remi-safe (activé par défaut) et remi-php72 qui n'est pas activé par défaut (choix de l'administrateur en fonction de la version de PHP souhaitée).

RHEL et CentOS

yum install yum-utils
yum-config-manager --enable remi-php72

Fedora

dnf install dnf-plugins-core
dnf config-manager --set-enabled remi-php72

 

Mise à jour de PHP

Par choix, les paquets ont le même nom que les paquets fournit par défaut avec le système, une simple mise à jour est donc suffisante :

yum update

Et c'est tout :)

$ php -v
PHP 7.2.0 (cli) (built: Nov 28 2017 10:27:47) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.2.0, Copyright (c) 1999-2017, by Zend Technologies
    with Xdebug v2.6.0alpha1, Copyright (c) 2002-2017, by Derick Rethans

 

Problèmes connus

La mise à jour peut échouer (c'est voulu) lorsque certaines extensions présentes ne sont pas encore compatibles avec PHP 7.

Voir la liste des compatibilité : PECL extensions RPM status

Si elles ne sont pas indispensables, vous pouvez les désinstaller avant la mise à  jour, sinon, il faudra patienter.

Attention : quelques extensions sont encore en phase de développement (xdebug...), mais il m'a semblait utile de les fournir afin de permettre la mise à jour au plus grand nombre, et aussi permettre leur test et des retours vers les auteurs.

 

Plus d'informations

Si vous souhaitez une installation en parallèle de la version par défaut de PHP, cela est possible en utilisant les paquets préfixés php72 Voir le billet PHP 7.2 en Software Collection.

Vous pouvez aussi utiliser le nouvel assistant de configuration.

Les paquets présents dans le dépôt seront utilisés comme source pour Fedora 28 (la proposition de changement, reportée pour F27, a déjà été acceptée).

En fournissant une pile complète, environ 150 extensions disponibles, 4 versions de PHP, paquets de base et SCL, pour Fedora et Enterprise Linux, et avec 200 000 téléchargements par jour, le dépôt remi est devenu en 12 ans une référence pour les utilisateurs de PHP sur les distributions RPM, maintenu par un contributeur actif aux différents projets (Fedora, PHP, PECL...).

Et aussi :

Astuces de configuration de PHP

Remi Collet

Traduction de l'article PHP Configuration Tips.

Cet article regroupe les informations actualisées qui ont été publiées ici au cours des dernières années.

RHEL 7 fournit le serveur HTTP Apache  version 2.4 et PHP version 5.4.

Le configuration la plus commune pour Apache et PHP utilise mod_php, mais présente quelques limites et inconvénients :

  • une seule versions de mod_php peut être utilisée
  • mod_php tourne dans le processus httpd, sans isolation
  • mod_php n'est supporté que pour le MPM prefork

Cet article explique comment déléguer l'exécution des scripts PHP à un service d'arrière plan utilisant le protocole  FastCGI, comment utiliser une version récente de PHP, comment utiliser plusieurs versions de PHP, et comment améliorer les performances d'Apache..

Le paquet du serveur HTTP d'apache disponible dans RHEL fournit l'ensemble des fonctionnalités nécessaires pour une telle configuration.

1. Basculer vers php-fpm

1.1. Supprimer mod_php

Il est conseillé de supprimer ou de désactiver mod_php afin de réduire la consommation mémoire de chaque processus httpd.

Vous pouvez soit déinstaller le paquet php, qui ne contient que ce module

yum remove php

ou simplement le désactiver en commentant la directive LoadModule directive dans le fichier /etc/httpd/conf.modules.d/10-php.conf.

# disabled # LoadModule php5_module modules/libphp5.so

1.2. Installer php-fpm

Vous pouvez maintenant installer php-fpm et activer son service

yum install php-fpm
systemctl start php-fpm
systemctl enable php-fpm

Remarque: le paquet php-fpm est disponible dans le canal optional, qui doit être activé.

Pour configurer l'exécution des scripts PHP, modifiez ou créez le fichier de configuration /etc/httpd/conf.d/php.conf :

Les lignes suivantes interdise l'accès aux fichiers .user.ini depuis les clients Web!

  <Files ".user.ini">
    Require all denied
  </Files>

Activation de la gestion du Multiviews par php:

  AddType text/html .php

Ajouter index.php à la liste des fichiers utilisés pour fournir le contenu d'un dossier :

  DirectoryIndex index.php

La ligne suivante active les entêtes d'autorisation :

  SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=

Rediriger l'exécution des scripts PHP vers le service FPM

  <FilesMatch \.php$>
    SetHandler "proxy:fcgi://127.0.0.1:9000"
  </FilesMatch>

Si des directives php_value sont présentes dans ce fichier, vous devez les supprimer, elles ne concernent que mod_php.

Vous pouvez maintenant redémarrer le serveur web et, avec une simple page de test

<?php phpinfo();

vérifier qui PHP est désormais exécuté à par le service FastCGI:

  PHP Version 5.4.16
  Server API= FPM/FastCGI

1.3. Réglages de PHP

Le fichier de configuration principal est /etc/php-fpm.conf, qui contient beaucoup de commentaires expliquant chaque option.

FPM pour exécuter plusieurs services (pool), chacun exécutant les scripts PHP avec des options pouvant être différentes, le fichier de configuration du service par défaut (www) est /etc/php-fpm.d/www.conf, qui contient aussi de nombreux commentaires.

1.3.1. php_value, php-flag

Les options de PHP peuvent être configurées en utilisant les directives php_value, php_admin_value, php_flag et php_admin_flag :

  • avec mod_php,  dans les fichiers de configuration d'Apache
  • avec FPM, dans les fichiers de configuration de chaque service (pool)

1.3.2. .htaccess

Les options peuvent, en plus, être définies pour un dossier spécifique :

  • avec mod_php, en utilisant un fichier .htaccess
  • avec FPM, en utulisation un fichier .user.ini (les mot clés php_* ne sont pas nécessaires).

1.3.3. Réglages des processus

FPM fonctionne en service et lance plusieurs processus pour gérer les différentes requêtes en parallèle, il existe plusieurs modes :

  • pm = ondemand, un processus est lancé uniquement lors d'une nouvelle connexion, et arrêté lorsqu'il n'y a pas d'activité, ce mode est  adapté pour les environnements de développement
  • pm = dynamic, un groupe de processus est toujours en fonctionnement, plus de processus seront démarrés en cas de besoin, ce mode adapté à la production
  • pm = static, un nombre fixe de processus est toujours présent, ce mode est adapté à la production et peut améliorer les performances

1.4. Réglages du Serveur HTTP Apache

1.4.1. Mode threadé

Par défaut, le serveur HTTP apache utilise un ensemble de processus pour gérer les requêtes entrantes (MPM prefork).

Comme nous n'utilisons plus mod_php, nous pouvons basculer sur un MPM threadé (worker or event), et c'est un ensemble de threads qui gérera les requêtes, réduisant le nombre de processus, la consommation mémoire, et améliorant les performances, en particulier lorsqu'il s'agit de servir de nombreux fichiers statiques.

Changer leMPM utilisé dans le fichier de configuration /etc/httpd/conf.modules.d/00-mpm.conf :

  # disabled # LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
  # disabled # LoadModule mpm_worker_module modules/mod_mpm_worker.so
  LoadModule mpm_event_module modules/mod_mpm_event.so

1.4.2. Unix Domain Socket

Par défaut, FPM écoute sur un socket réseau, mais il peut aussi utiliser un socket local (UDS), ce qui peut améliorer sensiblement les performances :

Dans la configuration du service (pool) FPM :

  listen = /run/php-fpm/www.sock
  listen.owner = apache
  listen.mode = 0660

Dans la configuration du serveur Apache :

  SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"

1.4.2. Séparation du frontal et des serveurs applicatifs

Par défaut, FPM écoute les requêtes entrantes sur un socket réseau local, il est évidement possible d'utiliser un serveur séparé, une machine virtuelle ou un containeur (une instance docker)

Dans le configuration du service (pool) FPM :

  listen = 10.0.0.2:9000
  listen.allowed_clients = 10.0.0.1

Dans la configuration du serveur Apache :

  SetHandler "proxy:fcgi://10.0.0.2:9000"

1.4.3 Plusieurs serveurs applicatifs

Pour traiter plus de requêtes simultanément, vous pouvez désirer répartir la charger entre plusieurs serveurs PHP, ce qui est très facile.

Exemple de configuration du serveur Apache avec 3 serveurs applicatifs :

  # Création du répartiteur de charge
  <Proxy balancer://phpfpmlb>
    BalancerMember fcgi://10.0.0.2:9000
    BalancerMember fcgi://10.0.0.3:9000
    BalancerMember fcgi://10.0.0.4:9000
  </Proxy>
  # Redirection de l'exécution des scripts PHP
  <FilesMatch \.php$>
    SetHandler "proxy:balancer://phpfpmlb"
 </FilesMatch>

2. Utilisation d'une version récente de PHP

RHEL fournit PHP version 5.4, qui était la version courante lors de la publication de RHEL-7, mais qui peut être trop ancienne pour des projets récents.

PHP version 5.6, 7.0 et 7.1 sont maintenant supportés sur RHEL, fournit dans le produit Red Hat Software Collections (RHSCL).

Dans l'example ci-dessous, nous utiliserons la version 7.0, mais s'applique à l'identique pour les autres versions.

2.1. Installation

Installation de la  Software Collection, après avoir activé le canal RHSCL:

  yum install rh-php70

Installation du service FPM service pour cette version:

  yum install rh-php70-php-fpm

Installation des extensions supplémentaires nécessaires :

  yum install rh-php70-php-mbstring rh-php70-php-pgsql rh-php70-php-opcache

Astuce : comparer la liste des extensions disponibles, pour s'assurer que tout ce qui est nécessaire est présent.

  php --modules | tee /tmp/54
  scl enable rh-php70 'php --modules' | tee /tmp/70
  diff /tmp/54 /tmp/70

Astuce : ne jamais se fier au nom des paquets, mais préférer le nom des extensions (e.g. php-mysqli ou rh-php70-php-simplexml), en effet la découpage des paquets peut changer entre les versions.

2.2. Utiliser une nouvelle version de PHP

Lorsqu'on utilise FPM, c'est aussi simple que darrêter l'ancien service et de démarrer le nouveau:

  systemctl stop  php-fpm
  systemctl start rh-php70-php-fpm

2.3. Paquet additionnels

Les Software Collections fournissent les même extensions que les paquets standard de RHEL.

Les utilisateurs sont habitués à trouver des extensions supplémentaires dans le dépôt EPEL, de la même manière, des extensions sont disponibles dans le dépôt communautaire centos-sclo-sclo, pour plus d'information, cherchez sclo-php sur le site https://www.softwarecollections.org/.

3. Utiliser plusieurs versions de PHP

Puisque l'exécution de PHP est redirigée version le service FastCGI service par la directive SetHandler, elle peut être définie pour chaque hôte virtuel, chaque projet ou chaque dossier.

Dans l'exemple ci-dessous, nous utiliserons PHP version 5.4 du système de base (pour des applications anciennes, qui a été configuré précédement)  et PHP version 7.1 simultanément.

3.1. Installation

Installation de la Software Collection, après avoir activé le canal RHSCL:

  yum install rh-php71 rh-php71-php-fpm rh-php71-php-mbstring rh-php71-php-opcache ...

Configuration de FPM pour écouter sur un port différent de celui utilisé par le service php-fpm service par défaut, dans le fichier /etc/opt/rh/rh-php71/php-fpm.d/www.conf.

  listen = 127.0.0.1:9071

Configurer SELinux pour ne pas bloquer ce port :

  semanage port -a -t http_port_t -p tcp 9071

Démarrer le service :

  systemctl start rh-php71-php-fpm

Il est désormais possible de choisir la version de PHP utilisée pour chaque dossier dans le fichier de configuration du serveur Apache :

Exemple:

  # Utiliser PHP 7.1 par défaut
  <FilesMatch \.php$>
    SetHandler "proxy:fcgi://127.0.0.1:9071"
  </FilesMatch>
  # Utiliser PHP 5.4 pour une ancienne application
  <Directory /var/www/html/old>
    <FilesMatch \.php$>
      SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
  </Directory>

4. Conclusion

J'espère que ce petit article a illustré les nombreux bénéfices de basculer sur FPM pour vos applications PHP:

  • isolation des processus entre le frontal web (httpd) et les serveurs applicatifs (fpm)
  • amélioration des performances
  • utilisation des versions modernes de PHP
  • utilisation de plusieurs versions de PHP

Red Hat va fournir PHP 7.1 pour RHEL (et CentOS)

Remi Collet

Annonce : Red Hat updates Python, PHP, Node.js, more; supports new arches et RHSCL 3.0 Beta Release Notes.

Que les accrocs de la stabilité se rassurent, PHP 5.3.3 reste la version standard fournit avec RHEL-6 et PHP 5.4.16 celle de RHEL-7.

Nous disposerons donc bientôt d'un moyen officiel et supporté d'installer PHP version 5.6, 7.0 ou 7.1, en parallèle  de la version système, sans affecter les composants standards. L'annonce prévoit un cycle de vie de 3 ans. La version fournit est la 7.1.8.

emblem-important-2-24.png Il s'agit pour l'instant uniquement d'une version Beta destinée à l'évaluation.

Pour plus d'informations sur l'installation et l'utilisation des SCL, vous pouvez consulter les autres billets déjà publiés à ce sujet :

emblem-notice-24.pngPour les utilisateurs des clones de RHEL (CentOS, Oracle, Scientific Linux, ...) vous pouvez utiliser le dépôt centos-sclo-rh-testing (maintenu par le SIG SCLo).

emblem-notice-24.pngPour ceux qui souhaitent plus d'extensions, vous pouvez utiliser la dépôt centos-sclo-sclo-testing.

En dehors de PHP, RHSCL 3.0 senrichit de plusieurs morceaux de choix, je retiendrais Mariadb 10.2, MongoDB 3.4 et PostgreSQL 9.6

Il me semble que c'est une excellent nouvelle qui devrait aider à l'adoption des versions récentes de PHP dans le monde de l'entreprise.

emblem-question-24.pngSi vous avez des questions, j'ai même ouvert un Forum dédié : About PHP SCL.