web-dev-qa-db-fra.com

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

À l'heure actuelle, chaque fois que je souhaite déployer un serveur node.js sur mon serveur de production, je dois modifier tous les noms IP/DNS/nom d'utilisateur/mot de passe pour mes diverses connexions à mes bases de données et à mes API externes.

Ce processus est agaçant. Existe-t-il un moyen de vérifier si l’instance de node.js en cours d’exécution est dans cloud9ide ou si ma production est intelligente smartmachine? 

Si je parviens à déterminer (dans mon code en cours d'exécution) le serveur sur lequel mon instance de node.js est en cours d'exécution, j'ajouterai une condition définissant les valeurs pour le prod ou le dev. 

Je vous remercie

46
guiomie

Normalement, vous devriez 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 comprendre l'environnement.

En développement, vous pouvez l'omettre et simplement 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étectez-vous l'environnement dans une application express.js?

67
alessioalex

Je pense que le moyen le plus simple de définir l'environnement consiste à passer 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 facilite un peu le processus de configuration. Cela vous aidera peut-être.

12
Vadim Baryshev

En fait, je ne recommanderais pas de stocker des valeurs de configuration telles que les informations de connexion à la base de données, les mots de passe, les jetons d'accès et autres éléments du code de l'application réelle 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 grave violation 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 du code. Il est très facile de divulguer ces données sensibles.

La meilleure approche consiste à externaliser ces données et à les transmettre à votre application lors de l'exécution. Cela se fait normalement au moyen de variables d'environnement. Il vous suffit de définir une variable d'environnement unique pour chaque groupe de données devant ê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 réalité, ces valeurs pourraient être chiffrées et ajoutées à la base de code, puis déchiffrées pendant le déploiement. Cependant, 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 publication. Shippable permet de le faire hors de la boîte.

Dans l'environnement de développement, cela devient plus simple, car vous pouvez utiliser le très pratique dotenv module . 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 votre VCS, car chaque développeur voudra probablement une configuration personnelle. Vous pouvez créer un fichier .env.dist contenant la configuration par défaut, qui pourra ensuite être utilisé 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 de la CLI et la variable NODE_ENV. Cela pourrait être utile sur votre machine de développement, car vous pouvez facilement changer d’environnement en passant un argument CLI à votre programme Node.js comme ceci: $ node app.js --prod. C'est aussi agréable à utiliser avec Gulp: $ gulp build --prod.

Veuillez voir plus de détails et d’utilisations sur la page detect-environment .

5
Slava Fomin II

Le module de configuration NPM est très utile pour la configuration basée sur l'environnement et l'application en cours d'exécution basée sur celle-ci s'il vous plaît vérifier le lien ci-dessous

https://www.npmjs.com/package/config