PHP
Роль Ansible для PHP сайта
Эта роль Ansible установит заданную версию PHP на ваш сервер и настроит сайт в Nginx с поддержкой PHP. Роль использует Phpenv для управления различными версиями PHP. Она должна уметь устанавливать любую версию PHP от 5.2 до 7.2 (хотя, если вы собираетесь устанавливать PHP 5.2, возможно, вам стоит серьёзно задуматься о своих жизненных выборах ;-).
Требования
Phpenv требует, чтобы Git был установлен на вашем сервере, но в наши дни какой сервер не имеет Git?
Эта роль использует возможности ACL файловой системы Linux и группу "web-admin" для предоставления доступа к определенным директориям. Вы можете настроить эти шаги вручную или установить роль bbatsche.Base
.
Кроме того, установка этой роли на Ubuntu Xenial требует версии Ansible 2.2 или выше. Ansible 2.1 все еще поддерживается в Ubuntu Trusty.
Переменные роли
domain
— Домен сайта для созданияdynamic_php
— Должен ли Nginx переписывать все запросы на вашем сайте черезindex.php
. Это используется для большинства современных фреймворков. По умолчанию нетmax_upload_size
— Максимальный размер загружаемого файла в МБ. По умолчанию "10"php_max_file_uploads
— Максимальное количество файлов, которые можно загрузить одновременно. По умолчанию 20timezone
— Часовой пояс, который должен быть настроен в PHP. По умолчанию "Etc/UTC"mysql_socket
— Путь к стандартному сокету MySQL для подключения к localhost.install_mariadb
— Установить клиентские библиотеки MariaDB вместо стандартных библиотек MySQL. По умолчанию нетphp_session_save_handler
— Обработчик для сохранения сессий. Может использоваться для сохранения данных сессии в Redis, например. По умолчанию "files"php_session_path
— Путь для сохранения данных сессии. По умолчанию "{{ phpenv_root }}/versions/{{ php_version }}/var/run/session
"php_realpath_cache_size
— Размер кеша, используемого для поиска реальных путей файлов и директорий. По умолчанию "256k"php_realpath_cache_ttl
— Время хранения записей в кеше реальных путей. По умолчанию 600php_max_execution_time
— Максимальное время, за которое PHP может работать (исключая обращения к внешним ресурсам, таким как файловая система). По умолчанию 30.php_default_socket_timeout
— Время ожидания данных от сокета. По умолчанию 60php_memory_limit
— Максимальное количество памяти, которое PHP может выделить для одного процесса. По умолчанию "128M"php_version
— Версия PHP, устанавливаемая с Phpenv.phpenv_config_options
— Список флагов, передаваемых команде конфигурации PHP (в дополнение к уже включенным по умолчанию с Phpenv). По умолчанию: см. defaults/main.ymlphpenv_config_options_removed
— Список флагов, которые нужно удалить из стандартного списка Phpenv. По умолчанию только--with-tidy
pecl_extensions
— Список дополнительных расширений для установки из PECL. Каждое значение должно иметь свойствоname
иversion
composer_packages
— Список пакетов composer для глобальной установки. Каждое значение должно иметь свойстваname
иversion
.phpenv_version
— Версия Phpenv для установки. По умолчанию это Git SHA: "0852611"phpenv_composer_version
— Версия Phpenv Composer Plugin для установки. По умолчанию это Git SHA: "1a6611d"php_build_version
— Версия PHP Build для установки. По умолчанию это Git SHA: "5d166fe"xdebug_version
— Версия Xdebug для установки. По умолчанию "2.5.5"copy_phpinfo
— Нужно ли копировать страницуphpinfo()
на новый сайт. По умолчанию нетcopy_index_php
— Нужно ли копировать файлindex.php
на новый сайт. По умолчанию нетdisabled_function
— Список функций, которые нужно отключить при работе PHP в вебе.open_basedir
— Список дополнительных путей, с которых этот домен должен иметь возможность читать и записывать. Этот список всегда будет содержать корень домена, директорию "var" текущей версии PHP (для хранения сессий) и временную директорию домена.http_root
— Директория, в которой будут создаваться все сайты. По умолчанию "/srv/http"phpenv_root
— Место установки Phpenv и его вспомогательных файлов. По умолчанию "/usr/local/phpenv"
Настройка FPM
PHP FPM настраивается для работы в одном из двух режимов в зависимости от env_name
. В средах разработки PHP FPM будет работать в режиме "ondemand", чтобы минимизировать количество создаваемых и не активных процессов в среде с низкими ресурсами. В других средах FPM будет работать в "dynamic" режиме, так что дочерние процессы уже будут готовы обрабатывать запросы и не нужно будет их создавать заново. При работе в динамическом режиме есть несколько способов настроить использование ресурсов FPM:
fpm_mb_per_child
— Среднее количество памяти, которое использует дочерний процесс для этого домена. По умолчанию "30"fpm_mem_percent
— Максимальное количество общей памяти, которую FPM может использовать. По умолчанию "80"fpm_max_children
— Максимальное количество дочерних процессов, разрешенное для этого домена. По умолчанию рассчитывается на основеfpm_mem_percent
иfpm_mb_per_child
fpm_start_percent
— Какой процент от максимального количества детей FPM должен быть запущен при первоначальном создании домена. По умолчанию "20" с минимумом в 2 сервера.fpm_start_servers
— Количество серверов, которые нужно запустить при создании домена. По умолчанию рассчитывается на основеfpm_start_percent
fpm_max_spare_percent
— Процент от максимального количества детей FPM, который будет поддерживаться в активном состоянии в качестве резервных серверов, когда нагрузка начинает снижаться. По умолчанию "80"fpm_max_spare_servers
— Количество резервных серверов, которые нужно поддерживать активными после всплеска нагрузки и когда нагрузка начинает падать. По умолчанию рассчитывается на основеfpm_max_spare_percent
.
Это позволит вам настраивать использование ресурсов, основываясь либо на проценте от общей памяти или на статических значениях, в зависимости от вашего сценария использования.
Настройка Opcache
Следующие переменные можно использовать для настройки Opcache и, возможно, улучшения производительности приложения.
opcache_enable_cli
— По умолчанию 0opcache_memory_consumption
— По умолчанию 128opcache_internal_strings_buffer
— По умолчанию 16opcache_max_accelerated_files
— По умолчанию 6000opcache_max_wasted_percentage
— По умолчанию 5opcache_validate_timestamps
— По умолчанию 1opcache_revalidate_freq
— Установите в 0, если среда является разработкой. В противном случае, по умолчанию 300opcache_fast_shutdown
— По умолчанию 0. Может быть рискованно, если включить
Зависимости
Эта роль зависит от bbatsche.Nginx. Вы должны сначала установить эту роль, выполнив команду:
ansible-galaxy install bbatsche.Nginx
Пример Playbook
- hosts: servers
roles:
- role: bbatsche.Phpenv
domain: my-php-site.test
php_version: 7.1.12
composer_packages:
- name: phpunit/phpunit
version: ^6.4
pecl_extensions:
- name: yaml
version: 2.0.2
- name: imagick
version: 3.4.3
Лицензия
MIT
Тестирование
Включена совокупность спецификаций для тестирования каждой задачи отдельно или в целом. Чтобы запустить эти тесты, вам сначала нужно установить Vagrant и VirtualBox. Файлы спецификаций написаны с использованием Serverspec, поэтому вам понадобится Ruby и Bundler.
Чтобы запустить полный набор спецификаций:
$ gem install bundler
$ bundle install
$ rake
Набор спецификаций будет направлен на Ubuntu Trusty Tahr (14.04), Xenial Xerus (16.04) и Bionic Beaver (18.04).
Чтобы увидеть доступные задачи rake (и спецификации):
$ rake -T
Эти спецификации не предназначены для проверки идемпотентности. Они предназначены для проверки того, что указанные задачи выполняют свои ожидаемые действия. Проверка идемпотентности тестируется независимо через интеграционное тестирование.
Install Phpenv, PHP, and set up a site in Nginx running it with PHP-FPM
ansible-galaxy install bbatsche/Ansible-PHP-Site-Role