In realtà, io non consiglierei di memorizzare i valori di configurazione come le informazioni di connessione al database, le password, i token di accesso e l'interno del codice effettivo dell'applicazione per i seguenti motivi:
La codifica hard di quei valori rende difficile cambiarli in seguito. Dovrai rilasciare una nuova versione dell'applicazione per modificare tali valori.
Si tratta di una violazione grave della sicurezza, poiché i dati di configurazione e le password di livello produttivo non devono essere memorizzati nel codice. È molto facile perdere questi dati sensibili.
L'approccio migliore sarebbe esternalizzare questi dati e passarli all'applicazione durante l'esecuzione. Questo è normalmente fatto per mezzo di variabili di ambiente. Hai solo bisogno di definire una variabile d'ambiente unica per ogni pace di dati che deve essere variabile tra diversi ambienti.
Ad esempio: DB_HOST
, DB_USER
, DB_PASSWORD
.Poi si potrebbe passare questi valori a voi applicazione in produzione questo modo:
$ NODE_ENV=production DB_HOST=1.2.3.4 DB_USER=someusername DB_PASSWORD=somerandompassword /bin/node app.js
In realtà, questi valori potrebbero essere criptati e aggiunti alla base di codice e poi decifrati durante la distribuzione. Tuttavia, assicurarsi che la chiave di decodifica sia archiviata in modo sicuro nel sistema di distribuzione o fornita in modo interattivo dal tecnico di rilascio. Shippable allows to do this fuori dalla scatola.
Nell'ambiente di sviluppo diventa più semplice, perché si può usare molto conveniente dotenv
module. Basta creare un file .env
nella directory principale del progetto e aggiungere tutte le variabili ad essa:
DB_HOST=1.2.3.4
DB_USER=someusername
DB_PASSWORD=somerandompassword
Ma, assicurarsi di escludere da voi VCS, perché ogni sviluppatore probabilmente vorrebbe avere configurazione personale. È possibile creare un file .env.dist
per contenere la configurazione predefinita, che in seguito potrebbe essere utilizzata come modello: cp .env.dist .env
.
Inoltre, ho implementato un modulo riutilizzabile, che permette di rilevare automaticamente l'ambiente analizzando entrambi gli argomenti CLI e variabili NODE_ENV. Questo potrebbe essere utile sul tuo computer di sviluppo, perché puoi facilmente cambiare ambiente passando un argomento CLI al tuo programma Node.js in questo modo: $ node app.js --prod
. È anche piacevole da usare con Gulp: $ gulp build --prod
.
Si prega di vedere i dettagli e casi d'uso sul detect-environment
's page.
L'app node.js è un server HTTP? –
Sì, lo è. Ha anche una connessione a mongodb. – guiomie