Recherche de site Web

Installer PHP OPcache sur Rocky/Alma/CentOS 9|8


L'OPcache est conçu pour améliorer les performances de PHP en stockant le bytecode des scripts précompilés dans la mémoire partagée. En mettant en cache les scripts PHP en mémoire, il supprime le besoin pour PHP de charger et d'analyser les scripts à chaque requête reçue. Lorsqu'on héberge des sites web ou des applications web développés en PHP, l'utilisation d'OPcache améliorera considérablement la réactivité et les temps de chargement en général.

Voici comment fonctionne PHP OPcache :

  1. Compilation de script : OPcache compile un script demandé en bytecode.
  2. Mise en cache du bytecode : Une fois compilé, le bytecode est stocké dans la mémoire partagée pour un accès plus rapide.
  3. Exécution des requêtes suivantes : La prochaine fois qu’une requête est reçue pour le même script, le bytecode mis en cache est utilisé, contournant ainsi l’étape de compilation et permettant une exécution plus rapide.

En résumé, en utilisant OPcache, vous bénéficierez d'une exécution plus rapide des scripts PHP, d'une empreinte réduite sur le processeur et la mémoire, et d'une meilleure évolutivité du système puisqu'il peut gérer davantage de requêtes simultanées.

Comment pouvez-vous alors installer et configurer PHP OPcache sur les systèmes Linux Rocky Linux/AlmaLinux et CentOS Stream 9|8. Suivez ce guide pour savoir comment faire.

Passer à l'édition PHP de REMI

Nous ne pouvons activer OPcache que sur un système avec PHP installé. Les systèmes mentionnés distribuent plusieurs versions de PHP dans les dépôts AppStream. Mais Opcache est fourni dans les dépôts REMI.

Pour vérifier si PHP est installé, exécutez la commande :

$ php --version
PHP 8.2.13 (cli) (built: Nov 21 2023 09:55:59) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend Technologies

D'après mon système, nous pouvons confirmer que la version est 8.2. Nous pouvons donc réinitialiser le module PHP.

sudo dnf module reset php -y

Ensuite, nous installons le dépôt RPM de Remi :

  • Enterprise Linux 9 – (Rocky/Alma/CentoS Stream 9)
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
  • Enterprise Linux 8 – (Rocky/Alma/CentoS Stream 8)
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

L'installateur configurera automatiquement le dépôt EPEL comme dépendance. Pour vérifier que REMI fonctionne, exécutez :

$ sudo dnf -y repolist
repo id                                                                                 repo name
appstream                                                                               Rocky Linux 8 - AppStream
baseos                                                                                  Rocky Linux 8 - BaseOS
epel                                                                                    Extra Packages for Enterprise Linux 8 - x86_64
extras                                                                                  Rocky Linux 8 - Extras
remi-modular                                                                            Remi's Modular repository for Enterprise Linux 8 - x86_64
remi-safe                                                                               Safe Remi's RPM repository for Enterprise Linux 8 - x86_64

Tous les modules PHP peuvent être vérifiés en exécutant la commande suivante :

 dnf module list php

Voici le résultat d'exemple :

Rocky Linux 8 - AppStream
Name                                        Stream                                              Profiles                                                          Summary
php                                         7.2 [d][x]                                          common [d], devel, minimal                                        PHP scripting language
php                                         7.3 [x]                                             common [d], devel, minimal                                        PHP scripting language
php                                         7.4 [x]                                             common [d], devel, minimal                                        PHP scripting language
php                                         8.0 [x]                                             common [d], devel, minimal                                        PHP scripting language
php                                         8.2 [x]                                             common [d], devel, minimal                                        PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                                        Stream                                              Profiles                                                          Summary
php                                         remi-7.2 [x]                                        common [d], devel, minimal                                        PHP scripting language
php                                         remi-7.3 [x]                                        common [d], devel, minimal                                        PHP scripting language
php                                         remi-7.4 [x]                                        common [d], devel, minimal                                        PHP scripting language
php                                         remi-8.0 [x]                                        common [d], devel, minimal                                        PHP scripting language
php                                         remi-8.1 [x]                                        common [d], devel, minimal                                        PHP scripting language
php                                         remi-8.2 [x]                                        common [d], devel, minimal                                        PHP scripting language
php                                         remi-8.3 [x]                                        common [d], devel, minimal                                        PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Maintenant, activez le module PHP spécifique de REMI. D'après la sortie précédente, la version de PHP installée était 8.2, ce qui signifie que nous devrions activer le module php:remi-8.2.

sudo dnf module install php:remi-8.2 -y

Dans la plupart des cas, il mettra à jour votre version de PHP installée et ne désinstallera pas les paquets.

Dependencies resolved.
==============================================================================================================================================================================================================================
 Package                                               Architecture                                   Version                                                      Repository                                            Size
==============================================================================================================================================================================================================================
Upgrading:
 php-cli                                               x86_64                                         8.2.21-1.el8.remi                                            remi-modular                                         5.5 M
 php-common                                            x86_64                                         8.2.21-1.el8.remi                                            remi-modular                                         1.3 M
 php-fpm                                               x86_64                                         8.2.21-1.el8.remi                                            remi-modular                                         1.9 M
 php-mbstring                                          x86_64                                         8.2.21-1.el8.remi                                            remi-modular                                         583 k
 php-xml                                               x86_64                                         8.2.21-1.el8.remi                                            remi-modular                                         264 k
Installing dependencies:
 oniguruma5php                                         x86_64                                         6.9.9-1.el8.remi                                             remi-safe                                            213 k
Installing module profiles:
 php/common
Enabling module streams:
 php                                                                                                  remi-8.2

Transaction Summary
==============================================================================================================================================================================================================================
Install  1 Package
Upgrade  5 Packages

Total download size: 9.7 M
Is this ok [y/N]: y

Installation de PHP OPcache

Avec le dépôt RPM de REMI configuré, nous pouvons rechercher les versions disponibles d'OPcache.

$ sudo dnf search opcache
Last metadata expiration check: 0:07:55 ago on Sun 28 Jul 2024 10:12:13 PM UTC.
============================================================================================== Name & Summary Matched: opcache ===============================================================================================
php-opcache.x86_64 : The Zend OPcache
php56-php-opcache.x86_64 : The Zend OPcache
php70-php-opcache.x86_64 : The Zend OPcache
php71-php-opcache.x86_64 : The Zend OPcache
php72-php-opcache.x86_64 : The Zend OPcache
php73-php-opcache.x86_64 : The Zend OPcache
php74-php-opcache.x86_64 : The Zend OPcache
php80-php-opcache.x86_64 : The Zend OPcache
php81-php-opcache.x86_64 : The Zend OPcache
php82-php-opcache.x86_64 : The Zend OPcache
php83-php-opcache.x86_64 : The Zend OPcache
php84-php-opcache.x86_64 : The Zend OPcache

Dans cet exemple, nous installons php82-php-opcache, qui est spécifique à la version 8.2 de PHP. Changez pour une version adaptée à votre installation PHP.

sudo dnf install php82-php-opcache

Des informations supplémentaires sur le paquet installé peuvent être consultées en utilisant les commandes rpm -qi :

$ rpm -qi php82-php-opcache
Name        : php82-php-opcache
Version     : 8.2.21
Release     : 1.el8.remi
Architecture: x86_64
Install Date: Sun 28 Jul 2024 10:21:52 PM UTC
Group       : Unspecified
Size        : 1024035
License     : PHP-3.01
Signature   : RSA/SHA256, Tue 02 Jul 2024 02:07:23 PM UTC, Key ID 555097595f11735a
Source RPM  : php82-php-8.2.21-1.el8.remi.src.rpm
Build Date  : Tue 02 Jul 2024 01:33:41 PM UTC
Build Host  : builder.remirepo.net
Relocations : (not relocatable)
Packager    : Remi Collet
Vendor      : Remi's RPM repository <https://rpms.remirepo.net/> #StandWithUkraine
URL         : http://www.php.net/
Bug URL     : https://forum.remirepo.net/
Summary     : The Zend OPcache
...

Configurer PHP OPcache

Utilisez la commande find pour localiser le chemin du module OPcache.

$ sudo find / -name opcache.so
/usr/lib64/php/modules/opcache.so
/usr/lib64/php-zts/modules/opcache.so

Le module devrait se charger automatiquement lors de l'installation.

$ php -m  | grep -i opcache
Zend OPcache
Zend OPcache

L'installateur créera également un modèle de configuration dans /etc/php.d, que vous pourrez personnaliser.

$ ls /etc/php.d/|grep opcache
10-opcache.ini
opcache-default.blacklist

Ouvrez le fichier pour le modifier.

sudo vi /etc/php.d/10-opcache.ini

Dans notre serveur, nous utilisons les paramètres suivants pour offrir de bonnes performances :

; Enable Zend OPcache extension module
zend_extension=opcache

; Determines if Zend OPCache is enabled
opcache.enable=1

; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1

; The OPcache shared memory storage size (in MB)
opcache.memory_consumption=512

; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=128

; The maximum number of keys (scripts) in the OPcache hash table.
opcache.max_accelerated_files=10000

; The maximum percentage of "wasted" memory until a restart is scheduled.
opcache.max_wasted_percentage=5

; Enable timestamp validation, ensuring that cached files are up to date.
opcache.validate_timestamps=1

; Checks for script changes every 2 seconds.
opcache.revalidate_freq=2

; Path where OPcache can store file cache.
opcache.file_cache=/tmp

; Enables or disables opcode caching in shared memory.
opcache.file_cache_only=0

; Enables or disables checksum validation when script loaded from file cache.
opcache.file_cache_consistency_checks=1

; Other performance settings
opcache.fast_shutdown=1
opcache.enable_file_override=1
opcache.optimization_level=0x7FFFBFFF

Reportez-vous à la documentation officielle d'OPcache pour une liste complète des options que vous pouvez configurer et personnaliser.

Tester si OPcache fonctionne

Redémarrez vos services de serveur web et php-fpm.

  • Serveur web Nginx
sudo systemctl restart php-fpm nginx
  • Serveur web Apache httpd
sudo systemctl restart php-fpm httpd

La liste des configurations d'exécution d'OPcache peut être obtenue en exécutant les commandes ci-dessous :

php -i | grep opcache

Créez un script PHP exemple pour tester si OPcache fonctionne dans notre système.

  • Serveur web Nginx
sudo vi /usr/share/nginx/html/opcache.php
  • Serveur web Apache httpd
sudo vi /var/www/html/opcache.php

Ajoutez le contenu dans le fichier.

<?php
if (function_exists('opcache_get_status')) {
    $status = opcache_get_status();
    if ($status) {
        echo "OPcache is enabled on the server.";
    } else {
        echo "OPcache is disabled on the server..";
    }
} else {
    echo "OPcache is not installed.";
}
?>

Enregistrez et ouvrez le fichier depuis http://serverIP_or_fqdn/opcache.php

Cela confirme que PHP OPcache fonctionne correctement sur notre système. Nous espérons que cet article vous a été utile et vous souhaitons des temps de chargement de site web plus rapides !