Recherche…


Réglage NODE_ENV = "production"

Les déploiements de production varieront de plusieurs manières, mais une convention standard lors du déploiement en production consiste à définir une variable d'environnement appelée NODE_ENV et à définir sa valeur sur «production» .

Drapeaux d'exécution

Tout code exécuté dans votre application (y compris les modules externes) peut vérifier la valeur de NODE_ENV :

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

Les dépendances

Lorsque la variable d'environnement NODE_ENV est définie sur 'production', toutes les devDependencies dans votre fichier package.json seront complètement ignorées lors de l'exécution de npm install . Vous pouvez également imposer ceci avec un drapeau --production :

npm install --production

Pour définir NODE_ENV vous pouvez utiliser l'une de ces méthodes

méthode 1: définissez NODE_ENV pour toutes les applications de noeud

Les fenêtres :

set NODE_ENV=production

Linux ou autre système basé sur Unix:

export NODE_ENV=production

Cela définit NODE_ENV pour la session bash en cours. Ainsi, toutes les applications démarrées après cette instruction auront NODE_ENV défini sur production .

méthode 2: définissez NODE_ENV pour l'application en cours

NODE_ENV=production node app.js

Cela définira NODE_ENV pour l'application en cours. Cela aide lorsque nous voulons tester nos applications sur différents environnements.

méthode 3: créer .env fichier .env et l'utiliser

Cela utilise l'idée expliquée ici . Référer ce post pour une explication plus détaillée.

Fondamentalement, vous créez .env fichier .env et exécutez un script bash pour les définir dans l'environnement.

Pour éviter d'écrire un script bash, le package env-cmd peut être utilisé pour charger les variables d'environnement définies dans le fichier .env .

env-cmd .env node app.js

méthode 4: Utiliser cross-env package cross-env

Ce paquet permet de définir les variables d’environnement dans un sens pour chaque plate-forme.

Après l'avoir installé avec npm, vous pouvez simplement l'ajouter à votre script de déploiement dans package.json comme suit:

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

Gérer l'application avec le gestionnaire de processus

Il est recommandé d’exécuter les applications NodeJS contrôlées par les gestionnaires de processus. Le gestionnaire de processus aide à maintenir l’application active pour toujours, à redémarrer en cas d’échec, à recharger sans interruption et à simplifier l’administration. Les plus puissants d'entre eux (comme PM2 ) ont un équilibreur de charge intégré. PM2 vous permet également de gérer la journalisation, la surveillance et la mise en cluster des applications.

Gestionnaire de processus PM2

Installation de PM2:

npm install pm2 -g

Le processus peut être démarré en mode cluster impliquant un équilibreur de charge intégré pour répartir la charge entre les processus:

pm2 start app.js -i 0 --name "api" ( -i doit spécifier le nombre de processus à générer. S'il est à 0, le numéro de processus sera basé sur le nombre de cœurs de processeur)

Tout en ayant plusieurs utilisateurs en production, il doit y avoir un seul point pour PM2. Par conséquent, la commande pm2 doit être préfixée par un emplacement (pour la configuration PM2), sinon elle générera un nouveau processus pm2 pour chaque utilisateur avec config dans son répertoire de base respectif. Et ce sera incohérent.

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

Déploiement à l'aide de PM2

PM2 est un gestionnaire de processus de production pour les applications Node.js , qui vous permet de garder les applications en vie pour toujours et de les recharger sans interruption. PM2 vous permet également de gérer la journalisation, la surveillance et la mise en cluster des applications.

Installez pm2 globalement.

npm install -g pm2

Ensuite, exécutez l'application node.js utilisant PM2.

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

entrer la description de l'image ici

Les commandes suivantes sont utiles lorsque vous travaillez avec PM2 .

Liste tous les processus en cours d'exécution:

pm2 list

Arrêtez une application:

pm2 stop my-app

Redémarrez une application:

pm2 restart my-app

Pour afficher des informations détaillées sur une application:

pm2 show my-app

Pour supprimer une application du registre de PM2:

pm2 delete my-app

Déploiement à l'aide du gestionnaire de processus

Le gestionnaire de processus est généralement utilisé en production pour déployer une application nodejs. Les principales fonctions d'un gestionnaire de processus sont le redémarrage du serveur en cas de panne, la vérification de la consommation des ressources, l'amélioration des performances d'exécution, la surveillance, etc.

Certains des gestionnaires de processus populaires créés par la communauté de nœuds sont pour toujours, pm2, etc.

Forvever

forever est un outil d'interface de ligne de commande permettant de garantir l'exécution continue d'un script donné. L'interface simple de forever le rend idéal pour exécuter de plus petits déploiements d'applications et de scripts Node.js

surveille forever votre processus et le redémarre s'il se bloque.

Installer forever globalement.

$ npm install -g forever

Exécuter l'application:

$ forever start server.js

Cela démarre le serveur et donne un identifiant pour le processus (à partir de 0).

Redémarrer l'application:

$ forever restart 0

Ici 0 est l'id du serveur.

Arrêter l'application:

$ forever stop 0

Semblable à redémarrer, 0 correspond à l'identifiant du serveur. Vous pouvez également donner un identifiant de processus ou un nom de script à la place de l'identifiant fourni par l'indispensable.

Pour plus de commandes: https://www.npmjs.com/package/forever

Utiliser différentes propriétés / configurations pour différents environnements tels que dev, qa, staging etc.

Les applications à grande échelle nécessitent souvent des propriétés différentes lorsqu’elles sont exécutées dans des environnements différents. Nous pouvons y parvenir en transmettant des arguments à l'application NodeJs et en utilisant le même argument dans le processus de noeud pour charger un fichier de propriétés d'environnement spécifique.

Supposons que nous ayons deux fichiers de propriétés pour un environnement différent.


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

Le code suivant dans l'application exportera le fichier de propriétés respectif que nous souhaitons utiliser.

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

Nous donnons des arguments à l'application comme suit

node app.js env=dev

si nous utilisons gestionnaire de processus comme pour toujours aussi simple que

forever start app.js env=dev

Profiter des clusters

Une seule instance de Node.js s'exécute dans un seul thread. Pour tirer parti des systèmes multi-core, l'utilisateur voudra parfois lancer un cluster de processus Node.js pour gérer la charge.

 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow