Architecture Decision Record

Active theme: Light

← Príklady záznamov rozhodnutí

Konfigurácia premenných prostredia

Obsah:

Zhrnutie

Problém

Chceme, aby boli naše aplikácie konfigurovateľné mimo artefaktov/binárnych súborov/zdrojového kódu, tak aby sa jedno zostavenie mohlo správať odlišne v závislosti od prostredia nasadenia.

  • Aby sme to dosiahli, chceme použiť konfiguráciu pomocou premenných prostredia.

  • Chceme spravovať konfiguráciu pomocou súborov, ktoré môžeme verzovať.

  • Chceme poskytnúť určitú ergonómiu vývojárskeho zážitku, napríklad vedieť, čo sa dá konfigurovať a aké sú relevantné predvolené hodnoty.

Rozhodnutie

Rozhodli sme sa pre súbory .env so súvisiacim súborom predvolených hodnôt a súborom schémy.

Stav

Rozhodnuté. Sme otvorení zvažovaniu nových schopností, keď sa objavia.

Podrobnosti

Predpoklady

Uprednostňujeme oddelenie kódu aplikácie a kódu prostredia. Predpokladáme, že aplikácia musí fungovať odlišne v rôznych prostrediach, ako je vývojové prostredie, testovacie prostredie, demo prostredie, produkčné prostredie atď.

Uprednostňujeme odvetvovú prax „12 factor app“ a ešte viac súvisiacu prax „15 factor app“.

Mnohé z našich predchádzajúcich projektov používali konvenciu súboru .env alebo podobného adresára .env. Typickou praxou je udržiavať ich mimo verzovania a namiesto toho použiť iný spôsob na ich nasadenie, verzovanie a správu.

Obmedzenia

Chceme udržať tajomstvá mimo nášho systému verzovania (VCS) správy zdrojového kódu (SCM).

Chceme sa usilovať o kompatibilitu s populárnymi softvérovými frameworkmi a knižnicami. Napríklad Node má modul „dotenv“ na čítanie konfigurácie z premenných prostredia.

Pozície

Zvažovali sme niekoľko prístupov:

  • Ukladať konfiguráciu v aplikácii, napríklad v súbore config.js.

  • Ukladať konfiguráciu v prostredí, napríklad v súbore .env.

  • Získavať konfiguráciu zo známeho miesta, napríklad z licenčného servera.

Argument

Zvolili sme prístup so súborom .env, pretože:

  • Je populárny, vrátane medzi odborníkmi.

  • Sleduje vzor súborov .env, ktoré naše tímy úspešne mnohokrát použili v mnohých projektoch.

  • Je jednoduchý. Najmä zatiaľ nám vyhovujú významné kompromisy, ktoré vidíme, ako je nedostatok auditných schopností v porovnaní s prístupom licenčného servera.

Dôsledky

Musíme vymyslieť spôsob, ako oddeliť konfiguráciu pomocou premenných prostredia, ktorá je verejná, od akejkoľvek správy tajomstiev.

Súvisiace

Súvisiace rozhodnutia

Očakávame, že všetky naše aplikácie budú používať tento prístup.

Budeme plánovať inováciu všetkých našich aplikácií, ktoré používajú menej schopný prístup, ako je tvrdé kódovanie v binárnom súbore alebo v zdrojovom kóde.

Ponecháme tak, ako sú, všetky naše aplikácie, ktoré používajú schopnejší prístup, ako je licenčný server.

Súvisiace požiadavky

Pridáme devops schopnosti pre súbory vrátane hookov, testov a kontinuálnej integrácie.

Musíme vyškoliť všetkých členov vývojového tímu o tomto rozhodnutí.

Súvisiace artefakty

Každá oblasť, v ktorej nasadzujeme, bude potrebovať vlastný súbor .env a súvisiace súbory.

Súvisiace princípy

Ľahko vratné.

Poznámky

Ukážkový súbor .env:

NAME=Alice Anderson
EMAIL=alice@example.com

Ukážkový súbor .env.defaults:

NAME=Joe Doe
EMAIL=joe@example.com

Ukážkový súbor .env.schema iba s kľúčmi:

NAME
EMAIL