Ricerca…


Impostazione NODE_ENV = "produzione"

Le distribuzioni di produzione variano in molti modi, ma una convenzione standard quando si distribuisce in produzione consiste nel definire una variabile d'ambiente chiamata NODE_ENV e impostare il suo valore su "produzione" .

Bandiere di runtime

Qualsiasi codice in esecuzione nella tua applicazione (inclusi i moduli esterni) può controllare il valore di NODE_ENV :

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

dipendenze

Quando la variabile di ambiente NODE_ENV è impostata su "produzione", tutte le devDependencies nel file package.json verranno completamente ignorate durante l'esecuzione npm install . Puoi anche applicarlo con un flag --production :

npm install --production

Per impostare NODE_ENV puoi utilizzare uno di questi metodi

metodo 1: imposta NODE_ENV per tutte le app nodo

Finestre :

set NODE_ENV=production

Linux o altri sistemi basati su Unix:

export NODE_ENV=production

Questo imposta NODE_ENV per la sessione bash corrente, quindi tutte le app avviate dopo questa istruzione avranno NODE_ENV impostato sulla production .

metodo 2: imposta NODE_ENV per l'app corrente

NODE_ENV=production node app.js

Questo imposterà NODE_ENV per l'app corrente. Questo aiuta quando vogliamo testare le nostre app in diversi ambienti.

metodo 3: crea il file .env e .env

Questo usa l'idea spiegata qui . Fare riferimento a questo post per una spiegazione più dettagliata.

Fondamentalmente si crea .env file .env ed esegui alcuni script bash per impostarli sull'ambiente.

Per evitare di scrivere uno script bash, è possibile utilizzare il pacchetto env-cmd per caricare le variabili d'ambiente definite nel file .env .

env-cmd .env node app.js

metodo 4: utilizzare il pacchetto cross-env

Questo pacchetto consente di impostare le variabili di ambiente in un modo per ogni piattaforma.

Dopo averlo installato con npm, puoi aggiungerlo allo script di distribuzione in package.json come segue:

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

Gestisci l'app con il gestore dei processi

È buona norma eseguire app NodeJS controllate da process manager. Process Manager aiuta a mantenere l'applicazione in vita per sempre, ricomincia dall'errore, ricarica senza tempi di fermo e semplifica l'amministrazione. I più potenti di questi (come PM2 ) hanno un sistema di bilanciamento del carico integrato. PM2 consente inoltre di gestire la registrazione delle applicazioni, il monitoraggio e il clustering.

PM2 Process Manager

Installazione di PM2:

npm install pm2 -g

Il processo può essere avviato in modalità cluster che prevede il bilanciamento del carico integrato per distribuire il carico tra i processi:

pm2 start app.js -i 0 --name "api" ( -i serve per specificare il numero di processi da generare. Se è 0, il numero di processo sarà basato sul numero di core della CPU)

Pur avendo più utenti in produzione, è necessario disporre di un singolo punto per PM2. Pertanto, il comando pm2 deve essere preceduto da una posizione (per la configurazione PM2) altrimenti verrà generato un nuovo processo pm2 per ogni utente con configurazione nella rispettiva directory principale. E sarà incoerente.

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

Distribuzione utilizzando PM2

PM2 è un gestore dei processi di produzione per le applicazioni Node.js , che consente di mantenere attive le applicazioni per sempre e di ricaricarle senza tempi di fermo. PM2 consente inoltre di gestire la registrazione delle applicazioni, il monitoraggio e il clustering.

Installa pm2 livello globale.

npm install -g pm2

Quindi, esegui l'app node.js utilizzando PM2.

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

inserisci la descrizione dell'immagine qui

I seguenti comandi sono utili mentre si lavora con PM2 .

Elenca tutti i processi in esecuzione:

pm2 list

Interrompi un'app:

pm2 stop my-app

Riavvia un'app:

pm2 restart my-app

Per visualizzare informazioni dettagliate su un'app:

pm2 show my-app

Per rimuovere un'app dal registro di PM2:

pm2 delete my-app

Distribuzione utilizzando il gestore dei processi

Generalmente, il process manager viene utilizzato in produzione per distribuire un'app nodejs. Le funzioni principali di un gestore processi stanno riavviando il server in caso di arresto anomalo, controllo del consumo delle risorse, miglioramento delle prestazioni di runtime, monitoraggio, ecc.

Alcuni dei process manager popolari realizzati dalla comunità dei nodi sono per sempre, pm2, ecc.

Forvever

forever è uno strumento di interfaccia a riga di comando per garantire che un determinato script venga eseguito continuamente. La semplice interfaccia di forever lo rende ideale per eseguire piccole distribuzioni di app e script Node.js

monitora forever tuo processo e lo riavvia se si blocca.

Installa forever livello globale.

$ npm install -g forever

Esegui l'applicazione:

$ forever start server.js

Questo avvia il server e fornisce un id per il processo (parte da 0).

Riavvia l'applicazione:

$ forever restart 0

Qui 0 è l'id del server.

Arresta l'applicazione:

$ forever stop 0

Simile al riavvio, 0 è l'id del server. Puoi anche fornire ID processo o nome script al posto dell'ID dato da sempre.

Per ulteriori comandi: https://www.npmjs.com/package/forever

Utilizzo di diverse proprietà / configurazione per ambienti diversi come dev, qa, staging, ecc.

Le applicazioni su larga scala spesso hanno bisogno di proprietà diverse quando funzionano su ambienti diversi. possiamo ottenere ciò passando argomenti all'applicazione NodeJs e utilizzando lo stesso argomento nel processo del nodo per caricare un file di proprietà dell'ambiente specifico.

Supponiamo di avere due file di proprietà per diversi ambienti.


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

Il codice seguente nell'applicazione esporterà il rispettivo file di proprietà che vogliamo utilizzare.

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

Diamo argomenti all'applicazione come seguendo

node app.js env=dev

se usiamo process manager come per sempre che sia semplice come

forever start app.js env=dev

Approfittando dei cluster

Una singola istanza di Node.js viene eseguita in un singolo thread. Per sfruttare i sistemi multi-core, l'utente a volte desidera avviare un cluster di processi Node.js per gestire il carico.

 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow