Vérifiez si mon instance node.js est dev ou production

Actuellement, chaque fois que je veux déployer un serveur node.js sur mon serveur de production, je dois changer tous les IP / DNS / nom d’utilisateur / mot de passe pour mes différentes connexions à mes bases de données et API externes.

Ce processus est ennuyeux, y a-t-il un moyen de vérifier si l’instance node.js en cours d’exécution est dans cloud9ide ou en fait ma production joyent smartmachine?

Si je suis en mesure de déterminer (dans mon code en cours) sur quel serveur mon instance node.js est exécutée, j’appendai une condition qui définira les valeurs sur prod ou dev.

Je vous remercie

Normalement, vous devez exécuter une application de noeud en production comme ceci:

NODE_ENV=production node app.js

Les applications avec Express, Socket.IO et autres utilisent process.env.NODE_ENV pour déterminer l’environnement.

En développement, vous pouvez omettre cela et exécuter l’application normalement avec node app.js

Vous pouvez détecter l’environnement dans votre code comme ceci:

 var env = process.env.NODE_ENV || 'dev'; loadConfigFile(env + '.json', doStuff); 

Ressources:

Comment détecter l’environnement dans une application express.js?

Je pense que le moyen le plus simple de définir l’environnement est de transmettre un argument de ligne de commande à votre application.

 node ./server.js dev 

Dans votre script, vous devez gérer cet argument et définir la configuration dont vous avez besoin.

 var env = process.argv[2] || 'dev'; switch (env) { case 'dev': // Setup development config break; case 'prod': // Setup production config break; } 

En outre, j’ai été créé module qui rend le processus de configuration un peu plus facile. Peut-être que cela vous aidera.

En fait, je ne recommande pas de stocker les valeurs de configuration telles que les informations de connexion à la firebase database, les mots de passe, les jetons d’access et tout autre élément du code de l’application pour les raisons suivantes:

  1. Le codage en dur de ces valeurs rend difficile leur modification ultérieure. Vous devrez publier une nouvelle version de l’application pour modifier ces valeurs.

  2. Il s’agit d’une violation grave de la sécurité car les données de configuration et les mots de passe de niveau production ne doivent pas être stockés dans le code. Il est très facile de divulguer ces données sensibles.

La meilleure approche serait d’externaliser ces données et de les transmettre à votre application pendant l’exécution. Cela se fait normalement au moyen de variables d’environnement. Vous devez simplement définir une variable d’environnement unique pour chaque paix de données qui doit être modifiable entre différents environnements.

Par exemple: DB_HOST , DB_USER , DB_PASSWORD . Vous pouvez ensuite transmettre ces valeurs à votre application en production de la manière suivante:

 $ NODE_ENV=production DB_HOST=1.2.3.4 DB_USER=someusername DB_PASSWORD=somerandompassword /bin/node app.js 

En fait, ces valeurs peuvent être chiffrées et ajoutées à la base de code, puis déchiffrées lors du déploiement. Toutefois, assurez-vous que la clé de déchiffrement est stockée de manière sécurisée dans le système de déploiement ou fournie de manière interactive par l’ingénieur de version. Shippable permet de le faire hors de la boîte.

Dans l’environnement de développement, cela devient plus simple, car vous pouvez utiliser un module dotenv très pratique. Créez simplement un fichier .env dans le répertoire racine de votre projet et ajoutez-y toutes les variables:

 DB_HOST=1.2.3.4 DB_USER=someusername DB_PASSWORD=somerandompassword 

Mais, assurez-vous de l’exclure de VCS, car chaque développeur voudra probablement avoir une configuration personnelle. Vous pouvez créer un fichier .env.dist contenant la configuration par défaut, qui pourrait être utilisée ultérieurement comme modèle: cp .env.dist .env .


De plus, j’ai implémenté un module réutilisable, qui permet de détecter automatiquement l’environnement en analysant les arguments CLI et la variable NODE_ENV. Cela pourrait être utile sur votre machine de développement, car vous pouvez facilement changer d’environnement en transmettant un argument CLI à votre programme Node.js comme ceci: $ node app.js --prod . Il est également intéressant d’utiliser Gulp: $ gulp build --prod .

S’il vous plaît voir plus de détails et des cas d’utilisation sur la page de detect-environment .