php – Symfony 4,.env文件和制作

.env文件非常方便docker,kubernetes等

但是,如果我有简单的Nginx服务器没有任何编排和一包cron worker和一包守护进程(systemd / supervisord / etc)怎么办?
我可以将这些env变量写入Nginx服务器部分,但我必须为每个cron worker或daemon设置数百个env变量.

我找到了一个快速解决方案:在生产中使用symfony / dotenv组件.
但在我看来很脏.谁能提出更好的解决方案?

最佳答案
首先,并非所有变量都需要使用环境变量来指定.在单独的yaml文件中保留每个系统不同的变量.

如果每个服务器只有一个环境,则可以在/ etc / environment中全局指定环境变量. (根据你的Linux风格可能会有所不同)

我个人发现,当您在同一台服务器上运行多个环境时,使用DotEnv会比解决方案带来更多困难.在这种情况下,在/ etc / environment等全局配置中指定变量不起作用.

Nginx中指定环境变量也不是解决方案,因为正如您所提到的,它们不会被cron,supervisor,控制台等接收.对我来说,这就是完全删除DotEnv并使用它的原因.旧的参数.yaml文件再次.没有什么能阻止你这样做.

然而,另一个解决方案是在开发环境中继续使用DotEnv,并在生产中包含单独的parameters.yaml.然后,您可以按如下方式定义环境变量:

parameters:
  env(APP_ENV): prod
  env(APP_SECRET): 3d05afda019ed4e3faaf936e3ce393ba
  ...

包含此文件方法是将以下内容放在services.yaml文件中:

imports:
    - { resource: parameters.yaml,ignore_errors: true }

这样,当没有parameters.yaml文件存在时,将忽略导入.另一种解决方案是在Kernel类中为configureContainer()添加一行:

$loader->load($confDir.'/parameters'.self::CONFIG_EXTS,'glob');

相关文章

一、Linux下Nginx的安装 1.去官网 http://nginx.org/download/下载对应的Nginx安装包,推荐使...
一、空格:默认匹配、普通匹配 location / { root /home; } 二、= :精确匹配(表示匹配到 /home/resou...
``` nginx -c 配置文件路径 ``` ``` /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.con...
前言 nginx可所谓是如今最好用的软件级别的负载均衡了。通过nginx的高性能,并发能力强,占用内存下的特...
1.ngnix概念 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄...
博客园从今天上午就开始报502错误 , 他的原因还不知道 , 暂时先说下我们遇到502的排查情况 最大的可能性...