web-dev-qa-db-de.com

Überprüfen Sie, ob meine node.js-Instanz dev oder production ist

Wenn ich jetzt einen node.js-Server auf meinem Produktionsserver bereitstellen möchte, muss ich alle IP/DNS/Benutzername/Kennwort für meine verschiedenen Verbindungen zu meinen Datenbanken und externen APIs ändern.

Dieser Prozess ist ärgerlich. Gibt es eine Möglichkeit zu überprüfen, ob sich die aktuell ausgeführte node.js-Instanz in cloud9ide befindet oder tatsächlich meine produktionsfreudige Smartmachine? 

Wenn ich in meinem laufenden Code feststellen kann, auf welchem ​​Server meine node.js-Instanz ausgeführt wird, füge ich eine Bedingung hinzu, die die Werte auf prod oder dev setzt. 

Vielen Dank

46
guiomie

Normalerweise sollten Sie eine Knoten-App wie folgt in der Produktion ausführen:

NODE_ENV=production node app.js

Anwendungen mit Express, Socket.IO und anderen verwenden process.env.NODE_ENV, um die Umgebung herauszufinden.

In der Entwicklung können Sie das weglassen und die App normal mit node app.js ausführen.

Sie können die Umgebung in Ihrem Code folgendermaßen erkennen:

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

Ressourcen:

Wie erkennt man die Umgebung in einer express.js-App?

67
alessioalex

Ich denke, der einfachste Weg, die Umgebung festzulegen, besteht darin, der Anwendung ein Befehlszeilenargument zu übergeben.

node ./server.js dev

In Ihrem Skript müssen Sie mit diesem Argument umgehen und die Konfiguration entsprechend einstellen.

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

Außerdem habe ich module erstellt, was den Konfigurationsprozess etwas vereinfacht. Vielleicht wird es dir helfen.

12
Vadim Baryshev

Eigentlich würde ich aus folgenden Gründen nicht empfehlen, Konfigurationswerte wie Datenbankverbindungsinformationen, Kennwörter, Zugriffstoken und dergleichen innerhalb des eigentlichen Anwendungscodes zu speichern:

  1. Durch das Festcodieren dieser Werte ist es schwierig, sie später zu ändern. Sie müssen eine neue Version der Anwendung freigeben, um diese Werte zu ändern.

  2. Dies ist ein schwerwiegender Sicherheitsverstoß, da Konfigurationsdaten und Passwörter der Produktionsklasse nicht im Code gespeichert werden sollten. Es ist sehr leicht, diese sensiblen Daten zu verlieren.

Der bessere Ansatz wäre, diese Daten zu externalisieren und sie während der Ausführung an Ihre Anwendung zu übergeben. Dies erfolgt normalerweise über Umgebungsvariablen. Sie müssen lediglich eine eindeutige Umgebungsvariable für jede Datenruhe definieren, die zwischen verschiedenen Umgebungen geändert werden kann.

Zum Beispiel: DB_Host, DB_USER, DB_PASSWORD. Dann können Sie diese Werte auf folgende Weise an Ihre App in der Produktion übergeben:

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

Tatsächlich könnten diese Werte verschlüsselt und zur Codebasis hinzugefügt und dann während der Bereitstellung entschlüsselt werden. Stellen Sie jedoch sicher, dass der Entschlüsselungsschlüssel sicher im Bereitstellungssystem gespeichert oder vom Release Engineer interaktiv bereitgestellt wird. Versandfähig erlaubt dies out of the box.

In der Entwicklungsumgebung wird es einfacher, da Sie sehr bequem das dotenv module verwenden können. Erstellen Sie einfach eine .env-Datei im Stammverzeichnis des Projekts und fügen Sie alle Variablen hinzu:

DB_Host=1.2.3.4
DB_USER=someusername
DB_PASSWORD=somerandompassword

Stellen Sie jedoch sicher, dass Sie es von Ihrem VCS ausschließen, da wahrscheinlich jeder Entwickler eine persönliche Konfiguration haben möchte. Sie können eine .env.dist-Datei erstellen, die eine Standardkonfiguration enthält, die später als Vorlage verwendet werden kann: cp .env.dist .env.


Außerdem wurde ein wiederverwendbares Modul implementiert, mit dem die Umgebung automatisch erkannt werden kann, indem sowohl CLI-Argumente als auch die Variable NODE_ENV analysiert werden. Dies kann auf Ihrem Entwicklungscomputer hilfreich sein, da Sie die Umgebung leicht ändern können, indem Sie ein CLI-Argument an Ihr Node.js-Programm wie folgt übergeben: $ node app.js --prod. Es ist auch schön, mit Gulp zu arbeiten: $ gulp build --prod.

Weitere Details und Anwendungsfälle finden Sie auf der Seite detect-environment .

5
Slava Fomin II

Das Npm-Konfigurationsmodul ist sehr nützlich für das umgebungsbasierte Setup und die darauf basierende App. Bitte überprüfen Sie den Link unten

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