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.

Установить
ansible-galaxy install net2grid/ansible-role-php
Лицензия
mit
Загрузки
261
Владелец
We empower energy retailers to help consumers become energy efficient by unlocking value from Smart Meter data