簡體   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