.env文件在Docker、Kubernetes等技术中非常方便。
但是,如果我只有一个简单的nginx服务器,没有任何编排工具,还有一堆cron worker和一堆守护进程(systemd/supervisord等),该怎么办呢?
我可以将这些环境变量写入nginx服务器部分,但是我必须为每个cron worker或守护进程设置数百个环境变量。
我找到了一个快速解决方案:在生产中使用symfony/dotenv组件。
但是这似乎很不好。谁能提供更好的解决方案呢?
.env文件在Docker、Kubernetes等技术中非常方便。
但是,如果我只有一个简单的nginx服务器,没有任何编排工具,还有一堆cron worker和一堆守护进程(systemd/supervisord等),该怎么办呢?
我可以将这些环境变量写入nginx服务器部分,但是我必须为每个cron worker或守护进程设置数百个环境变量。
我找到了一个快速解决方案:在生产中使用symfony/dotenv组件。
但是这似乎很不好。谁能提供更好的解决方案呢?
parameters:
env(APP_ENV): prod
env(APP_SECRET): 3d05afda019ed4e3faaf936e3ce393ba
...
在您的services.yaml文件中,包含此文件的一种方法是将以下内容放入其中:imports:
- { resource: parameters.yaml, ignore_errors: true }
如果没有parameters.yaml文件存在,导入操作将被忽略。另一种解决方案是在Kernel类的configureContainer()
中添加一行:
configureContainer()
中添加一行:$loader->load($confDir.'/parameters'.self::CONFIG_EXTS, 'glob');
/etc/environment
。我们在docker中进行测试,所以yaml文件对它来说并不方便。 - Dmitry如果您想为cli和fpm集中管理环境变量,您可以在系统中定义它们一次,然后在您的php-fpm.conf
中引用它们:
....
[www]
env[APP_VAR1] = $APP_VAR1
env[APP_VAR2] = $APP_VAR2
...
这样,您可以避免在生产环境中使用DotEnv,这是最佳实践所鼓励的。
希望这有所帮助。