php
Ansible Роль: PHP
Устанавливает PHP на серверах RedHat/CentOS и Debian/Ubuntu.
Требования
Если вы используете старую LTS версию Ubuntu или RHEL с устаревшей версией PHP, вам нужно использовать репозиторий или PPA с поддерживаемой версией PHP, так как эта роль работает только с версиями PHP, которые в настоящее время поддерживаются сообществом PHP.
Переменные роли
Доступные переменные перечислены ниже с значениями по умолчанию (см. defaults/main.yml
):
php_packages: []
Список пакетов PHP для установки (по умолчанию зависят от ОС). Обычно вам нужно установить такие пакеты, как php
, php-cli
, php-devel
и php-pdo
, а также добавить любые другие пакеты, которые вам нужны (например, php-gd
для работы с изображениями, или php-ldap
, если вам нужно подключение к LDAP-серверу для аутентификации).
Примечание: Если вы используете Debian/Ubuntu, вам также нужно установить libapache2-mod-fastcgi
(для cgi/PHP-FPM) или libapache2-mod-php7.0
(или аналогичный пакет в зависимости от версии PHP), если вы хотите использовать mod_php
с Apache.
php_packages_extra: []
Список дополнительных пакетов PHP для установки без переопределения основного списка.
php_enable_webserver: true
Если использование PHP связано с веб-сервером (например, Apache или Nginx), оставьте это значение по умолчанию. Если вы используете PHP на стороне сервера или для запуска небольшого приложения, установите это значение в false
, чтобы роль не пыталась взаимодействовать с веб-сервером.
php_webserver_daemon: "httpd"
Значения по умолчанию для HTTP серверного демона: httpd
(для Apache) для RedHat/CentOS или apache2
(также для Apache) для Debian/Ubuntu. Если вы используете другой веб-сервер (например, nginx
), измените это значение на имя демона, под управлением которого работает веб-сервер.
php_enablerepo: ""
(Только для RedHat/CentOS) Если вы активировали дополнительные репозитории (может быть, использовать geerlingguy.repo-epel или geerlingguy.repo-remi), вы можете перечислить эти репозитории в этой переменной (например, remi-php70,epel
). Это может быть полезным, например, если вы хотите установить последнюю версию PHP 7.0 из репозитория Remi.
php_default_version_debian: "7.0"
(Только для Debian/Ubuntu) Запланированная версия PHP в репозиториях данной версии ОС. По умолчанию это последняя LTS версия Ubuntu. Ubuntu 18.04 требует установки этого значения на "7.2"
, так как PHP 7.0 недоступен в стандартных пакетах bionic.
Если вы хотите иметь возможность легко переключаться между версиями PHP или использовать версию, которая недоступна в системных пакетах: Вы можете использовать роль geerlingguy.php-versions
для более удобного переключения между основными версиями PHP (например, 5.6, 7.1, 7.2).
php_packages_state: "present"
Если вы активировали дополнительные репозитории, такие как geerlingguy.repo-epel или geerlingguy.repo-remi, вам может понадобиться простой способ переключения версий PHP в реальном времени. По умолчанию установлено значение "present"
. Вы можете переопределить эту переменную на "latest"
, чтобы обновиться до последней доступной версии. В сочетании с php_enablerepo
пользователю больше не нужно вручную удалять существующие пакеты PHP, прежде чем устанавливать их из другого репозитория.
php_install_recommends: true
(Только для Debian/Ubuntu) Устанавливать ли рекомендуемые пакеты при установке php_packages
; вы можете явно установить это в no
, если устанавливаете PPA, который рекомендует определенные пакеты, которые вам не нужны (например, PPA Ondrej для php
установит php7.0-cli
, если вы установите php-pear
вместе с php5.6-cli
... что часто нежелательно!).
php_executable: "php"
Исполняемый файл, который запускается при вызове PHP из командной строки. Вы должны изменить это только в том случае, если запуск php
на вашем сервере не нацеливается на правильный исполняемый файл или если вы используете программные коллекции на RHEL/CentOS и нужно нацелиться на другую версию PHP.
PHP-FPM
PHP-FPM — это простой и надежный менеджер процессов FastCGI для PHP. Он значительно облегчает масштабирование PHP-приложений и обычно используется для запуска сайтов и приложений на основе PHP при работе с веб-серверами, такими как Nginx (хотя он также может использоваться и с другими веб-серверами).
При использовании этой роли с PHP, работающим как php-fpm
, а не как процесс внутри веб-сервера (например, mod_php
для Apache), необходимо установить следующее значение в true
:
php_enable_php_fpm: false
Если вы используете Apache, вы можете легко настроить его для работы с PHP-FPM, используя роль 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
Настройки php.ini
php_use_managed_ini: true
По умолчанию все дополнительные настройки ниже применяются через php.ini, включенный в эту роль. Вы можете управлять своим файлом php.ini самостоятельно (если вам нужна большая гибкость в его настройках), установив это значение в false
(в этом случае все переменные ниже будут проигнорированы).
php_fpm_pool_user: "[apache|nginx|other]" # значение по умолчанию зависит от ОС
php_fpm_pool_group: "[apache|nginx|other]" # значение по умолчанию зависит от ОС
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. Используются только если php_use_managed_ini
установлено на true
.
Переменные, связанные с OpCache
OpCache включен в PHP, начиная с версии 5.5, и следующие переменные будут иметь эффект только если установленная у вас версия PHP 5.5 или выше.
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"
Настройки ini для OpCache, которые часто настраиваются в системе. Убедитесь, что у вас достаточно памяти и слотов для файлов в OpCache (php_opcache_memory_consumption
, в МБ, и php_opcache_max_accelerated_files
), чтобы содержать весь PHP-код, который вы запускаете. Если нет, вы можете получить не оптимальную производительность!
Для собственного местоположения opcache.so предоставьте полный путь с php_opcache_zend_extension
.
php_opcache_conf_filename: [платформо-зависимый]
Имя файла конфигурации opcache для конкретной платформы. Обычно значение по умолчанию должно работать, но в некоторых случаях может потребоваться переопределить имя файла.
Переменные, связанные с APCu
php_enable_apc: true
Включать ли APCu. Другие переменные APCu будут неэффективны, если это значение установлено в false.
php_apc_shm_size: "96M"
php_apc_enable_cli: "0"
Настройки ini APCu, которые часто настраиваются в системе. Установите php_apc_shm_size
, чтобы он мог содержать все записи кэша в памяти с небольшими накладными расходами (фрагментация или нехватка памяти APC значительно замедлят выполнение PHP).
php_apc_conf_filename: [платформо-зависимый]
Имя файла конфигурации APC для конкретной платформы. Обычно значение по умолчанию должно работать, но в некоторых случаях может потребоваться переопределить имя файла.
Убедитесь, что APC установлен
Если вы используете APC, вам нужно убедиться, что он установлен (по умолчанию он установлен, но если вы настраиваете список php_packages
, вам нужно включить APC в этот список):
- На системах RHEL/CentOS: Убедитесь, что
php-pecl-apcu
есть в спискеphp_packages
. - На системах Debian/Ubuntu: Убедитесь, что
php-apcu
есть в спискеphp_packages
.
Установка из исходников
Если вам нужна конкретная версия PHP или вы хотите протестировать последнюю (например, мастер) версию PHP, то вполне возможно, что подходящего пакета уже нет в менеджере пакетов вашей платформы. В таких случаях вы можете установить PHP из исходников, компилируя его напрямую.
Обратите внимание, что компиляция из исходников занимает намного больше времени, чем установка из пакетов (PHP HEAD компилируется более 5 минут на современном компьютерном процессоре с четырьмя ядрами, если говорить о времени на компиляцию).
php_install_from_source: false
Установите значение true
, чтобы установить PHP из исходников вместо установки из пакетов.
php_source_version: "master"
Версия PHP для установки из исходников (ветка git, тег или хеш коммита).
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"
Местоположение, куда будут клонироваться источники и где они будут установлены, и расположение заголовочного файла GMP (который может быть платформо или дистрибутивно специфичным).
php_source_make_command: "make"
Установите команду make
на make --jobs=X
, где X
— это количество ядер на сервере, на котором компилируется PHP. Это значительно ускорит время компиляции на многоядерных системах.
php_source_configure_command: >
[...]
Команда ./configure
, которая создаст Makefile для компиляции PHP. Добавьте все необходимые параметры для вашей конкретной среды. Использование сложного скалярного значения (>
) позволяет определить переменную на нескольких строках, что очень удобно для удобочитаемости и контроля версий!
Несколько других замечаний/предостережений для специфических конфигураций:
- Apache с
mpm_prefork
: Если вы используете Apache с prefork в качестве веб-сервера для PHP, вы должны гарантировать, чтоapxs2
доступен на вашей системе (например, установивapache2-prefork-dev
в Ubuntu), и вам нужно убедиться, что вphp_source_configure_command
определено--with-apxs2
. Наконец, вы должны убедиться, что загружен модульmpm_prefork
, а неmpm_worker
илиmpm_event
, и, вероятно, добавить файл конфигурацииphpX.conf
(гдеX
— это основная версия PHP) в папку конфигурации модулей Apache с содержимым, подобнымphp7.conf
. - Apache с
mpm_event
илиmpm_worker
: Если вы используете Apache с event или worker в качестве веб-сервера для PHP, вам нужно скомпилировать PHP с FPM. Убедитесь, что вphp_source_configure_command
определен параметр--enable-fpm
. Вы также должны убедиться, что поддержка CGI и события Apache установлена (например, установивapache2-mpm-event
иlibapache2-mod-fastcgi
) и загружен модульmpm_event
. - Nginx: Если вы используете Nginx в качестве веб-сервера для PHP, вам нужно скомпилировать PHP с FPM. Убедитесь, что в
php_source_configure_command
определен параметр--enable-fpm
.
Зависимости
Нет.
Пример плейбука
- hosts: webservers
vars_files:
- vars/main.yml
roles:
- { role: geerlingguy.php }
Внутри 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
...
Лицензия
MIT / BSD
Информация об авторе
Эта роль была создана в 2014 году Джеффом Гирлингом, автором Ansible for DevOps.
PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
ansible-galaxy install apham0001/ansible-role-php