geerlingguy.php

Rôle Ansible : PHP

CI

Installe PHP sur des serveurs RedHat/CentOS et Debian/Ubuntu.

Exigences

Si vous utilisez une ancienne version LTS d'Ubuntu ou de RHEL, avec une version de PHP obsolète, vous devez utiliser un dépôt ou PPA avec une version de PHP maintenue, car ce rôle ne fonctionne qu'avec les versions de PHP actuellement supportées par la communauté PHP.

Variables du Rôle

Les variables disponibles sont listées ci-dessous, avec les valeurs par défaut (voir defaults/main.yml):

php_packages: []

Une liste des paquets PHP à installer (spécifique au système d'exploitation par défaut). Vous voudrez probablement installer des paquets courants comme php, php-cli, php-devel et php-pdo, et vous pouvez ajouter d'autres paquets qui vous intéressent (par exemple, php-gd pour la manipulation d'images, ou php-ldap si vous devez vous connecter à un serveur LDAP pour l'authentification).

Remarque : Si vous utilisez Debian/Ubuntu, vous devez également installer libapache2-mod-fastcgi (pour cgi/PHP-FPM) ou libapache2-mod-php7.0 (ou un paquet similaire selon la version PHP) si vous souhaitez utiliser mod_php avec Apache.

php_packages_extra: []

Une liste de paquets PHP supplémentaires à installer sans remplacer la liste par défaut.

php_enable_webserver: true

Si vous utilisez PHP lié à un serveur web (par exemple, Apache ou Nginx), laissez cette valeur par défaut. Si vous utilisez PHP côté serveur ou pour exécuter une petite application, définissez cette valeur sur false afin que ce rôle n'essaie pas d'interagir avec un serveur web.

php_webserver_daemon: "httpd"

Les valeurs par défaut pour le démon serveur HTTP sont httpd (utilisé par Apache) pour RedHat/CentOS, ou apache2 (également utilisé par Apache) pour Debian/Ubuntu. Si vous exécutez un autre serveur web (par exemple, nginx), changez cette valeur par le nom du démon sous lequel le serveur web fonctionne.

php_enablerepo: ""

(Uniquement pour RedHat/CentOS) Si vous avez activé des dépôts supplémentaires (je vous suggérerais geerlingguy.repo-epel ou geerlingguy.repo-remi), ces dépôts peuvent être listés sous cette variable (par exemple remi-php70,epel). Cela peut être utile, par exemple, si vous souhaitez installer la dernière version de PHP 7.0, qui se trouve dans le dépôt Remi.

php_default_version_debian: ""

(Uniquement pour Debian/Ubuntu) La version par défaut de PHP dans les dépôts de la version donnée du système d'exploitation. La version spécifique est définie par distribution et par version, mais vous pouvez la remplacer en fournissant une valeur ici, par exemple "7.4".

Si vous souhaitez pouvoir changer facilement de versions PHP, ou utiliser une version qui n'est pas disponible dans les paquets systèmes : Vous pouvez utiliser le rôle geerlingguy.php-versions pour changer plus facilement entre les grandes versions de PHP (par exemple 5.6, 7.1, 7.2).

php_packages_state: "present"

Si vous avez activé des dépôts supplémentaires tels que geerlingguy.repo-epel ou geerlingguy.repo-remi, vous voudrez peut-être une manière simple d'échanger les versions de PHP à la volée. Par défaut, cela est défini sur "present". Vous pouvez remplacer cette variable par "latest" pour mettre à jour vers la version la plus récente disponible. Couplé avec php_enablerepo, un utilisateur n'a plus besoin de désinstaller manuellement les paquets PHP existants avant de les installer à partir d'un autre dépôt.

php_install_recommends: true

(Uniquement pour Debian/Ubuntu) Que faire pour installer les paquets recommandés lors de l'installation de php_packages ; vous devriez peut-être définir cela sur no explicitement si vous installez un PPA qui recommande certains paquets que vous ne souhaitez pas (par exemple, le PPA php d'Ondrej installera php7.0-cli si vous installez php-pear avec php5.6-cli... ce qui n'est souvent pas souhaitable !).

php_executable: "php"

L'exécutable à exécuter lors de l'appel de PHP depuis la ligne de commande. Vous ne devriez le changer que si l'exécution de php sur votre serveur ne cible pas l'exécutable correct, ou si vous utilisez des collections logicielles sur RHEL/CentOS et devez cibler une autre version de PHP.

PHP-FPM

PHP-FPM est un gestionnaire de processus FastCGI simple et robuste pour PHP. Il peut grandement faciliter le scalage des applications PHP et est la manière normale d'exécuter des sites et applications basés sur PHP lorsque l'on utilise un serveur comme Nginx (bien qu'il puisse également être utilisé avec d'autres serveurs web tout aussi facilement).

Lorsque vous utilisez ce rôle avec PHP exécuté en tant que php-fpm au lieu d'en tant que processus à l'intérieur d'un serveur web (par exemple, mod_php d'Apache), vous devez définir la variable suivante sur true :

php_enable_php_fpm: false

Si vous utilisez Apache, vous pouvez facilement le configurer pour fonctionner avec PHP-FPM en utilisant le rôle geerlingguy.apache-php-fpm.

php_fpm_state: started
php_fpm_enabled_on_boot: true

Contrôle de l'état du démon fpm ; définissez ces options à stopped et false si vous souhaitez que FPM soit installé et configuré, mais pas en cours d'exécution (par exemple, lors de l'installation dans un conteneur).

php_fpm_handler_state: restarted

Le gestionnaire redémarre PHP-FPM par défaut. Définir la valeur sur reloaded rechargera le service au lieu de le redémarrer.

php_fpm_pools:
  - pool_name: www
    pool_template: www.conf.j2
    pool_listen: "127.0.0.1:9000"
    pool_listen_allowed_clients: "127.0.0.1"
    pool_pm: dynamic
    pool_pm_max_children: 5
    pool_pm_start_servers: 2
    pool_pm_min_spare_servers: 1
    pool_pm_max_spare_servers: 3
    pool_pm_max_requests: 500
    pool_pm_status_path: /status

Liste des pools PHP-FPM à créer. Par défaut, le pool www est créé. Pour configurer un nouveau pool, ajoutez un élément à la liste php_fpm_pools.

Paramètres spécifiques dans le pool PHP-FPM par défaut www.conf.j2. Si vous souhaitez gérer des paramètres supplémentaires, vous pouvez le faire soit en remplaçant le fichier par votre propre modèle à l'aide de pool_template.

Paramètres php.ini

php_use_managed_ini: true

Par défaut, tous les paramètres supplémentaires ci-dessous sont appliqués via le fichier php.ini inclus avec ce rôle. Vous pouvez gérer vous-même votre fichier php.ini (si vous avez besoin de plus de flexibilité dans sa configuration) en définissant cela sur false (dans ce cas, toutes les variables ci-dessous seront ignorées).

php_fpm_pool_user: "[apache|nginx|autre]" # par défaut varie selon le système
php_fpm_pool_group: "[apache|nginx|autre]" # par défaut varie selon le système
php_memory_limit: "256M"
php_max_execution_time: "60"
php_max_input_time: "60"
php_max_input_vars: "1000"
php_realpath_cache_size: "32K"
php_file_uploads: "On"
php_upload_max_filesize: "64M"
php_max_file_uploads: "20"
php_post_max_size: "32M"
php_date_timezone: "America/Chicago"
php_allow_url_fopen: "On"
php_sendmail_path: "/usr/sbin/sendmail -t -i"
php_output_buffering: "4096"
php_short_open_tag: false
php_error_reporting: "E_ALL & ~E_DEPRECATED & ~E_STRICT"
php_display_errors: "Off"
php_display_startup_errors: "On"
php_expose_php: "On"
php_session_cookie_lifetime: 0
php_session_gc_probability: 1
php_session_gc_divisor: 1000
php_session_gc_maxlifetime: 1440
php_session_save_handler: files
php_session_save_path: ''
php_disable_functions: []
php_precision: 14
php_serialize_precision: "-1"

Divers paramètres par défaut pour PHP. Utilisés uniquement si php_use_managed_ini est défini sur true.

Variables liées à OpCache

L'OpCache est inclus dans PHP à partir de la version 5.5, et les variables suivantes ne prendront effet que si la version de PHP que vous avez installée est 5.5 ou supérieure.

php_opcache_zend_extension: "opcache.so"
php_opcache_enable: "1"
php_opcache_enable_cli: "0"
php_opcache_memory_consumption: "96"
php_opcache_interned_strings_buffer: "16"
php_opcache_max_accelerated_files: "4096"
php_opcache_max_wasted_percentage: "5"
php_opcache_validate_timestamps: "1"
php_opcache_revalidate_path: "0"
php_opcache_revalidate_freq: "2"
php_opcache_max_file_size: "0"

Directives ini d'OpCache qui sont souvent personnalisées sur un système. Assurez-vous d'avoir suffisamment de mémoire et de slots de fichiers alloués dans l'OpCache (php_opcache_memory_consumption, en Mo, et php_opcache_max_accelerated_files) pour contenir tout le code PHP que vous exécutez. Sinon, vous pourriez avoir une performance sous-optimale !

Pour un emplacement personnalisé d'opcache.so, fournissez le chemin complet avec php_opcache_zend_extension.

php_opcache_conf_filename: [spécifique à la plateforme]

Le nom de fichier de configuration opcache spécifique à la plateforme. Généralement, la valeur par défaut devrait fonctionner, mais dans certains cas, vous devrez peut-être remplacer le nom de fichier.

Variables liées à APCu

php_enable_apc: true

Que faire pour activer APCu. Les autres variables APCu seront inefficaces si cela est défini sur false.

php_apc_shm_size: "96M"
php_apc_enable_cli: "0"

Directives ini d'APCu qui sont souvent personnalisées sur un système. Définissez php_apc_shm_size de manière à ce qu'il puisse contenir toutes les entrées de cache en mémoire avec un petit surplus (la fragmentation ou un manque de mémoire arrêterait.php assez rapidement).

php_apc_conf_filename: [spécifique à la plateforme]

Le nom de fichier de configuration APC spécifique à la plateforme. Généralement, la valeur par défaut devrait fonctionner, mais dans certains cas, vous devrez peut-être remplacer le nom de fichier.

Assurer l'installation d'APC

Si vous utilisez APC, vous devez vous assurer que APC est installé (il est installé par défaut, mais si vous personnalisez la liste php_packages, vous devez inclure APC dans la liste) :

  • Sur les systèmes RHEL/CentOS : Assurez-vous que php-pecl-apcu est dans la liste des php_packages.
  • Sur les systèmes Debian/Ubuntu : Assurez-vous que php-apcu est dans la liste des php_packages.

Installation à partir du code source

Si vous avez besoin d'une version spécifique de PHP, ou si vous souhaitez tester la dernière version (par exemple, master) de PHP, il y a de fortes chances qu'il n'y ait pas de paquet adéquat déjà disponible dans le gestionnaire de paquets de votre plateforme. Dans ces cas, vous pouvez choisir d'installer PHP à partir du code source en le compilant directement.

Notez que la compilation à partir de la source prend beaucoup plus de temps que l'installation à partir de paquets (PHP HEAD prend plus de 5 minutes à compiler sur un ordinateur moderne à processeur quad-core, juste pour référence).

php_install_from_source: false

Définissez cela sur true pour installer PHP à partir de la source au lieu d'installer à partir de paquets.

php_source_version: "master"

La version de PHP à installer à partir de la source (une branche git, un tag ou un hash de commit).

php_source_clone_dir: "~/php-src"
php_source_clone_depth: 1
php_source_install_path: "/opt/php"
php_source_install_gmp_path: "/usr/include/x86_64-linux-gnu/gmp.h"
php_source_mysql_config: "/usr/bin/mysql_config"

Emplacement où la source sera clonée et installée, ainsi que l'emplacement du fichier d'en-tête GMP (qui peut être spécifique à la plateforme/distribution), et le binaire mysql_config (cela peut être mariadb_config dans les versions plus récentes des systèmes d'exploitation).

php_source_make_command: "make"

Définissez la commande make sur make --jobs=XX est le nombre de cœurs présents sur le serveur où PHP est en cours de compilation. Cela accélérera considérablement les temps de compilation si vous avez plusieurs cœurs.

php_source_configure_command: >
  [...]

La commande ./configure qui générera le Makefile à utiliser pour la compilation de PHP. Ajoutez toutes les options dont vous avez besoin pour votre environnement particulier. L'utilisation d'un scalaire replié (>) vous permet de définir la variable sur plusieurs lignes, ce qui est très utile pour la lisibilité et le contrôle de version !

Quelques autres notes/avertissements pour des configurations spécifiques :

  • Apache avec mpm_prefork : Si vous utilisez Apache avec prefork comme serveur web pour PHP, assurez-vous que apxs2 est disponible sur votre système (par exemple, en installant apache2-prefork-dev sur Ubuntu), et vous devez vous assurer que l'option --with-apxs2 est définie dans php_source_configure_command. Enfin, vous devrez vous assurer que le module mpm_prefork est chargé au lieu de mpm_worker ou mpm_event, et probablement ajouter un fichier de configuration phpX.conf (où X est la version majeure de PHP) au dossier de configuration des modules d'Apache avec un contenu comme php7.conf.
  • Apache avec mpm_event ou mpm_worker : Si vous utilisez Apache avec event ou worker comme serveur web pour PHP, vous devez compiler PHP avec FPM. Assurez-vous que l'option --enable-fpm est définie dans php_source_configure_command. Vous devez également vous assurer que le support d'Apache pour CGI et event est installé (par exemple, en installant apache2-mpm-event et libapache2-mod-fastcgi) et que le module mpm_event est chargé.
  • Nginx : Si vous utilisez Nginx comme serveur web pour PHP, vous devez compiler PHP avec FPM. Assurez-vous que l'option --enable-fpm est définie dans php_source_configure_command.

Dépendances

Aucune.

Exemple de Playbook

- hosts: webservers
  vars_files:
    - vars/main.yml
  roles:
    - { role: geerlingguy.php }

À l'intérieur de vars/main.yml :

php_memory_limit: "128M"
php_max_execution_time: "90"
php_upload_max_filesize: "256M"
php_packages:
  - php
  - php-cli
  - php-common
  - php-devel
  - php-gd
  - php-mbstring
  - php-pdo
  - php-pecl-apcu
  - php-xml
  ...

Licence

MIT / BSD

Informations sur l'Auteur

Ce rôle a été créé en 2014 par Jeff Geerling, auteur de Ansible for DevOps.

À propos du projet

PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.

Installer
ansible-galaxy install geerlingguy.php
Licence
mit
Téléchargements
10.8M
Propriétaire
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns