apham0001.php
Ansible角色:PHP
在RedHat/CentOS和Debian/Ubuntu服务器上安装PHP。
需求
如果您使用的是较旧的Ubuntu或RHEL的长期支持版本,并且版本较旧的PHP,您需要使用一个维护的PHP版本的仓库或PPA,因为此角色仅适用于PHP社区当前支持的PHP版本。
角色变量
可用变量如下所列,并附有默认值(见defaults/main.yml
):
php_packages: []
要安装的PHP软件包列表(默认按操作系统具体化)。您可能希望安装常用包,如php
、php-cli
、php-devel
和php-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服务器守护进程的默认值在RedHat/CentOS中为httpd
(用于Apache),在Debian/Ubuntu中为apache2
(同样用于Apache)。如果您正在运行其他Web服务器(例如nginx
),请将此值更改为Web服务器运行的守护进程名称。
php_enablerepo: ""
(仅适用于RedHat/CentOS)如果您启用了任何额外的仓库(我建议使用geerlingguy.repo-epel或geerlingguy.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-epel或geerlingguy.repo-remi,您可能希望有一种简单的方式来即时切换PHP版本。默认情况下,此值设置为"present"
。您可以将此变量覆盖为"latest"
,以升级到最新可用版本。结合php_enablerepo
,用户在安装来自不同仓库的PHP软件包之前,无需手动卸载现有的PHP软件包。
php_install_recommends: true
(仅适用于Debian/Ubuntu)在安装php_packages
时是否安装推荐软件包;如果您安装的PPA推荐某些您不想要的软件包,您可能希望明确将其设置为no
(例如,Ondrej的php
PPA将安装php7.0-cli
,如果您同时安装php-pear
和php5.6-cli
,这通常是不想要的!)。
php_executable: "php"
从命令行调用PHP时要运行的可执行文件。只有在您的服务器上运行php
没有指向正确的可执行文件,或者您在RHEL/CentOS上使用软件集合并需要针对不同版本的PHP时才应更改此设置。
PHP-FPM
PHP-FPM是一个简单而强大的PHP FastCGI进程管理器。它可以显著简化PHP应用程序的扩展,是使用Nginx等Web服务器运行基于PHP的网站和应用程序的正常方法(尽管它也可以非常容易地与其他Web服务器一起使用)。
当使用此角色时,如果PHP作为php-fpm
运行,而不是作为Web服务器内部的进程(例如,Apache的mod_php
),您需要将以下变量设置为true
:
php_enable_php_fpm: false
如果您使用Apache,可以使用geerlingguy.apache-php-fpm角色轻松配置它与PHP-FPM配合使用。
php_fpm_pools:
- php_fpm_pool: www
php_fpm_user: www
php_fpm_group: www
php_fpm_listen: /run/php/php7.3-fpm.sock
php_fpm_pm_max_children: 5
php_fpm_pm_start_servers: 2
php_fpm_pm_min_spare_servers: 1
php_fpm_pm_max_spare_servers: 3
php_fpm_pm_process_idle_timeout: 10s
php_fpm_pm_max_requests: 0
php_fpm_request_slowlog_timeout: 0
php_fpm_request_terminate_timeout: 0
php_fpm_rlimits_files: 1024
php_fpm_admin_value_sendmail_path: [email protected]
extra_parameters: |
php_admin_value[memory_limit] = 128M
php.ini 设置
php_use_managed_ini: true
默认情况下,所有额外的默认值通过此角色包含的php.ini应用。您可以通过将其设置为false
来自行管理您的php.ini文件(如果您需要更灵活的配置),在这种情况下,所有下面的变量将被忽略。
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: "开"
php_upload_max_filesize: "64M"
php_max_file_uploads: "20"
php_post_max_size: "32M"
php_date_timezone: "America/Chicago"
php_allow_url_fopen: "开"
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: "关"
php_display_startup_errors: "开"
php_expose_php: "开"
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 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-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分支、标签或提交哈希)。
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_source_configure_command: >
[...]
将用于构建PHP编译的Makefile的./configure
命令。为您的特定环境添加所需的所有选项。使用折叠标量(>
)允许您在多行中定义变量,这对于可读性和源代码控制非常有帮助!
一些其他注意事项/使用特定配置时的警告:
- 使用
mpm_prefork
的Apache:如果您使用Apache与prefork作为PHP的Web服务器,您需要确保apxs2
在您的系统上可用(例如,在Ubuntu中通过安装apache2-prefork-dev
),并且您需要在php_source_configure_command
中定义必选选项--with-apxs2
。最后,确保加载的是mpm_prefork
模块,而不是mpm_worker
或mpm_event
,并且可能需要将名为phpX.conf
(其中X
是PHP的主要版本)配置文件添加到Apache模块配置文件夹,内容类似于php7.conf
。 - 使用
mpm_event
或mpm_worker
的Apache:如果您使用Apache与事件或工作线程作为PHP的Web服务器,您需要用FPM编译PHP。确保在php_source_configure_command
中定义选项--enable-fpm
。您还需要确保安装了Apache对CGI和事件的支持(例如,通过安装apache2-mpm-event
和libapache2-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年创建,他是Ansible for DevOps的作者。