bbatsche.PHP
Ansible PHP 网站角色
这个 Ansible 角色会在你的服务器上安装指定版本的 PHP,并在 Nginx 上设置一个运行 PHP 的网站。该角色使用 Phpenv 来管理不同版本的 PHP。它可以安装 PHP 从 5.2 到 7.2 的任何版本(不过如果你要安装 PHP 5.2,可能需要认真考虑一下你的选择 ;-)。
要求
Phpenv 需要在你的服务器上安装 Git,但如今哪台服务器没有 Git 呢?
这个角色利用了 Linux 的文件系统 ACL 以及一个名为 "web-admin" 的组来授予对特定目录的访问权限。你可以手动配置这些步骤,也可以安装 bbatsche.Base
角色。
此外,在 Ubuntu Xenial 上安装此角色需要 Ansible 版本为 2.2 或更高版本。Ansible 2.1 仍受 Ubuntu Trusty 的支持。
角色变量
domain
— 要创建的网站域名dynamic_php
— 是否应该通过index.php
重写网站的所有请求。这适用于大多数现代框架。默认值为否max_upload_size
— 最大上传大小(MB)。默认值为 "10"php_max_file_uploads
— 可以同时上传的最大文件数。默认值为 20timezone
— PHP 配置的时区。默认值为 "Etc/UTC"mysql_socket
— 用于连接本地主机的默认 MySQL 套接字路径。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
— 要使用 Phpenv 安装的 PHP 版本。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 插件 版本。默认值为一个 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
— 此域应能够读写的其他路径列表。此列表将始终包含域的根目录、当前 PHP 版本的 "var" 目录(用于会话存储),以及域的临时目录。http_root
— 所有网站将创建的目录。默认值为 "/srv/http"phpenv_root
— 安装 Phpenv 及其支持文件的位置。默认值为 "/usr/local/phpenv"
FPM 调优变量
PHP FPM 根据 env_name
以两种模式之一运行。在开发环境中,PHP FPM 将以 "按需" 模式运行,以最小化在低资源开发环境中生成并处于空闲状态的进程数。在其他环境中,FPM 将以 "动态" 模式运行,因此子进程会提前可用,以处理请求而不需要分叉。当以动态模式运行时,有几种方法可以调整 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
示例剧本
- 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 Bever (18.04)。
要查看可用的 rake 任务(和规范):
$ rake -T
这些规范不旨在测试幂等性。它们的目的是检查指定的任务是否执行其预期步骤。幂等性通过独立的集成测试进行测试。