geerlingguy.php
Rol de Ansible: PHP
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 dephp_packages
. - En sistemas Debian/Ubuntu: Asegúrate de que
php-apcu
esté en la lista dephp_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 queapxs2
esté disponible en tu sistema (por ejemplo, instalandoapache2-prefork-dev
en Ubuntu), y necesitarás asegurarte de que la opción--with-apxs2
esté definida enphp_source_configure_command
. Finalmente, necesitarás asegurarte de que se cargue el módulompm_prefork
en lugar dempm_worker
ompm_event
, y probablemente agregar un archivo de configuraciónphpX.conf
(dondeX
es la versión principal de PHP) a la carpeta de configuración de módulos de Apache con contenidos comophp7.conf
. - Apache con
mpm_event
ompm_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 enphp_source_configure_command
. También necesitarás asegurarte de que la compatibilidad de Apache con CGI y event esté instalada (por ejemplo, instalandoapache2-mpm-event
ylibapache2-mod-fastcgi
) y se cargue el módulompm_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 enphp_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.
PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
ansible-galaxy install geerlingguy.php