Node.js
Node.js-applicaties in productie implementeren
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"
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');
}