Ako uložiť nastavenia/konfiguračné súbory nasadenia Node.js?
Pracoval som na niekoľkých aplikáciách Node a hľadal som dobrý vzor na ukladanie nastavení súvisiacich s nasadením. Vo svete Django (odkiaľ pochádzam) je bežnou praxou mať súbor settings.py
, ktorý obsahuje štandardné nastavenia (časová zóna atď.), a potom súbor local_settings.py
pre špecifické nastavenia nasadenia, t. j. s akou databázou sa má komunikovať, aký soket memcache, e-mailovú adresu pre administrátorov atď.
Podobné vzory som hľadal aj pre Node. Len konfiguračný súbor by bol fajn, aby sa nemusel zasekávať medzi všetko ostatné v app.js
, ale považujem za dôležité mať možnosť mať konfiguráciu špecifickú pre server v súbore, ktorý nie je v správe zdrojov. Tá istá aplikácia by mohla byť nasadená na rôznych serveroch s divoko odlišnými nastaveniami a riešiť konflikty pri zlučovaní a podobne nie je moja predstava zábavy.
Existuje na to nejaký framework/nástroj, alebo si každý niečo poskladá sám?
Pre svoje balíky používam súbor
package.json
a pre konfiguráciu súborconfig.js
, ktorý vyzerá takto:Načítam konfiguráciu z môjho projektu:
a potom môžem pristupovať k mojim veciam z
config.db_host
,config.db_port
, atď... To mi umožňuje používať buď natvrdo zadané parametre, alebo parametre uložené v premenných prostredia, ak nechcem ukladať heslá v správe zdrojov.Taktiež generujem súbor
package.json
a vkladám do neho sekciu závislostí:Keď naklonujem projekt na svoj lokálny počítač, spustím
npm install
na inštaláciu balíkov. Viac informácií o tom tu.Projekt je uložený na GitHub, pričom pre môj produkčný server sú pridané vzdialené položky.
Oveľa neskôr som našiel celkom dobrý modul Node.js na správu konfigurácie: nconf.
Jednoduchý príklad:
Podporuje tiež ukladanie nastavení v Redis, zápis konfiguračných súborov, má pomerne solídne API a je tiež podporovaný jedným z rešpektovanejších Node.js obchodov, Nodejitsu, ako súčasť iniciatívy Flatiron framework, takže by mal byť pomerne odolný voči budúcnosti.
Pozrite si nconf na Githube.
Môžete sa tiež pozrieť na node-config, ktorý načíta konfiguračný súbor v závislosti od premennej $HOST a __$NODE_ENV__ (trochu ako RoR) : documentation.
To môže byť celkom užitočné pre rôzne nastavenia nasadenia (
development
,test
aleboproduction
).