entanet_devops.ansible_role_php
Rôle Ansible : PHP
Installe PHP sur les 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 qui maintient une version de PHP, car ce rôle ne fonctionne qu'avec les versions de PHP actuellement prises en charge par la communauté PHP.
Variables de rôle
Les variables disponibles sont listées ci-dessous, avec des valeurs par défaut (voir defaults/main.yml
):
php_packages: []
Une liste des paquets PHP à installer (spécifique à l'OS 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 que vous souhaitez (par exemple, php-gd
pour la manipulation d'images, ou php-ldap
si vous avez besoin de 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 de 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 votre utilisation de PHP est liée à 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 daemon du 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 daemon sous lequel le serveur web fonctionne.
php_enablerepo: ""
(Seulement pour RedHat/CentOS) Si vous avez activé des dépôts supplémentaires (je peux suggérer 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 pratique, 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: "7.0"
(Seulement pour Debian/Ubuntu) La version par défaut de PHP dans les dépôts de la version donnée de l'OS. Par défaut, cela correspond à la dernière version LTS d'Ubuntu. Ubuntu 18.04 nécessite que cela soit défini sur "7.2"
puisque PHP 7.0 n'est pas disponible dans les paquets par défaut bioniques.
Si vous souhaitez pouvoir changer facilement de versions de PHP, ou utiliser une version qui n'est pas disponible dans les paquets système: Vous pouvez utiliser le rôle geerlingguy.php-versions
pour changer plus facilement entre les versions majeures 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 méthode simple pour é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 passer à la dernière version disponible. Combiné 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
(Seulement pour Debian/Ubuntu) Que faire pour installer les paquets recommandés lorsque vous installez php_packages
; vous voudrez 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 désiré !).
php_executable: "php"
L'exécutable à exécuter lors de l'appel de PHP depuis la ligne de commande. Vous ne devez 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 de logiciels 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 considérablement faciliter le scaling des applications PHP et est la méthode normale pour exécuter des sites et applications basés sur PHP lorsque vous utilisez un serveur web comme Nginx (bien qu'il puisse être utilisé également avec d'autres serveurs web).
Lorsque vous utilisez ce rôle avec PHP fonctionnant 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 travailler avec PHP-FPM en utilisant le rôle geerlingguy.apache-php-fpm.
php_fpm_listen: "127.0.0.1:9000"
php_fpm_listen_allowed_clients: "127.0.0.1"
php_fpm_pm_max_children: 50
php_fpm_pm_start_servers: 5
php_fpm_pm_min_spare_servers: 5
php_fpm_pm_max_spare_servers: 5
Paramètres spécifiques à l'intérieur du pool PHP-FPM www.conf
. 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, soit en utilisant lineinfile
comme le fait ce rôle dans tasks/configure-fpm.yml
.
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 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 l'OS
php_fpm_pool_group: "[apache|nginx|autre]" # par défaut varie selon l'OS
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: []
Différents 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 n'entreront en vigueur que si la version de PHP 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 que vous avez 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 ne pas obtenir des performances optimales !
Pour fournir un chemin personnalisé pour opcache.so, donnez 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. En général, 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
Si l'APCu doit être activée. D'autres variables APCu seront inefficaces si cela est défini sur faux.
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
pour qu'il puisse contenir toutes les entrées de cache en mémoire avec un peu de surcharge (la fragmentation ou le manque de mémoire d'APC ralentiront PHP dramatiquement).
php_apc_conf_filename: [spécifique à la plateforme]
Le nom de fichier de configuration APC spécifique à la plateforme. En général, la valeur par défaut devrait fonctionner, mais dans certains cas, vous devrez peut-être remplacer le nom de fichier.
Assurez-vous qu'APC est installé
Si vous utilisez APC, vous devrez vous assurer qu'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
figure dans la liste desphp_packages
. - Sur les systèmes Debian/Ubuntu : Assurez-vous que
php-apcu
figure dans la liste desphp_packages
.
Installation à partir de la source
Si vous avez besoin d'une version spécifique de PHP, ou si vous souhaitez tester la dernière version (par exemple, la version principale), il y a de bonnes chances qu'aucun paquet approprié ne soit déjà disponible dans le gestionnaire de paquets de votre plateforme. Dans ces cas, vous pouvez choisir d'installer PHP à partir de la source en le compilant directement.
Notez que la compilation à partir de la source prend beaucoup plus de temps que l'installation à partir des paquets (PHP HEAD prend plus de 5 minutes pour se compiler sur un ordinateur moderne à quatre cœurs, juste à titre de référence).
php_install_from_source: false
Définissez ceci 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"
Emplacement où la source sera clonée et installée, ainsi que l'emplacement du fichier d'en-tête GMP (ce qui peut être spécifique à la plateforme/à la distribution).
php_source_make_command: "make"
Définissez la commande make
sur make --jobs=X
où X
est le nombre de cœurs présents sur le serveur où PHP est compilé. Cela accélérera considérablement les temps de compilation si vous avez plusieurs cœurs.
php_source_configure_command: >
[...]
La commande ./configure
qui construira le Makefile à utiliser pour la compilation de PHP. Ajoutez toutes les options dont vous avez besoin pour votre environnement particulier. Utiliser un scalaire replié (>
) vous permet de définir la variable sur plusieurs lignes, ce qui est extrêmement 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, vous devez vous assurer queapxs2
est disponible sur votre système (par exemple, en installantapache2-prefork-dev
sur Ubuntu), et vous devez vous assurer que l'option--with-apxs2
est définie dansphp_source_configure_command
. Enfin, vous devrez vous assurer que le modulempm_prefork
est chargé au lieu dempm_worker
oumpm_event
, et probablement ajouter un fichier de configurationphpX.conf
(oùX
est la version majeure de PHP) dans le dossier de configuration du module Apache avec un contenu commephp7.conf
. - Apache avec
mpm_event
oumpm_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 dansphp_source_configure_command
. Vous devrez aussi vous assurer que le support d'Apache pour CGI et event est installé (par exemple, en installantapache2-mpm-event
etlibapache2-mod-fastcgi
) et que le modulempm_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 dansphp_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.
PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
ansible-galaxy install entanet_devops.ansible_role_php