net2grid.php

Rol de Ansible: PHP

Estado de Construcción

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

Requisitos

Si estás usando una versión LTS más antigua de Ubuntu o RHEL, con una versión de PHP obsoleta, debes usar un repositorio o PPA que tenga una versión de PHP mantenida, ya que este rol solo funciona con versiones de PHP actualmente soportadas por la comunidad 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 que se deben instalar (específicos para el sistema operativo por defecto). Probablemente querrás instalar paquetes comunes como php, php-cli, php-devel y php-pdo, y puedes agregar más paquetes que desees (por ejemplo, php-gd para manipulación de imágenes, o php-ldap si necesitas conectar 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 estás usando PHP del lado del servidor o para ejecutar una pequeña aplicación, establece este valor en 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 (utilizado por Apache) para RedHat/CentOS, o apache2 (también utilizado por Apache) para Debian/Ubuntu. Si estás usando otro servidor web (por ejemplo, nginx), cambia este valor al nombre del demonio bajo el cual se ejecuta el servidor web.

php_enablerepo: ""

(Solo RedHat/CentOS) Si has habilitado repositorios adicionales (podría sugerir geerlingguy.repo-epel o geerlingguy.repo-remi), esos repositorios pueden listarse 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_packages_state: "present"

Si has habilitado repositorios adicionales como geerlingguy.repo-epel o geerlingguy.repo-remi, podrías querer una manera fácil de cambiar las versiones de PHP sobre la marcha. Por defecto, esto está establecido en "present". Puedes sobrescribir esta variable a "latest" para actualizar a la última versión disponible. Junto con php_enablerepo, un usuario ahora no necesita desinstalar manualmente los paquetes de PHP existentes antes de instalarlos desde un repositorio diferente.

También puedes usar el rol geerlingguy.php-versions para cambiar más fácilmente entre versiones principales de PHP (por ejemplo, 5.6, 7.0, 7.1, 7.2).

php_install_recommends: true

(Solo Debian/Ubuntu) Si deseas instalar paquetes recomendados al instalar php_packages; podrías querer establecer esto en no si instalas 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 al llamar 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 utilizando colecciones de software en RHEL/CentOS y necesitas apuntar a una versión diferente de PHP.

PHP-FPM

PHP-FPM es un manejador de procesos FastCGI simple y robusto para PHP. Puede facilitar enormemente la escalabilidad de las 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 puede usarse con otros servidores web con la misma facilidad).

Al usar 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), debes establecer la siguiente variable en true:

php_enable_php_fpm: false

Si estás usando Apache, puedes configurarlo fácilmente para que funcione con PHP-FPM utilizando el rol 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

Configuraciones específicas dentro del grupo de PHP-FPM predeterminado www.conf. Si deseas administrar configuraciones adicionales, puedes hacerlo reemplazando el archivo por tu propia plantilla o utilizando lineinfile, como hace este rol dentro de tasks/configure-fpm.yml.

Configuraciones de php.ini

php_use_managed_ini: true

Por defecto, todas las configuraciones adicionales a continuación se aplican a través del php.ini incluido con este rol. Puedes gestionar tu archivo php.ini de forma independiente (si necesitas más flexibilidad en su configuración) estableciendo esto en false (en cuyo caso todas las variables a continuación serán ignoradas).

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

Varios valores predeterminados para PHP. Solo se utilizan si php_use_managed_ini está establecido en true.

Variables relacionadas con OpCache

El OpCache se incluye 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 has instalado es 5.5 o superior.

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 de ini de OpCache que a menudo se personalizan en un sistema. Asegúrate de tener suficiente memoria y ranuras de archivos asignadas 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, podrías obtener un rendimiento subóptimo.

Para la 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 del 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 del archivo.

Variables relacionadas con APCu

php_enable_apc: true

Si habilitar APCu. Otras variables de APCu serán ineficaces si esto está establecido en false.

php_apc_shm_size: "96M"
php_apc_enable_cli: "0"

Directivas de 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 overhead (la fragmentación o el agotamiento de memoria de APC ralentizarán PHP dramáticamente).

php_apc_conf_filename: [específico de la plataforma]

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

Asegurándose de que APC esté instalado

Si usas APC, necesitarás asegurarte de que 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 principal) de PHP, hay una buena posibilidad de que no haya un paquete adecuado 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 lleva mucho más tiempo que instalar desde paquetes (el 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 que instalar desde el código fuente (una rama de git, etiqueta o hash de compromiso).

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"

Ubicación donde se clonará e instalará el código fuente, y la ubicación del archivo de encabezado GMP (que puede ser específico de la plataforma/distribución).

php_source_make_command: "make"

Establece el comando make en make --jobs=X donde X es el número de núcleos presentes en el servidor donde se está compilando PHP. Esto acelerará notablemente el tiempo de compilación si tienes múltiples núcleos.

php_source_configure_command: >
  [...]

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

Algunas otras notas/advertencias para configuraciones específicas:

  • Apache con mpm_prefork: Si utilizas 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 deberás asegurarte de que la opción --with-apxs2 esté definida en php_source_configure_command. Finalmente, necesitarás asegurarte de que el módulo mpm_prefork esté cargado 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) en la carpeta de configuración del módulo de Apache con contenido como php7.conf.
  • Apache con mpm_event o mpm_worker: Si utilizas Apache con event o worker como servidor web para PHP, deberás compilar PHP con FPM. Asegúrate de que la opción --enable-fpm esté definida en php_source_configure_command. También deberás asegurarte de que el soporte de Apache para CGI y event esté instalado (por ejemplo, instalando apache2-mpm-event y libapache2-mod-fastcgi) y el módulo mpm_event esté cargado.
  • Nginx: Si utilizas 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 net2grid.php
Licencia
mit
Descargas
274
Propietario
We empower energy retailers to help consumers become energy efficient by unlocking value from Smart Meter data