danack / configurator
从PHP、JSON和Yaml数据文件生成配置文件。
Requires
- php: ^7.2 || ^8.0
- danack/console: ^2.6.1
- rdlowrey/auryn: ^1.0.2
Requires (Dev)
- mikey179/vfsstream: ^1.4.0
- phpunit/phpunit: 9.5.6
- squizlabs/php_codesniffer: ^3.6.0
- symfony/yaml: ^2.8.2
README
一些简单的工具,用于合理地管理配置数据。这些工具用于存储可以安全共享的环境数据。它们不是设计来存储“秘密”,例如api/oauth密钥。
-
配置文件生成器
-
环境设置生成器
-
将PHP ini文件转换为PHP-FPM格式
哲学
环境变量需要粒度控制。虽然它们可以分组为“环境”,但它们需要在每个部署的基础上可配置,而无需复制大量信息。
它们还需要与应用程序的代码存储在一起,以便于维护。
这个库允许你做这两件事。所有环境设置都可以以简单的方式存储,然后提取并组合成任意组合。例如,使用“centos,dev”作为环境设置将使用所有的“centos”环境设置,并且“dev”设置将覆盖任何重复设置。
为不喜欢阅读说明的人提供的示例用法
如果你通过Composer安装Configurator,可执行文件将在vendor/bin
目录中,并且可以使用以下命令运行
# Generate nginx config file for the centos,dev environment vendor/bin/configurate -p example/config.php example/config_template/nginx.conf.php autogen/nginx.conf "centos,dev" # Generate a PHP file that contains a function which returns the current application env settings vendor/bin/genenv -p example/config.php example/envRequired.php autogen/appEnv.php "centos,dev" # Convert a PHP ini file to be in the PHP-FPM format vendor/bin/fpmconv autogen/php.ini autogen/php.fpm.ini
配置文件生成器
此工具允许你从基于PHP的模板和PHP数据文件生成配置文件,这些数据文件包含不同环境的所有设置。
源配置模板文件
<?php $config = <<< END server { access_log ${'nginx.log.directory'}/project.access.log requestTime; error_log ${'nginx.log.directory'}/project.error.log; root ${'project.root.directory'}/public; } END; return $config;
存储任意环境数据的数据文件
<?php $centos = [ 'nginx.log.directory' => '/var/log/nginx', 'project.root.directory' => '/home/project', ]; $windows = [ 'nginx.log.directory' => 'c:/nginx', 'project.root.directory' => 'c:/documents/project', ]; $john = [ 'project.root.directory' => '/home/workdir/project', ]
运行命令 configurate data/nginx.conf.php var/generated/nginx.conf centos,john -p settings.php
将生成以下文件
access_log /var/log/nginx/project.access.log requestTime;
error_log /var/log/nginx/project.error.log;
root /home/workdir/project/public;
语法
configurate [-p|--phpsettings="..."] [-j|--jssettings="..."] 输入 输出 环境
生成环境设置
一个工具,它将解析应用程序所需的环境设置和数据文件,这些数据文件包含所有环境的设置,并生成一个包含返回所需环境设置数组的函数的文件。
给定此文件列出应用程序所需的环境设置
<?php use ExampleApp\AppConfig; $env = [ AppConfig::CACHING_SETTING, AppConfig::SCRIPT_PACKING, AppConfig::FILE_STORAGE ]; return $env;
以及一个包含所有各种环境设置数据的数据文件
$dev = [ AppConfig::SCRIPT_PACKING => true, AppConfig::CACHING_SETTING => 'caching.disable', ]; $live = [ AppConfig::SCRIPT_PACKING => true, AppConfig::CACHING_SETTING => 'caching.time' ]; // Anyone doing UX testing needs to have the scripts packed together // to avoid slow UI responses $uxtesting = [AppConfig::SCRIPT_PACKING => true];
运行命令 bin/genenv -p environment/config.php environment/envRequired.php env.php dev,uxtesting
将生成包含所有请求环境设置的单一函数的文件
<?php function getAppEnv() { static $env = [ 'caching.setting' => 'caching.disable', 'script.packing' => 'true', ]; return $env; }
键是实际字符串,而不是应用程序中使用的常量,以便可以在应用程序之外使用设置。
语法
genenv [-p|--phpsettings="..."] [-j|--jssettings="..."] 输入 输出 环境
将PHP ini文件转换为PHP-FPM格式
由于某些原因,PHP-FPM在PHP-FPM配置文件中将ini文件包含在池中时不使用标准的PHP文件格式。Configurator的此方面将PHP风格的ini文件转换为PHP-FPM期望的格式
输入ini文件
extension=imagick.so
default_charset = "utf-8";
post_max_size = 10M
运行命令 php bin/fpmconv example.php.ini example.phpfpm.ini
将生成以下PHP-FPM ini文件
php_admin_value[extension] = "imagick.so"
php_admin_value[default_charset] = "utf-8"
php_admin_value[post_max_size] = "10M"