entanet_devops.ansible_role_php
Rol de Ansible: PHP
Instala PHP en servidores RedHat/CentOS y Debian/Ubuntu.
Requisitos
Si estás utilizando una versión LTS más antigua de Ubuntu o RHEL, con una versión de PHP desactualizada, necesitas usar un repositorio o PPA con una versión de PHP mantenida, ya que este rol solo funciona con versiones de PHP que son actualmente soportadas por la comunidad de PHP.
Variables de 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 PHP a instalar (específicos para el sistema operativo por defecto). Es probable que desees 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 estás utilizando PHP del lado del servidor o para ejecutar alguna 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
(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 demonio bajo el cual se ejecuta el servidor web.
php_enablerepo: ""
(Solo 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: "7.0"
(Solo Debian/Ubuntu) La versión predeterminada de PHP en los repositorios de la versión de OS dada. Por defecto, corresponde a 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 predeterminados biónicos.
Si deseas poder cambiar de 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, es posible que desees una forma fácil de cambiar de versiones de PHP sobre la marcha. Por defecto, esto se establece en "present"
. Puedes sobrescribir 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 de PHP existentes antes de instalarlos desde un repositorio diferente.
php_install_recommends: true
(Solo Debian/Ubuntu) Si se deben instalar paquetes recomendados al instalar php_packages
; es posible que desees establecer esto en no
explícitamente si estás instalando un PPA que recomienda ciertos paquetes que no deseas (por ejemplo, el PPA 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 que se 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 otra versión de PHP.
PHP-FPM
PHP-FPM es un administrador 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 basadas en PHP cuando se usa con un servidor web como Nginx (aunque también se puede usar con otros servidores web igualmente).
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 utilizando Apache, puedes configurarlo fácilmente para trabajar 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 predeterminado www.conf
de PHP-FPM. Si deseas administrar configuraciones adicionales, puedes hacerlo reemplazando el archivo con tu propia plantilla o utilizando lineinfile
como lo hace este rol dentro de tasks/configure-fpm.yml
.
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 gestionar tu propio 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|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 usan si php_use_managed_ini
está configurado como 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 slots 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, ¡podrías obtener un rendimiento menos que óptimo!
Para la ubicación de opcache.so personalizada 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 sobrescribir 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á establecido 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 pueda contener todas las entradas de caché en memoria con un poco de sobrecarga (la fragmentación o que APC se quede sin memoria disminuirá drásticamente el rendimiento de PHP).
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 sobrescribir el nombre del archivo.
Asegurándose de que APC esté instalado
Si utilizas APC, necesitarás asegurarte de que APC esté instalado (se instala por defecto, pero si personalizas la lista de php_packages
, necesitarás 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
.
Instalación desde código fuente
Si necesitas una versión específica de PHP, o deseas probar la última versión (por ejemplo, la versión principal) de PHP, es probable 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 instalar desde paquetes (PHP HEAD tarda más de 5 minutos en compilar 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"
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
para make --jobs=X
donde X
es el número de núcleos disponibles en el servidor donde se está compilando PHP. Acelera drásticamente los tiempos de compilación si tienes varios 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 (>
) te permite definir la variable en varias líneas, lo cual es extremadamente útil para la legibilidad y el control de versiones.
Algunas notas/caveats para configuraciones específicas:
- Apache con
mpm_prefork
: Si estás utilizando 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 deberás asegurarte de que la opción--with-apxs2
esté definida enphp_source_configure_command
. Finalmente, necesitarás asegurarte de que el módulompm_prefork
esté cargado 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 del módulo de Apache con contenidos comophp7.conf
. - Apache con
mpm_event
ompm_worker
: Si estás utilizando 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 el soporte de Apache para CGI y eventos esté instalado (por ejemplo, instalandoapache2-mpm-event
ylibapache2-mod-fastcgi
) y que el módulompm_event
esté cargado. - Nginx: Si estás utilizando 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 entanet_devops.ansible_role_php