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

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

提前致谢。

4

1 回答 1

0

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

为什么我喜欢这个?

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

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

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

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

  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你得到所有的配置。

于 2020-04-10T13:08:48.897 回答