geerlingguy.php

Rol de Ansible: PHP

CI

Instala PHP en servidores RedHat/CentOS y Debian/Ubuntu.

Requisitos

Si usas una versión LTS antigua de Ubuntu o RHEL, con una versión de PHP obsoleta, necesitas usar un repositorio o PPA que tenga una versión de PHP actualizada, ya que este rol solo funciona con versiones de PHP que son soportadas actualmente por la comunidad de PHP.

Variables del Rol

Las variables disponibles se enumeran a continuación, junto con los valores predeterminados (ver defaults/main.yml):

php_packages: []

Una lista de los paquetes de PHP a instalar (por defecto específicos del sistema operativo). Es probable que quieras instalar paquetes comunes como php, php-cli, php-devel y php-pdo, y puedes agregar otros paquetes que desees (por ejemplo, php-gd para manipulación de imágenes, o php-ldap si necesitas conectarte a un servidor LDAP para autenticación).

Nota: Si estás usando Debian/Ubuntu, también necesitas instalar libapache2-mod-fastcgi (para cgi/PHP-FPM) o libapache2-mod-php7.0 (o un paquete similar dependiendo de la versión de PHP) si deseas usar mod_php con Apache.

php_packages_extra: []

Una lista de paquetes PHP adicionales para instalar sin sobrescribir la lista predeterminada.

php_enable_webserver: true

Si tu uso de PHP está vinculado a un servidor web (por ejemplo, Apache o Nginx), deja este valor predeterminado. Si usas PHP en el lado del servidor o para ejecutar una pequeña aplicación, establece este valor a false para que este rol no intente interactuar con un servidor web.

php_webserver_daemon: "httpd"

Los valores predeterminados para el demonio del servidor HTTP son httpd (usado por Apache) para RedHat/CentOS, o apache2 (también usado por Apache) para Debian/Ubuntu. Si estás utilizando otro servidor web (por ejemplo, nginx), cambia este valor al nombre del demonio bajo el que se ejecuta el servidor web.

php_enablerepo: ""

(Solo para RedHat/CentOS) Si has habilitado repositorios adicionales (te sugiero geerlingguy.repo-epel o geerlingguy.repo-remi), esos repositorios se pueden listar bajo esta variable (por ejemplo, remi-php70,epel). Esto puede ser útil, como ejemplo, si deseas instalar la última versión de PHP 7.0, que está en el repositorio Remi.

php_default_version_debian: ""

(Solo para Debian/Ubuntu) La versión predeterminada de PHP en los repositorios de la versión del SO dada. La versión específica se establece por distribución y versión, pero puedes sobrescribirla proporcionando un valor aquí, como "7.4".

Si deseas poder cambiar de versión de PHP fácilmente, o usar una versión que no está disponible en los paquetes del sistema: Puedes usar el rol geerlingguy.php-versions para cambiar más fácilmente entre versiones principales de PHP (por ejemplo, 5.6, 7.1, 7.2).

php_packages_state: "present"

Si has habilitado repositorios adicionales como geerlingguy.repo-epel o geerlingguy.repo-remi, puedes querer una forma fácil de cambiar versiones de PHP al instante. Por defecto, esto está configurado en "present". Puedes sobrescribir esta variable a "latest" para actualizar a la versión más reciente disponible. Combinado con php_enablerepo, un usuario ya no necesita desinstalar manualmente los paquetes existentes de PHP antes de instalarlos desde un repositorio diferente.

php_install_recommends: true

(Solo para Debian/Ubuntu) Si se deben instalar paquetes recomendados al instalar php_packages; quizás desees establecer esto en no explícitamente si estás instalando un PPA que recomienda ciertos paquetes que no deseas (por ejemplo, el PPA de php de Ondrej instalará php7.0-cli si instalas php-pear junto con php5.6-cli, ¡lo cual a menudo no es deseado!).

php_executable: "php"

El ejecutable a ejecutar cuando llames a PHP desde la línea de comandos. Solo debes cambiar esto si ejecutar php en tu servidor no apunta al ejecutable correcto, o si estás usando colecciones de software en RHEL/CentOS y necesitas apuntar a una versión diferente de PHP.

PHP-FPM

PHP-FPM es un administrador de procesos FastCGI simple y robusto para PHP. Puede facilitar mucho la escalabilidad de aplicaciones PHP y es la forma normal de ejecutar sitios y aplicaciones basados en PHP cuando se usa un servidor web como Nginx (aunque también se puede usar con otros servidores web de igual manera).

Cuando utilices este rol con PHP ejecutándose como php-fpm en lugar de como un proceso dentro de un servidor web (por ejemplo, el mod_php de Apache), necesitas establecer la siguiente variable a true:

php_enable_php_fpm: false

Si usas Apache, puedes configurarlo fácilmente para que funcione con PHP-FPM utilizando el rol geerlingguy.apache-php-fpm.

php_fpm_state: started
php_fpm_enabled_on_boot: true

Control sobre el estado del demonio fpm; establece estos valores a stopped y false si deseas que FPM esté instalado y configurado, pero no ejecutándose (por ejemplo, al instalar en un contenedor).

php_fpm_handler_state: restarted

El manejador reinicia PHP-FPM por defecto. Establecer el valor a reloaded recargará el servicio, en lugar de reiniciarlo.

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

Lista de grupos PHP-FPM a crear. Por defecto, se crea el grupo www. Para configurar un nuevo grupo, añade un elemento a la lista php_fpm_pools.

Configuraciones específicas dentro de la configuración predeterminada del grupo www.conf.j2 de PHP-FPM. Si deseas gestionar configuraciones adicionales, puedes hacerlo reemplazando el archivo con tu propia plantilla utilizando pool_template.

Configuraciones de php.ini

php_use_managed_ini: true

Por defecto, todos los parámetros extra a continuación se aplican a través de php.ini incluido con este rol. Puedes gestionar tu archivo php.ini (si necesitas más flexibilidad en su configuración) estableciendo esto en false (en cuyo caso se ignorarán todas las variables a continuación).

php_fpm_pool_user: "[apache|nginx|other]" # El valor predeterminado varía según el SO
php_fpm_pool_group: "[apache|nginx|other]" # El valor predeterminado varía según el SO
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"

Varios valores predeterminados para PHP. Solo se utilizan si php_use_managed_ini se establece en true.

Variables relacionadas con OpCache

El OpCache está incluido en PHP a partir de la versión 5.5, y las siguientes variables solo tendrán efecto si la versión de PHP que tienes instalada es 5.5 o mayor.

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"

Directivas ini de OpCache que a menudo se personalizan en un sistema. Asegúrate de tener suficiente memoria y espacio para archivos asignados en el OpCache (php_opcache_memory_consumption, en MB, y php_opcache_max_accelerated_files) para contener todo el código PHP que estás ejecutando. Si no, ¡puedes obtener un rendimiento subóptimo!

Para una ubicación personalizada de opcache.so proporciona la ruta completa con php_opcache_zend_extension.

php_opcache_conf_filename: [específico de la plataforma]

El nombre de archivo de configuración de opcache específico de la plataforma. Generalmente el valor predeterminado debería funcionar, pero en algunos casos, es posible que necesites sobrescribir el nombre de archivo.

Variables relacionadas con APCu

php_enable_apc: true

Si se debe habilitar APCu. Otras variables de APCu no tendrán efecto si esto se establece en falso.

php_apc_shm_size: "96M"
php_apc_enable_cli: "0"

Directivas ini de APCu que a menudo se personalizan en un sistema. Establece php_apc_shm_size para que contenga todas las entradas de caché en memoria con un poco de sobrecarga (la fragmentación o que APC se quede sin memoria ralentizarán PHP dramáticamente).

php_apc_conf_filename: [específico de la plataforma]

El nombre de archivo de configuración APC específico de la plataforma. Generalmente el valor predeterminado debería funcionar, pero en algunos casos, es posible que necesites sobrescribir el nombre de archivo.

Asegurando que APC esté instalado

Si usas APC, necesitarás asegurarte de que APC esté instalado (se instala por defecto, pero si personalizas la lista de php_packages, necesitas incluir APC en la lista):

  • En sistemas RHEL/CentOS: Asegúrate de que php-pecl-apcu esté en la lista de php_packages.
  • En sistemas Debian/Ubuntu: Asegúrate de que php-apcu esté en la lista de php_packages.

Instalando desde el código fuente

Si necesitas una versión específica de PHP, o deseas probar la última (por ejemplo, la versión master) de PHP, hay una buena probabilidad de que no haya un paquete adecuado ya disponible en el administrador de paquetes de tu plataforma. En estos casos, puedes optar por instalar PHP desde el código fuente compilándolo directamente.

Ten en cuenta que la compilación desde el código fuente toma mucho más tiempo que la instalación desde paquetes (PHP HEAD tarda más de 5 minutos en compilarse en una computadora moderna de cuatro núcleos, solo como referencia).

php_install_from_source: false

Establece esto en true para instalar PHP desde el código fuente en lugar de instalar desde paquetes.

php_source_version: "master"

La versión de PHP a instalar desde el código fuente (una rama de git, etiqueta o 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"

Ubicación donde se clonará e instalará el código fuente, y la ubicación del archivo de cabecera GMP (que puede ser específico de la plataforma/distribución), y el binario mysql_config (esto puede ser mariadb_config en versiones más nuevas de los sistemas operativos).

php_source_make_command: "make"

Establece el comando make a make --jobs=X donde X es el número de núcleos presentes en el servidor donde se está compilando PHP. Aumentará drásticamente los tiempos de compilación si tienes múltiples núcleos.

php_source_configure_command: >
  [...]

El comando ./configure que se usará para construir el Makefile que se usará para la compilación de PHP. Agrega todas las opciones que necesitas para tu entorno particular. Usar un escalar plegado (>) te permite definir la variable en varias líneas, lo que es extremadamente útil para la legibilidad y el control de versiones del código fuente.

Algunas otras notas/caveats para configuraciones específicas:

  • Apache con mpm_prefork: Si estás usando Apache con prefork como servidor web para PHP, necesitarás asegurarte de que apxs2 esté disponible en tu sistema (por ejemplo, instalando apache2-prefork-dev en Ubuntu), y necesitarás asegurarte de que la opción --with-apxs2 esté definida en php_source_configure_command. Finalmente, necesitarás asegurarte de que se cargue el módulo mpm_prefork en lugar de mpm_worker o mpm_event, y probablemente agregar un archivo de configuración phpX.conf (donde X es la versión principal de PHP) a la carpeta de configuración de módulos de Apache con contenidos como php7.conf.
  • Apache con mpm_event o mpm_worker: Si estás usando Apache con event o worker como servidor web para PHP, necesitarás compilar PHP con FPM. Asegúrate de que la opción --enable-fpm esté definida en php_source_configure_command. También necesitarás asegurarte de que la compatibilidad de Apache con CGI y event esté instalada (por ejemplo, instalando apache2-mpm-event y libapache2-mod-fastcgi) y se cargue el módulo mpm_event.
  • Nginx: Si estás usando Nginx como servidor web para PHP, necesitarás compilar PHP con FPM. Asegúrate de que la opción --enable-fpm esté definida en php_source_configure_command.

Dependencias

Ninguna.

Ejemplo de Playbook

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

Dentro 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
  ...

Licencia

MIT / BSD

Información del Autor

Este rol fue creado en 2014 por Jeff Geerling, autor de Ansible for DevOps.

Acerca del proyecto

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

Instalar
ansible-galaxy install geerlingguy.php
Licencia
mit
Descargas
10.8M
Propietario
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns