danack/configurator

从PHP、JSON和Yaml数据文件生成配置文件。

1.1.1 2021-07-02 19:36 UTC

This package is auto-updated.

Last update: 2024-08-29 03:47:39 UTC


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"