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: ""
(Только для Debian/Ubuntu) Версия PHP по умолчанию в указанных репозиториях ОС. Конкретная версия устанавливается для каждой дистрибуции и версии, но вы можете переопределить её, указав значение здесь, например, "7.4"
.
Если вы хотите легко переключаться между версиями 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_state: started
php_fpm_enabled_on_boot: true
Контроль состояния демона FPM; установите эти значения на stopped
и false
, если вы хотите, чтобы FPM был установлен и настроен, но не работал (например, при установке в контейнере).
php_fpm_handler_state: restarted
Обработчик перезапускает PHP-FPM по умолчанию. Установка значения на reloaded
перезагрузит сервис вместо его перезапуска.
php_fpm_pools:
- pool_name: www
pool_template: www.conf.j2
pool_listen: "127.0.0.1:9000"
pool_listen_allowed_clients: "127.0.0.1"
pool_pm: dynamic
pool_pm_max_children: 5
pool_pm_start_servers: 2
pool_pm_min_spare_servers: 1
pool_pm_max_spare_servers: 3
pool_pm_max_requests: 500
pool_pm_status_path: /status
Список пулов PHP-FPM для создания. По умолчанию создается пул www. Чтобы настроить новый пул, добавьте элемент в список php_fpm_pools
.
Специфические настройки в пределах дефолтного пула www.conf.j2
PHP-FPM. Если вы хотите управлять дополнительными настройками, вы можете сделать это, заменив файл на свой собственный шаблон с использованием pool_template
.
Настройки 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_precision: 14
php_serialize_precision: "-1"
Различные настройки по умолчанию для 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: [platform-specific]
Файл конфигурации 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: [platform-specific]
Файл конфигурации APC, специфичный для платформы. Обычно значение по умолчанию должно работать, но в некоторых случаях вам может потребоваться переопределить имя файла.
Убедитесь, что 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"
php_source_mysql_config: "/usr/bin/mysql_config"
Местоположение, куда будут склонированы и установлены исходники, а также местоположение заголовочного файла GMP (который может быть специфичен для платформы/дистрибуции) и двоичного файла mysql_config
(это может быть mariadb_config
в новых версиях операционных систем).
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
.
Зависимости
Отсутствуют.
Пример плейбука
- 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 geerlingguy/ansible-role-php