Zoeken…


NODE_ENV = "productie" instellen

Productie-implementaties kunnen op veel manieren variëren, maar een standaardconventie bij de implementatie in productie is om een omgevingsvariabele met de naam NODE_ENV te definiëren en de waarde ervan in te stellen op "productie" .

Runtime vlaggen

Elke code die in uw toepassing wordt uitgevoerd (inclusief externe modules) kan de waarde van NODE_ENV :

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

afhankelijkheden

Wanneer de NODE_ENV omgevingsvariabele is ingesteld op 'productie' all devDependencies in uw package.json bestand wordt volledig genegeerd bij het uitvoeren van npm install . Je kunt dit ook afdwingen met een --production :

npm install --production

Voor het instellen van NODE_ENV kunt u elk van deze methoden gebruiken

methode 1: stel NODE_ENV in voor alle knooppunt-apps

Ramen :

set NODE_ENV=production

Linux of ander op unix gebaseerd systeem:

export NODE_ENV=production

Hiermee wordt NODE_ENV voor de huidige bash-sessie. Voor apps die na deze instructie worden gestart, is NODE_ENV ingesteld op production .

methode 2: stel NODE_ENV in voor de huidige app

NODE_ENV=production node app.js

Hiermee wordt NODE_ENV voor de huidige app ingesteld. Dit helpt wanneer we onze apps in verschillende omgevingen willen testen.

methode 3: maak een .env bestand en gebruik het

Dit maakt gebruik van het idee dat hier wordt uitgelegd. Verwijs dit bericht voor meer gedetailleerde uitleg.

In feite maak je een .env bestand en voer je een bash-script uit om ze op de omgeving in te stellen.

Om te voorkomen dat er een bash-script wordt geschreven, kan het env-cmd- pakket worden gebruikt om de omgevingsvariabelen te laden die in het .env bestand zijn gedefinieerd.

env-cmd .env node app.js

methode 4: Gebruik cross-env pakket

Met dit pakket kunnen omgevingsvariabelen voor elk platform op één manier worden ingesteld.

Na installatie met npm kunt u het als volgt toevoegen aan uw implementatiescript in package.json :

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

Beheer app met procesmanager

Het is een goede gewoonte om NodeJS-apps uit te voeren die worden beheerd door procesmanagers. Process Manager helpt de applicatie voor altijd in leven te houden, opnieuw op te starten bij mislukking, opnieuw te laden zonder downtime en vereenvoudigt het beheer. De meest krachtige van hen (zoals PM2 ) hebben een ingebouwde load balancer. Met PM2 kunt u ook het loggen, bewaken en clusteren van applicaties beheren.

PM2 procesmanager

PM2 installeren:

npm install pm2 -g

Proces kan worden gestart in clustermodus met geïntegreerde load balancer om de belasting tussen processen te spreiden:

pm2 start app.js -i 0 --name "api" ( -i geeft het aantal te pm2 start app.js -i 0 --name "api" processen aan. Als het 0 is, wordt het pm2 start app.js -i 0 --name "api" gebaseerd op het aantal CPU-kernen)

Hoewel er meerdere gebruikers in productie zijn, moet het één punt hebben voor PM2. Daarom moet het pm2-commando worden voorafgegaan door een locatie (voor PM2 config) anders zal het een nieuw pm2-proces voortbrengen voor elke gebruiker met config in de respectieve thuismap. En het zal inconsistent zijn.

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

Implementatie met PM2

PM2 is een productieprocesmanager voor Node.js applicaties, waarmee u applicaties voor altijd in leven kunt houden en zonder downtime opnieuw kunt laden. Met PM2 kunt u ook het loggen, bewaken en clusteren van applicaties beheren.

Installeer pm2 wereldwijd.

npm install -g pm2

Voer vervolgens de app node.js met PM2.

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

voer hier de afbeeldingsbeschrijving in

De volgende opdrachten zijn handig tijdens het werken met PM2 .

Lijst alle lopende processen:

pm2 list

Stop een app:

pm2 stop my-app

Start een app opnieuw:

pm2 restart my-app

Gedetailleerde informatie over een app bekijken:

pm2 show my-app

Een app verwijderen uit het register van PM2:

pm2 delete my-app

Implementatie met behulp van procesmanager

Procesmanager wordt meestal gebruikt bij de productie om een nodejs-app te implementeren. De belangrijkste functies van een procesmanager zijn het opnieuw opstarten van de server als deze vastloopt, het controleren van bronnenverbruik, het verbeteren van de runtime-prestaties, monitoring etc.

Sommige van de populaire procesbeheerders die door de knooppuntgemeenschap zijn gemaakt, zijn voor altijd, pm2, enz.

Forvever

forever is een opdrachtregelinterface om ervoor te zorgen dat een bepaald script continu wordt uitgevoerd. De eenvoudige interface van forever maakt het ideaal voor het uitvoeren van kleinere implementaties van Node.js apps en scripts.

bewaakt voor forever uw proces en start het opnieuw als het crasht.

Voor forever wereldwijd installeren.

$ npm install -g forever

Toepassing uitvoeren:

$ forever start server.js

Dit start de server en geeft een ID voor het proces (start vanaf 0).

Start toepassing opnieuw:

$ forever restart 0

Hier is 0 het ID van de server.

Toepassing stoppen:

$ forever stop 0

Net als bij herstarten is 0 de ID van de server. Je kunt ook een proces-ID of scriptnaam opgeven in plaats van de id die door de forever is gegeven.

Voor meer opdrachten: https://www.npmjs.com/package/forever

Verschillende eigenschappen / configuratie gebruiken voor verschillende omgevingen zoals dev, qa, enscenering etc.

Grootschalige toepassingen hebben vaak verschillende eigenschappen nodig wanneer ze in verschillende omgevingen worden uitgevoerd. we kunnen dit bereiken door argumenten door te geven aan de NodeJs-toepassing en hetzelfde argument in het knooppuntproces te gebruiken om een specifiek eigenschappenbestand voor de omgeving te laden.

Stel dat we twee eigenschappenbestanden hebben voor verschillende omgevingen.


  • 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"
          }
      }
    

De volgende code in de toepassing exporteert het respectieve eigenschappenbestand dat we willen gebruiken.

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;
        }
    }
});

We geven argumenten aan de toepassing als volgt

node app.js env=dev

als we procesmanager voor altijd gebruiken dan is het zo simpel als

forever start app.js env=dev

Profiteren van clusters

Een enkele instantie van Node.js wordt uitgevoerd in een enkele thread. Om te profiteren van multi-core systemen zal de gebruiker soms een cluster van Node.js-processen willen starten om de belasting af te handelen.

 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow