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_packages_state: "present"
Если вы включили какие-либо дополнительные репозитории, такие как geerlingguy.repo-epel или geerlingguy.repo-remi, вам может понадобиться простой способ смены версий PHP на лету. По умолчанию это значение установлено на "present"
. Вы можете переопределить эту переменную на "latest"
, чтобы обновить до последней доступной версии. В сочетании с php_enablerepo
пользователю больше не нужно вручную удалять существующие пакеты PHP перед установкой их из другого репозитория.
Также вы можете использовать роль geerlingguy.php-versions
для более легкой смены основных версий PHP (например, 5.6, 7.0, 7.1, 7.2).
php_install_recommends: true
(Только для Debian/Ubuntu) Устанавливать ли рекомендуемые пакеты при установке php_packages
; вам может понадобиться установить это значение в no
, если вы устанавливаете PPA, который рекомендует определенные пакеты, которые вам не нужны (например, PPA Ondrej будет устанавливать 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|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"
Директивы конфигурации 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"
Директивы конфигурации 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, тег или hash коммита).
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), и необходимо убедиться, что параметр--with-apxs2
определен вphp_source_configure_command
. В конце концов, вам нужно убедиться, что модуль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
. Вам также нужно убедиться, что поддержка CGI и event для Apache установлена (например, установивapache2-mpm-event
иlibapache2-mod-fastcgi
), и модульmpm_event
загружен. - Nginx: Если вы используете Nginx как веб-сервер для PHP, вам нужно будет скомпилировать PHP с FPM. Убедитесь, что параметр
--enable-fpm
определен вphp_source_configure_command
.
Зависимости
Нет.
Пример playbook'а
- 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 net2grid/ansible-role-php