Dmi*_*try 5 php nginx environment-variables symfony symfony4
.env文件非常方便docker,kubernetes等
但是,如果我有简单的nginx服务器没有任何编排和一包cron worker和一包守护进程(systemd/supervisord/etc)怎么办?
我可以将这些env变量写入nginx服务器部分,但我必须为每个cron worker或daemon设置数百个env变量.
我找到了一个快速的解决方案:在生产中使用symfony/dotenv组件.
但在我看来很脏.谁能提出更好的解决方案?
Xat*_*too 11
首先,并非所有变量都需要使用环境变量来指定.在单独的yaml文件中保留每个系统不同的变量.
如果每个服务器只有一个环境,则可以全局指定环境变量/etc/environment.(根据你的Linux风格可能会有所不同)
我个人发现,当您在同一台服务器上运行多个环境时,使用DotEnv会比解决方案带来更多困难.在全局配置中指定变量就像/etc/environment在这种情况下不起作用.
在nginx中指定环境变量也不是解决方案,因为正如您所提到的,它们不会被cron,supervisor,控制台等接收.对我来说,这就是完全删除DotEnv并使用它的原因.再好的旧parameters.yaml文件.没有什么能阻止你这样做.
然而,另一个解决方案是在开发环境中继续使用DotEnv并parameters.yaml在生产中包含一个单独的.然后,您可以按如下方式定义环境变量:
parameters:
env(APP_ENV): prod
env(APP_SECRET): 3d05afda019ed4e3faaf936e3ce393ba
...
Run Code Online (Sandbox Code Playgroud)
包含此文件的方法是将以下内容放在services.yaml文件中:
imports:
- { resource: parameters.yaml, ignore_errors: true }
Run Code Online (Sandbox Code Playgroud)
这样,当没有parameters.yaml文件存在时,将忽略导入.另一个解决方案是configureContainer()在您的Kernel类中添加一行:
$loader->load($confDir.'/parameters'.self::CONFIG_EXTS, 'glob');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4407 次 |
| 最近记录: |