Suche…


NODE_ENV = "Produktion" einstellen

Produktionsbereitstellungen variieren in vielerlei Hinsicht. Eine Standardkonvention bei der Bereitstellung in der Produktion besteht darin, eine Umgebungsvariable namens NODE_ENV zu definieren und den Wert auf "Produktion" zu setzen .

Laufzeitflags

Jeder in Ihrer Anwendung ausgeführte Code (einschließlich externer Module) kann den Wert von NODE_ENV :

if(process.env.NODE_ENV === 'production') {
    // We are running in production mode
} else {
   // We are running in development mode
}

Abhängigkeiten

Wenn die Umgebungsvariable NODE_ENV auf 'production' gesetzt ist, werden alle devDependencies in Ihrer package.json- Datei beim Ausführen von npm install vollständig ignoriert. Sie können dies auch mit einem --production Flag --production :

npm install --production

Zur Einstellung von NODE_ENV Sie eine dieser Methoden verwenden

Methode 1: Setze NODE_ENV für alle Knoten-Apps

Windows:

set NODE_ENV=production

Linux oder anderes Unix-basiertes System:

export NODE_ENV=production

Dadurch wird NODE_ENV für die aktuelle Bash-Sitzung festgelegt. NODE_ENV für alle Apps, die nach dieser Anweisung gestartet werden, NODE_ENV auf production .

Methode 2: Setze NODE_ENV für die aktuelle App

NODE_ENV=production node app.js

Dadurch wird NODE_ENV für die aktuelle App festgelegt. Dies ist hilfreich, wenn wir unsere Apps in verschiedenen Umgebungen testen möchten.

Methode 3: Erstellen .env eine .env Datei und verwenden Sie sie

Hierfür wird die hier erläuterte Idee verwendet. In diesem Beitrag finden Sie eine ausführlichere Erklärung.

Grundsätzlich erstellen Sie eine .env Datei und führen ein bash-Skript aus, um sie in der Umgebung .env .

Um das Schreiben eines Bash-Skripts zu vermeiden, können Sie mit dem Paket env- .env die in der .env Datei definierten Umgebungsvariablen .env .

env-cmd .env node app.js

Methode 4: Verwenden Sie das cross-env Paket

Mit diesem Paket können Umgebungsvariablen für jede Plattform auf eine Weise festgelegt werden.

Nach der Installation mit npm können Sie es package.json wie folgt zu Ihrem Bereitstellungsskript in package.json hinzufügen:

"build:deploy": "cross-env NODE_ENV=production webpack"

App mit dem Prozessmanager verwalten

Es ist empfehlenswert, NodeJS-Apps, die von Prozessmanagern gesteuert werden, auszuführen. Der Prozessmanager hilft, die Anwendung für immer am Leben zu erhalten, bei einem Neustart neu zu starten, ohne Ausfallzeiten neu zu laden und die Verwaltung zu vereinfachen. Die leistungsstärksten von ihnen (wie PM2 ) verfügen über einen integrierten Lastausgleich. Mit PM2 können Sie auch Anwendungsprotokollierung, -überwachung und -cluster verwalten.

PM2-Prozessmanager

PM2 installieren:

npm install pm2 -g

Der Prozess kann im Cluster-Modus mit integriertem Load Balancer gestartet werden, um die Last zwischen den Prozessen zu verteilen:

pm2 start app.js -i 0 --name "api" ( -i gibt die Anzahl der zu pm2 start app.js -i 0 --name "api" Prozesse an. Wenn es 0 ist, basiert die Prozessnummer auf der CPU-Kernenanzahl)

Bei mehreren Benutzern in der Produktion muss es für PM2 einen einzigen Punkt geben. Dem pm2-Befehl muss daher ein Speicherort vorangestellt werden (für die PM2-Konfiguration). Andernfalls wird für jeden Benutzer mit der Konfiguration in dem entsprechenden Basisverzeichnis ein neuer pm2-Prozess erzeugt. Und es wird inkonsistent sein.

Verwendung: PM2_HOME=/etc/.pm2 pm2 start app.js

Bereitstellung mit PM2

PM2 ist ein Produktionsprozessmanager für Node.js Anwendungen, mit dem Sie Anwendungen für immer am Leben erhalten und ohne Ausfallzeiten neu laden können. Mit PM2 können Sie auch Anwendungsprotokollierung, -überwachung und -cluster verwalten.

Installieren Sie pm2 global.

npm install -g pm2

Führen Sie dann die node.js App mit PM2.

pm2 start server.js --name "my-app"

Geben Sie hier die Bildbeschreibung ein

Die folgenden Befehle sind nützlich, wenn Sie mit PM2 .

Alle laufenden Prozesse auflisten:

pm2 list

Stoppen Sie eine App:

pm2 stop my-app

App neu starten:

pm2 restart my-app

So zeigen Sie detaillierte Informationen zu einer App an:

pm2 show my-app

So entfernen Sie eine App aus der Registrierung von PM2:

pm2 delete my-app

Bereitstellung mit dem Prozessmanager

Prozessmanager wird im Allgemeinen in der Produktion verwendet, um eine nodejs-App bereitzustellen. Die Hauptfunktionen eines Prozessmanagers sind ein Neustart des Servers bei einem Absturz, Überprüfen des Ressourcenverbrauchs, Verbesserung der Laufzeitleistung, Überwachung usw.

Einige der populärsten Prozessmanager, die von der Knoten-Community erstellt werden, sind für immer PM2 usw.

Forvever

forever ist ein Befehlszeilenschnittstellentool, um sicherzustellen, dass ein bestimmtes Skript kontinuierlich ausgeführt wird. Die einfache Benutzeroberfläche von forever macht es ideal für kleinere Implementierungen von Node.js Apps und -Skripts.

forever überwacht Ihren Prozess und startet ihn neu, wenn er abstürzt.

Für forever global installieren.

$ npm install -g forever

Anwendung ausführen:

$ forever start server.js

Dadurch wird der Server gestartet und eine ID für den Prozess angegeben (beginnt bei 0).

Applikation neustarten :

$ forever restart 0

Hier ist 0 die ID des Servers.

Anwendung stoppen:

$ forever stop 0

Ähnlich wie beim Neustart ist 0 die ID des Servers. Sie können auch eine Prozess-ID oder einen Skriptnamen anstelle der von forever angegebenen ID eingeben.

Für weitere Befehle: https://www.npmjs.com/package/forever

Verwenden verschiedener Eigenschaften / Konfigurationen für verschiedene Umgebungen wie dev, qa, staging usw.

Große Anwendungen erfordern oft unterschiedliche Eigenschaften, wenn sie in unterschiedlichen Umgebungen ausgeführt werden. Wir können dies erreichen, indem Sie Argumente an die NodeJs-Anwendung übergeben und dasselbe Argument im Node-Prozess verwenden, um bestimmte Umgebungseigenschaftsdateien zu laden.

Angenommen, wir haben zwei Eigenschaftsdateien für unterschiedliche Umgebungen.


  • dev.json

      {
          "PORT": 3000,
          "DB": {
              "host": "localhost",
              "user": "bob",
              "password": "12345"
          }
      }
    
  • qa.json

      {
          "PORT": 3001,
          "DB": {
              "host": "where_db_is_hosted",
              "user": "bob",
              "password": "54321"
          }
      }
    

Der folgende Code in der Anwendung wird die entsprechende Eigenschaftsdatei exportieren, die wir verwenden möchten.

process.argv.forEach(function (val) {
    var arg = val.split("=");
    if (arg.length > 0) {
        if (arg[0] === 'env') {
            var env = require('./' + arg[1] + '.json');
            exports.prop = env;
        }
    }
});

Wir geben der Bewerbung folgende Argumente

node app.js env=dev

Wenn wir Prozessmanager für immer verwenden, dann ist es so einfach wie

forever start app.js env=dev

Cluster nutzen

Eine einzelne Instanz von Node.js wird in einem einzelnen Thread ausgeführt. Um Multi-Core-Systeme zu nutzen, möchte der Benutzer manchmal ein Cluster von Node.js-Prozessen starten, um die Last zu handhaben.

 var cluster = require('cluster');
    
    var numCPUs = require('os').cpus().length;
    
        if (cluster.isMaster) {
          // In real life, you'd probably use more than just 2 workers,
          // and perhaps not put the master and worker in the same file.
          //
          // You can also of course get a bit fancier about logging, and
          // implement whatever custom logic you need to prevent DoS
          // attacks and other bad behavior.
          //
          // See the options in the cluster documentation.
          //
          // The important thing is that the master does very little,
          // increasing our resilience to unexpected errors.
            console.log('your server is working on ' + numCPUs + ' cores');
            
             for (var i = 0; i < numCPUs; i++) {
                    cluster.fork();
                  }
             
          cluster.on('disconnect', function(worker) {
            console.error('disconnect!');
            //clearTimeout(timeout);
            cluster.fork();
          });
    
          
        } else {
            require('./app.js');
        
        }


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow