entanet_devops.ansible_role_php

Ansible角色:PHP

构建状态

在RedHat/CentOS和Debian/Ubuntu服务器上安装PHP。

要求

如果您使用的是较旧的Ubuntu或RHEL LTS版本,并且PHP版本过时,您需要使用维护过的PHP版本的库或PPA,因为此角色只与当前受PHP社区支持的版本一起使用。

角色变量

可用的变量列表如下,包括默认值(请参见 defaults/main.yml):

php_packages: []

要安装的PHP包列表(默认按操作系统特定)。您可能希望安装 phpphp-cliphp-develphp-pdo等常见包,还可以添加其他您想要的包(例如,如果需要进行图像处理,可以添加php-gd,或者如果需要连接到LDAP服务器进行身份验证,则添加php-ldap)。

注意:如果您使用Debian/Ubuntu,您还需要安装 libapache2-mod-fastcgi(用于cgi/PHP-FPM)或 libapache2-mod-php7.0(或类似包,具体根据PHP版本而定),如果您想在Apache上使用mod_php

php_packages_extra: []

添加额外的PHP包列表,不会覆盖默认列表。

php_enable_webserver: true

如果您使用PHP与Web服务器(如Apache或Nginx)一起使用,请保持这个默认值。如果您在服务器端使用PHP或者运行一些小型应用程序,请将此值设置为 false,以避免此角色尝试与Web服务器交互。

php_webserver_daemon: "httpd"

HTTP服务器守护进程的默认值为 httpd(用于Apache,适用于RedHat/CentOS)或 apache2(也用于Apache,适用于Debian/Ubuntu)。如果您运行了其他Web服务器(例如,nginx),请将此值更改为Web服务器运行的守护进程的名称。

php_enablerepo: ""

(仅限RedHat/CentOS)如果您启用了任何额外的库(例如,我建议使用geerlingguy.repo-epelgeerlingguy.repo-remi),可以在此变量下列出这些库(例如 remi-php70,epel)。如果您想安装最新的PHP 7.0版本,这非常方便,因为它在Remi库中。

php_default_version_debian: "7.0"

(仅限Debian/Ubuntu)给定操作系统版本库中PHP的默认版本。默认为最新的Ubuntu LTS版本。Ubuntu 18.04需要设置为 "7.2",因为默认的bionic包中不提供PHP 7.0。

如果您希望更轻松地切换PHP版本,或使用系统包不可用的版本:您可以使用geerlingguy.php-versions角色来更轻松地在主要PHP版本(例如5.6,7.1,7.2)之间切换。

php_packages_state: "present"

如果您启用了任何额外的库,例如geerlingguy.repo-epelgeerlingguy.repo-remi,您可能希望有一种简单的方法来动态切换PHP版本。默认情况下,这设置为 "present"。您可以将此变量覆盖为 "latest",以升级到最新可用版本。结合 php_enablerepo,用户在安装不同库中的PHP包之前不需要手动卸载现有的PHP包。

php_install_recommends: true

(仅限Debian/Ubuntu)在安装 php_packages 时是否安装推荐包;如果您正在安装一个推荐某些您不需要的包的PPA(例如,Ondrej的php PPA会在您安装 php-pear同时安装 php7.0-cli...这往往是不需要的!),您可能需要明确将其设置为 no

php_executable: "php"

从命令行调用PHP时要运行的可执行文件。如果在您的服务器上运行 php 时没有指向正确的可执行文件,或者如果您在RHEL/CentOS上使用软件集合并需要指向不同版本的PHP,您可以更改此值。

PHP-FPM

PHP-FPM是一个简单而强大的PHP FastCGI进程管理器。它可以大大简化PHP应用程序的扩展,并且是在使用像Nginx这样的Web服务器时运行基于PHP的网站和应用程序的标准方式(尽管它也可以轻松与其他Web服务器一起使用)。

当使用此角色以php-fpm的方式运行PHP,而不是作为Web服务器内的进程(例如Apache的mod_php)时,您需要将以下变量设置为 true

php_enable_php_fpm: false

如果您使用Apache,可以通过使用geerlingguy.apache-php-fpm角色轻松配置与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池中的特定设置。如果您想管理其他设置,可以通过用自己的模板替换文件或像此角色在 tasks/configure-fpm.yml中那样使用 lineinfile来完成。

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相关变量

从PHP 5.5开始包含OpCache,以下变量仅在您安装的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 ini指令,通常在系统中被自定义。确保您在OpCache中分配足够的内存和文件槽(php_opcache_memory_consumption,以MB为单位,以及php_opcache_max_accelerated_files)以容纳您正在运行的所有PHP代码。如果没有,您可能会遇到低于最佳性能的情况!

对于自定义的opcache.so位置,请提供完整路径,使用 php_opcache_zend_extension

php_opcache_conf_filename: [平台特定]

特定平台的opcache配置文件名。通常默认值应该有效,但在某些情况下,您可能需要覆盖文件名。

APCu相关变量

php_enable_apc: true

是否启用APCu。如果设置为false,则其他APCu变量将无效。

php_apc_shm_size: "96M"
php_apc_enable_cli: "0"

APCu ini指令,通常在系统中被自定义。设置 php_apc_shm_size 以使其在内存中保存所有缓存条目,且有一点开销(碎片或APC内存不足会大大减慢PHP速度)。

php_apc_conf_filename: [平台特定]

特定平台的APC配置文件名。通常默认值应该有效,但在某些情况下,您可能需要覆盖文件名。

确保APC已安装

如果您使用APC,您需要确保APC已安装(默认情况下已安装,但如果您自定义了php_packages列表,则需要在列表中包含APC):

  • 在RHEL/CentOS系统上:确保 php-pecl-apcuphp_packages 列表中。
  • 在Debian/Ubuntu系统上:确保 php-apcuphp_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"

源代码将被克隆并安装的位置,以及GMP头文件的位置(可根据平台/分发情况而定)。

php_source_make_command: "make"

make命令设置为 make --jobs=X,其中 X 是PHP编译所在服务器上的内核数量。如果您有多个核心,这将显著加快编译时间。

php_source_configure_command: >
  [...]

将构建用于PHP编译的Makefile的./configure命令。将您所需的所有选项添加到特定环境中。使用折叠标量(>)允许您在多行上定义变量,这对可读性和版本控制极为有利!

一些其他特定配置的注意事项:

  • **Apache与mpm_prefork**:如果您使用Apache和prefork作为PHP的Web服务器,您需要确保apxs2在您的系统上可用(例如,通过在Ubuntu中安装apache2-prefork-dev),并在 php_source_configure_command中确保定义了选项--with-apxs2。最后,您需要确保加载mpm_prefork模块,而不是mpm_workermpm_event,并且可能需要在Apache模块配置文件夹中添加一个 phpX.confX是PHP的主要版本)配置文件,其内容类似于php7.conf
  • **Apache与mpm_eventmpm_worker**:如果您使用Apache和事件或工作作为PHP的Web服务器,则需要使用FPM编译PHP。确保在 php_source_configure_command中定义了选项--enable-fpm。您还需要确保安装了Apache对CGI和事件的支持(例如,通过安装apache2-mpm-eventlibapache2-mod-fastcgi)且加载了mpm_event模块。
  • Nginx:如果您使用Nginx作为PHP的Web服务器,则需要使用FPM编译PHP。确保在 php_source_configure_command中定义了选项--enable-fpm

依赖

无。

示例剧本

- 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

作者信息

此角色由Jeff Geerling于2014年创建,他是《DevOps的Ansible》的作者。

安装
ansible-galaxy install entanet_devops.ansible_role_php
许可证
mit
下载
10k
拥有者