apham0001.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 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 dephp_packages
. - En sistemas Debian/Ubuntu: Asegúrate de que
php-apcu
esté en la lista dephp_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 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 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 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 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 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 apham0001.php