尽管我不熟悉DevOps最佳实践,但我正在尝试提出一种可靠且有效的方法来管理生产中的多个变量。以下是我目前的做法:
/
|ENV_VAR.sh
|--/api1
|--/staging.api1
|--/api2
|--/staging.api2
位置:
ENV_VAR.sh
### API 1 variables ###
export API1_VAR_1=foo
export API1_VAR_2=foo2
export API1_STAG_VAR_1=foo_stag
export API1_VAR_2=foo2_stag2
### API 2 variables ###
export API2_VAR_1=foo
export API2_VAR_2=foo2
export API2_STAG_VAR_1=foo_stag
export API2_VAR_2=foo2_stag2
API 1和2是使用反向代理配置在同一服务器上运行的两个基于Node.js的应用程序。如果服务器没有任何问题(例如意外关闭),我只需要通过SOURCE ENV_VAR.SH
偶尔(重新)设置变量,以确保定义了新变量。
[在继续使用此方法之前,我想知道它是否完全正确,或者是否存在较大缺陷。如果这种方法还不错,那么每当部署任何新版本的App时,如何从package.json
中自动(重新)获取环境变量? (以确保仍定义了变量)
提前感谢。
[我喜欢将Loren West的config软件包用于这些配置参数。我碰巧想用properties包扩展它:这样,我不必将参数放入有效的,无注释的JSON格式。 JSON5还有助于解决可读性问题,但我还没有尝试过。
我为什么喜欢这个?
它提供了处理开发/测试/登台/生产环境的结构化方法。它关闭了ENV
环境变量,该变量当然具有development
和production
之类的值。
所有属性文件进入单个目录,通常为./config
。您的生产技能可以告诉他们他们在看什么。 default.properties
,development.properties
和production.properties
是典型文件的名称。
大多数配置参数不必保密,因此可以将它们提交到您的存储库。
秘密(密码,连接字符串,API密钥等)可以存储在部署系统放置在local.properties
中的./config
文件中。 (在local.properties
文件中提及.gitignore
。)
还可以从环境变量中加载秘密,这些环境变量在名为./config/custom_environment_variables.json
的文件中命名。
./config/custom_environment_variables.json
很好用。
这真的很容易配置。
您的文件:
pm2
您的nodejs程序:
default.properties (used when not overridden by another file)
[API1]
VAR_1 = foo
VAR_2 = foo2
[API2]
VAR_1 = foo
VAR_2 = foo_for_api2
staging.properties
[API1]
VAR_1 = foo_stag
VAR_2 = foo2_stag2
[API2]
VAR_1=foo_stag
VAR_2=foo2_stag2
custom_environment_variables.json
{
"API1" : {
"password": "API1_PASS"
},
"API2" : {
"password": "API2_PASS"
}
}
然后您使用const config = require( 'config' )
require( 'properties' )
const appConfig = config.get( 'API1' )
const var1 = appConfig.VAR_1
const password = appConfig.password
运行程序,并获得所有配置。