apham0001.php

Rol de Ansible: PHP

Estado del Build

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 desactualizada, necesitas usar un repositorio o PPA que tenga una versión de PHP mantenida, ya que este rol solo funciona con versiones de PHP que son actualmente compatibles por la comunidad de PHP.

Variables del Rol

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

php_packages: []

Una lista de los paquetes PHP a instalar (específicos del OS por defecto). Es probable que desees instalar paquetes comunes como php, php-cli, php-devel y php-pdo, y puedes agregar otros paquetes que necesites (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 a instalar sin anular la lista predeterminada.

php_enable_webserver: true

Si tu uso de PHP está ligado a un servidor web (por ejemplo, Apache o Nginx), deja este valor por defecto. Si estás usando PHP del lado del servidor o para ejecutar alguna aplicación pequeña, 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 daemon del servidor HTTP son httpd (usado por Apache) para RedHat/CentOS, o apache2 (también usado por Apache) para Debian/Ubuntu. Si estás ejecutando otro servidor web (por ejemplo, nginx), cambia este valor al nombre del daemon 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 ser listados bajo esta variable (por ejemplo, remi-php70,epel). Esto puede ser útil, por ejemplo, si deseas instalar la última versión de PHP 7.0, que está en el repositorio Remi.

php_default_version_debian: "7.0"

(Solo Debian/Ubuntu) La versión predeterminada de PHP en los repositorios de la versión del sistema operativo dada. Por defecto, se establece en la última versión LTS de Ubuntu. Ubuntu 18.04 necesita que esto se establezca en "7.2" ya que PHP 7.0 no está disponible en los paquetes biónicos predeterminados.

Si deseas poder cambiar entre versiones 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 las 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 manera fácil de cambiar las versiones de PHP al instante. Por defecto, esto se establece en "present". Puedes anular esta variable a "latest" para actualizar a la última versión disponible. Combinado con php_enablerepo, un usuario ahora no necesita desinstalar manualmente los paquetes PHP existentes antes de instalar desde otro repositorio.

php_install_recommends: true

(Solo Debian/Ubuntu) Si se deben instalar paquetes recomendados al instalar php_packages; podrías querer 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 usar al llamar a PHP desde la línea de comandos. Solo deberías cambiar esto si al 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 drásticamente la escalabilidad de aplicaciones PHP y es la forma habitual de ejecutar sitios y aplicaciones basadas en PHP cuando se usa un servidor web como Nginx (aunque puede usarse con otros servidores web con igual 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, mod_php de Apache), necesitas 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 usando el rol geerlingguy.apache-php-fpm.

php_fpm_pools:
  - php_fpm_pool: www
    php_fpm_user: www
    php_fpm_group: www
    php_fpm_listen: /run/php/php7.3-fpm.sock
    php_fpm_pm_max_children: 5
    php_fpm_pm_start_servers: 2
    php_fpm_pm_min_spare_servers: 1
    php_fpm_pm_max_spare_servers: 3
    php_fpm_pm_process_idle_timeout: 10s
    php_fpm_pm_max_requests: 0
    php_fpm_request_slowlog_timeout: 0
    php_fpm_request_terminate_timeout: 0
    php_fpm_rlimits_files: 1024
    php_fpm_admin_value_sendmail_path: [email protected]
    extra_parameters: |
      php_admin_value[memory_limit] = 128M

Configuraciones de php.ini

php_use_managed_ini: true

Por defecto, todos los valores predeterminados adicionales a continuación se aplican a través del php.ini incluido con este rol. Puedes administrar tu propio archivo php.ini (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 predeterminado varía según el SO
php_fpm_pool_group: "[apache|nginx|otro]" # el 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á configurado en true.

Variables relacionadas con OpCache

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 tienes instalada 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 ini de OpCache que a menudo se personalizan en un sistema. Asegúrate de tener suficiente memoria y espacios de archivo 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 tener un rendimiento menos que ó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 predeterminado debería funcionar, pero en algunos casos, puede que necesites anular el nombre del archivo.

Variables relacionadas con APCu

php_enable_apc: true

Si habilitar APCu. Otras variables de APCu no tendrán efecto si esto está configurado 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 el php_apc_shm_size para que contenga todas las entradas de caché en memoria con un poco de sobrecarga (la fragmentación o APC quedándose sin memoria ralentizará PHP dramáticamente).

php_apc_conf_filename: [específico de la plataforma]

El nombre de archivo de configuración de APC específico de la plataforma. Generalmente, el predeterminado debería funcionar, pero en algunos casos, puede que necesites anular el nombre del 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 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.

Instalación desde el Código Fuente

Si necesitas una versión específica de PHP, o deseas probar la última versión (por ejemplo, master) de PHP, hay una buena posibilidad de que no haya un paquete adecuado disponible en el gestor de paquetes de tu plataforma. En esos casos, puedes elegir 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 instalar desde paquetes (PHP HEAD tarda más de 5 minutos en compilar en una computadora moderna de cuatro núcleos, solo como punto de 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 confirmación).

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 compila PHP. Esto acelerará enormemente los tiempos de compilación si tienes múltiples núcleos.

php_source_configure_command: >
  [...]

El comando ./configure que construirá 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 (>) permite definir la variable en múltiples líneas, lo cual es extremadamente útil para la legibilidad y el control de versiones.

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 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) a la carpeta de configuración del módulo 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 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 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 apham0001.php
Licencia
mit
Descargas
288
Propietario