ansible_role_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_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
Специфические настройки внутри конфигурационного пула www.conf
PHP-FPM. Если вы хотите управлять дополнительными настройками, вы можете сделать это, заменив файл своим шаблоном или используя lineinfile
, как делает эта роль в tasks/configure-fpm.yml
.
Настройки php.ini
php_use_managed_ini: true
По умолчанию все дополнительные настройки ниже применяются через php.ini, включенный в эту роль. Вы можете самостоятельно управлять своим файлом php.ini (если вам нужна большая гибкость в его конфигурации), установив это значение в false
(в этом случае все нижеперечисленные переменные будут игнорироваться).
php_fpm_pool_user: "[apache|nginx|другое]" # по умолчанию зависит от ОС
php_fpm_pool_group: "[apache|nginx|другое]" # по умолчанию зависит от ОС
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, вам нужно убедиться, что APC установлен (он устанавливается по умолчанию, но, если вы настраиваете список php_packages
, вам нужно включить APC в этот список):
- На системах RHEL/CentOS: Убедитесь, что
php-pecl-apcu
включен в списокphp_packages
. - На системах Debian/Ubuntu: Убедитесь, что
php-apcu
включен в списокphp_packages
.
Установка из исходников
Если вам нужна конкретная версия PHP или вы хотите протестировать последнюю (например, master) версию 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. Убедитесь, что опция--enable-fpm
определена вphp_source_configure_command
. Также убедитесь, что в Apache установлена поддержка CGI и event (например, путем установкиapache2-mpm-event
иlibapache2-mod-fastcgi
) и что загружен модульmpm_event
. - Nginx: Если вы используете Nginx в качестве веб-сервера для PHP, вам нужно скомпилировать PHP с FPM. Убедитесь, что опция
--enable-fpm
определена вphp_source_configure_command
.
Зависимости
Нет.
Пример плейбука
- 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 entanet-devops/ansible-role-php