net2grid.php
Rol de Ansible: PHP
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 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 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 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) en la carpeta de configuración del módulo de Apache con contenido comophp7.conf
. - Apache con
mpm_event
ompm_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 enphp_source_configure_command
. También deberás asegurarte de que el soporte de Apache para CGI y event esté instalado (por ejemplo, instalandoapache2-mpm-event
ylibapache2-mod-fastcgi
) y el módulompm_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 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 net2grid.php