Como armazenar arquivos de configurações/configuração de implantação do Node.js?
Eu tenho trabalhado em algumas aplicações de Node, e I'tenho procurado por um bom padrão de armazenamento de configurações relacionadas à implantação. No mundo Django (de onde eu venho), a prática comum seria ter um arquivo settings.py
contendo as configurações padrão (timezone, etc), e então um local_settings.py
para configurações específicas de deployment, ou seja, qual banco de dados falar, qual soquete memcache, endereço de e-mail para os administradores e assim por diante.
Tenho procurado por padrões semelhantes para o Node. Apenas um arquivo de configuração seria bom, então ele não precisa estar preso com tudo o resto no `app.js', mas eu acho importante ter uma maneira de ter uma configuração específica do servidor em um arquivo que não está no controle de código fonte. O mesmo aplicativo poderia muito bem ser implementado em servidores diferentes com configurações muito diferentes, e ter que lidar com conflitos de fusão e tudo isso não é minha idéia de diversão.
Então, existe algum tipo de estrutura/ferramenta para isto, ou toda a gente hackeia alguma coisa sozinha?
Eu utilizo um
package.json
para meus pacotes e umconfig.js
para minha configuração, que se parece com:Eu carrego a configuração do meu projeto:
e depois posso aceder às minhas coisas a partir de
config.db_host
,config.db_port
, etc... Isso me permite ou usar parâmetros codificados, ou parâmetros armazenados em variáveis ambientais se eu não'não quero armazenar senhas no controle de código fonte.Também gerei um
package.json
e inseri uma seção de dependências:Quando eu clono o projeto na minha máquina local, eu corro `npm install' para instalar os pacotes. Mais informações sobre isso aqui.
O projeto é armazenado no GitHub, com controles remotos adicionados para o meu servidor de produção.
Muito mais tarde, eu encontrei um módulo Node.js muito bom para gerenciar a configuração: nconf.
Um exemplo simples:
Ele também suporta armazenamento de configurações em Redis, escrita de arquivos de configuração, e tem uma API razoavelmente sólida, e também é apoiado por uma das mais respeitadas lojas Node.js, Nodejitsu, como parte da iniciativa [Flatiron][] framework, portanto, deve ser razoavelmente à prova de futuro.
Confira nconf em Github.
http://flatironjs.org/
Você também pode olhar para node-config que carrega o arquivo de configuração dependendo da variável $HOST e __$NODE_ENV__ (um pouco como RoR) : documentação.
Isto pode ser bastante útil para diferentes configurações de implantação (
desenvolvimento
,teste
ouprodução
).