繁体   English   中英

在生产中管理多个环境变量的最佳实践

[英]Best practices for managing multiple environment variables in prodution

尽管我不熟悉 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 是两个基于 nodejs 的应用程序,使用反向代理配置在同一服务器上运行。 如果服务器没有任何问题(例如意外关闭),我只需要不时通过SOURCE ENV_VAR.SH (重新)设置变量,以确保定义了新变量。

在继续这种方法之前,我想知道它是否完全正确,或者它是否有很大的缺陷。 如果这种方法没问题,每当部署任何应用程序的新版本时,如何自动(重新)从package.json环境变量? (只是为了保证变量仍然被定义)

提前致谢。

我喜欢将 Loren West 的配置package 用于这些配置参数。 我碰巧喜欢使用属性package 来扩展它:这样我就不必将参数设置为有效的、无注释的 JSON 格式。 JSON5也有助于解决可读性问题,但我没有尝试过。

为什么我喜欢这个?

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

  2. 所有属性文件 go 到一个目录中,通常是./config 你的生产克鲁可以告诉他们在看什么。 default.propertiesdevelopment.propertiesproduction.properties是典型文件的名称。

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

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

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

  6. 它与pm2很好地配合使用。

这真的很容易配置。

您的文件:

 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"
   }
}

你的 nodejs 程序:

const config = require( 'config' )
require( 'properties' )
const appConfig = config.get( 'API1' )

const var1 = appConfig.VAR_1
const password = appConfig.password

然后,您使用API1_PASS=yaddablah nodejs program.js运行您的程序,并获得所有配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM