net2grid.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 用于图像处理,或者 php-ldap 如果需要连接 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)。如果您想安装 Remi 存储库中的 PHP 7.0 最新版本,这很方便。

php_packages_state: "present"

如果您启用了任何额外的存储库,如 geerlingguy.repo-epelgeerlingguy.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 时是否安装推荐的软件包;如果您正在安装推荐了您不需要的软件包的 PPA,您可能希望显式将其设置为 no(例如,Ondrej 的 php PPA 在您同时安装 php-pearphp5.6-cli 时将安装 php7.0-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_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 会应用所有额外的默认值。通过将其设置为 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: "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,您需要确保已经安装了它(默认情况下已安装,但如果您自定义了 php_packages 列表,则需要在列表中包括 APC):

  • 在 RHEL/CentOS 系统上:确保 php-pecl-apcuphp_packages 列表中。
  • 在 Debian/Ubuntu 系统上:确保 php-apcuphp_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_workermpm_event,并可能需要向 Apache 模块配置文件夹添加一个名为 phpX.conf(其中 X 为 PHP 的主要版本)的配置文件,内容类似于 php7.conf
  • 使用 mpm_eventmpm_worker 的 Apache:如果您将 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 年,他是 Ansible for DevOps 的作者。

安装
ansible-galaxy install net2grid.php
许可证
mit
下载
274
拥有者
We empower energy retailers to help consumers become energy efficient by unlocking value from Smart Meter data