portrino / companienv
.env 文件的伴侣
Requires
- php: >=8.0
- symfony/console: ^6.0 || ^7.0
- symfony/dotenv: ^6.0 || ^7.0
- symfony/process: ^6.0 || ^7.0
Requires (Dev)
- behat/behat: ^3.14
- composer/composer: ^2.0
- ergebnis/composer-normalize: ^2.43
- friendsofphp/php-cs-fixer: ^3.47
- phpspec/phpspec: ^7.0
- phpstan/phpstan: ^1.10
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-strict-rules: ^1.5
- typo3/coding-standards: ^0.7
Replaces
README
Companienv
您的 .env
文件伴侣。现在大家都知道 12 factor 和 环境变量。许多框架,如 Symfony 使用 .env
文件 来配置应用程序,但我们没有帮助用户完成本地 .env
文件的工具。
Companienv 将帮助您管理 .env
文件,从代码仓库中的参考 .env.dist
版本开始。Companienv 可以
- 读取并填充默认值
- 识别并询问缺失的变量
- 根据某些条件询问变量 仅当匹配某些条件时
- 传播文件(从其他地方复制文件)
- 生成 公钥/私钥 RSA 密钥对
- 生成 SSL 证书
- 更多功能,通过 您的扩展
用法
- 将
portrino/companienv
作为项目的依赖项要求
composer req portrino/companienv
- 运行您的伴侣
vendor/bin/companienv
Composer 自动化
您可以通过配置 composer.json
文件中的脚本,在执行 composer install
或 composer update
命令后自动运行 Companienv
{ "scripts": { "post-install-cmd": [ "Companienv\\Composer\\ScriptHandler::run" ], "post-update-cmd": [ "Companienv\\Composer\\ScriptHandler::run" ] } }
默认情况下,用作模板的文件是 .env.dist
,写入的文件是 .env
。您可以在 composer.json
文件中更改这些默认值
{ "extra": { "companienv-parameters": [ { "file": ".env.foo", "dist-file": ".env.foo.dist" } ] } }
.env.dist
文件
所有配置都直接在 .env.dist
文件中,作为注释。配置分为多个块,以便用户更好地理解配置。以下是 Companienv 的基础
- 块。它们逻辑上组合变量。它们由标题(以双注释
##
开头的行)和描述(下面每一行注释)定义 - 属性。由以
#+
开头的行定义,属性与一个或多个变量相关联。这些属性是扩展的入口点。在上面的示例中,它表明JWT_*
变量与 RSA 密钥对相关联,因此 Companienv 将自动向用户推荐为他们生成一个。 - 注释。以
#~
开头的行将被 Companienv 忽略。
.env.dist
文件的示例
# .env.dist
## Welcome in the configuration of [my-project]
#
#~ Please run the `bin/start` command.
#~ These lines starting with `~` are not going to be displayed to the user
## GitHub
# In order to be able to login with GitHub, you need to create a GitHub application. To get access to the code
# repositories, you need to create a GitHub integration.
#
#+file-to-propagate(GITHUB_INTEGRATION_KEY_PATH)
#
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GITHUB_INTEGRATION_ID=
GITHUB_INTEGRATION_KEY_PATH=
GITHUB_SECRET=
## Security
# We need sauce! Well, no, we need an SSL certificate.
#
#+rsa-pair(JWT_PRIVATE_KEY_PATH JWT_PUBLIC_KEY_PATH JWT_PRIVATE_KEY_PASS_PHRASE)
#
JWT_PRIVATE_KEY_PATH=/runtime/keys/jwt-private.pem
JWT_PUBLIC_KEY_PATH=/runtime/keys/jwt-public.pem
JWT_PRIVATE_KEY_PASS_PHRASE=
## Another block
# With its (optional) description
AND_OTHER_VARIABLES=
内置扩展
only-if
扩展
如果某些其他变量禁用了特定功能,某些 .env
文件的块可能甚至不相关。
示例:如果 INTERCOM_ENABLED
的值(当前或用户输入)为 true
,则仅询问 INTERCOM_APPLICATION_ID
变量。
## Support & Feedback
# If you would like to allow your users to get some support from you, give you some feedback and this
# sort of things, select the integrations you'd like.
#
#+only-if(INTERCOM_APPLICATION_ID):(INTERCOM_ENABLED=true)
#
INTERCOM_ENABLED=false
INTERCOM_APPLICATION_ID=none
file-to-propagate
扩展
询问现有文件的路径并将其复制到引用中提到的目的地。
示例:这将要求用户提供现有文件的路径。它将此文件复制到项目根目录相对路径 /runtime/keys/firebase.json
。
#+file-to-propagate(FIREBASE_SERVICE_ACCOUNT_PATH) FIREBASE_SERVICE_ACCOUNT_PATH=/runtime/keys/firebase.json
rsa-pair
扩展
如果公钥/私钥对不存在,Companienv将为用户生成一对。
#+rsa-pair(JWT_PRIVATE_KEY_PATH JWT_PUBLIC_KEY_PATH JWT_PRIVATE_KEY_PASS_PHRASE) JWT_PRIVATE_KEY_PATH=/runtime/keys/jwt-private.pem JWT_PUBLIC_KEY_PATH=/runtime/keys/jwt-public.pem JWT_PRIVATE_KEY_PASS_PHRASE=
ssl-certificate-extension
类似于RSA密钥对:如果尚未存在,Companienv将提供生成自签名的SSL证书。
#+ssl-certificate(SSL_CERTIFICATE_PRIVATE_KEY_PATH SSL_CERTIFICATE_CERTIFICATE_PATH SSL_CERTIFICATE_DOMAIN_NAME) SSL_CERTIFICATE_PRIVATE_KEY_PATH=/runtime/keys/server.key SSL_CERTIFICATE_CERTIFICATE_PATH=/runtime/keys/server.crt SSL_CERTIFICATE_DOMAIN_NAME=
您自己的扩展
您可以使用Companienv轻松创建和使用自己的扩展。为此,您需要使用您自己的PHP文件启动Companienv,并使用Application
的registerExtension
方法。
use Companienv\Application; use Companienv\Extension; $application = new Application($rootDirectory); $application->registerExtension(new class() implements Extension { // Implements the interface... }); $application->run();
致谢与鸣谢
本项目受到并基于以下这些出色的开源项目的启发和基础