生产中管理多个环境变量的最佳做法

问题描述 投票:1回答:1

尽管我不熟悉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中自动(重新)获取环境变量? (以确保仍定义了变量)

提前感谢。

node.js environment-variables devops production-environment node-config
1个回答
0
投票

[我喜欢将Loren West的config软件包用于这些配置参数。我碰巧想用properties包扩展它:这样,我不必将参数放入有效的,无注释的JSON格式。 JSON5还有助于解决可读性问题,但我还没有尝试过。

我为什么喜欢这个?

  1. 它提供了处理开发/测试/登台/生产环境的结构化方法。它关闭了ENV环境变量,该变量当然具有developmentproduction之类的值。

  2. 所有属性文件进入单个目录,通常为./config。您的生产技能可以告诉他们他们在看什么。 default.propertiesdevelopment.propertiesproduction.properties是典型文件的名称。

  3. 大多数配置参数不必保密,因此可以将它们提交到您的存储库。

  4. 秘密(密码,连接字符串,API密钥等)可以存储在部署系统放置在local.properties中的./config文件中。 (在local.properties文件中提及.gitignore。)

  5. 还可以从环境变量中加载秘密,这些环境变量在名为./config/custom_environment_variables.json的文件中命名。

  6. ./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 运行程序,并获得所有配置。

© www.soinside.com 2019 - 2024. All rights reserved.