Поиск…


Настройка NODE_ENV = "производство"

Производственные развертывания будут разными способами, но стандартное соглашение при развертывании в производстве - это определить переменную среды, называемую NODE_ENV и установить ее значение в «production» .

Флаги времени выполнения

Любой код, запущенный в вашем приложении (включая внешние модули), может проверить значение NODE_ENV :

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

зависимости

Когда для переменной среды NODE_ENV установлено значение «production», все devDependencies в вашем файле package.json будут полностью игнорироваться при запуске npm install . Вы также можете обеспечить это с помощью флага --production :

npm install --production

Для установки NODE_ENV вы можете использовать любой из этих методов

метод 1: установите NODE_ENV для всех приложений узла

Windows:

set NODE_ENV=production

Linux или другая система на основе unix:

export NODE_ENV=production

Это устанавливает NODE_ENV для текущего сеанса bash, поэтому все приложения запускаются после того, как этот оператор будет иметь NODE_ENV установленный для production .

метод 2: установите NODE_ENV для текущего приложения

NODE_ENV=production node app.js

Это установит только NODE_ENV для текущего приложения. Это помогает, когда мы хотим протестировать наши приложения в разных средах.

метод 3: создать файл .env и использовать его

Здесь используется идея, описанная здесь . См. Это сообщение для более подробного объяснения.

В основном вы создаете файл .env и запускаете некоторый скрипт bash, чтобы установить их в среде.

Чтобы избежать написания сценария bash, пакет env-cmd можно использовать для загрузки переменных среды, определенных в файле .env .

env-cmd .env node app.js

метод 4: используйте пакет cross-env

Этот пакет позволяет устанавливать переменные среды для каждой платформы.

После установки с помощью npm вы можете просто добавить его в свой сценарий развертывания в package.json следующим образом:

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

Управление приложением с диспетчером процессов

Хорошая практика для запуска приложений NodeJS, контролируемых менеджерами процессов. Менеджер процессов помогает поддерживать работоспособность приложения навсегда, перезагружается при сбое, перезагружается без простоя и упрощает администрирование. Самые мощные из них (например, PM2 ) имеют встроенный балансировщик нагрузки. PM2 также позволяет управлять ведением журнала приложений, мониторингом и кластеризацией.

Менеджер процессов PM2

Установка PM2:

npm install pm2 -g

Процесс можно запустить в режиме кластера с интегрированным балансировщиком нагрузки для распространения нагрузки между процессами:

pm2 start app.js -i 0 --name "api" ( -i - указать количество процессов для появления. Если это 0, то номер процесса будет основан на подсчете количества ядер процессора)

Имея несколько пользователей в производстве, он должен иметь единственную точку для PM2. Поэтому команда pm2 должна иметь префикс местоположения (для конфигурации PM2), иначе он будет порождать новый процесс pm2 для каждого пользователя с конфигурацией в соответствующем домашнем каталоге. И это будет непоследовательно.

Использование: PM2_HOME=/etc/.pm2 pm2 start app.js

Развертывание с использованием PM2

PM2 - это менеджер производственных процессов для приложений Node.js , который позволяет сохранять приложения навсегда и перезагружать их без простоя. PM2 также позволяет управлять ведением журнала приложений, мониторингом и кластеризацией.

Установите pm2 глобально.

npm install -g pm2

Затем запустите приложение node.js , используя PM2.

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

введите описание изображения здесь

Следующие команды полезны при работе с PM2 .

Список всех запущенных процессов:

pm2 list

Остановить приложение:

pm2 stop my-app

Перезапустите приложение:

pm2 restart my-app

Чтобы просмотреть подробную информацию о приложении:

pm2 show my-app

Чтобы удалить приложение из реестра PM2:

pm2 delete my-app

Развертывание с помощью диспетчера процессов

Диспетчер процессов обычно используется в производстве для развертывания приложения nodejs. Основными функциями диспетчера процессов являются перезапуск сервера, если он сбой, проверка потребления ресурсов, улучшение производительности во время выполнения, мониторинг и т. Д.

Некоторые из популярных менеджеров процессов, созданных сообществом узлов, навсегда, pm2 и т. Д.

Forvever

forever - инструмент интерфейса командной строки для обеспечения непрерывного выполнения заданного сценария. forever «s простой интерфейс делает его идеальным для запуска небольших развертываний Node.js приложений и скриптов.

forever контролирует ваш процесс и перезапускает его, если он сработает.

Установите forever глобально.

$ npm install -g forever

Запустить приложение:

$ forever start server.js

Это запустит сервер и дает идентификатор для процесса (начинается с 0).

Перезапустить приложение:

$ forever restart 0

Здесь 0 - идентификатор сервера.

Остановить применение:

$ forever stop 0

Подобно перезагрузке, 0 является идентификатором сервера. Вы также можете указать идентификатор процесса или имя сценария вместо идентификатора, заданного вечным.

Дополнительные команды: https://www.npmjs.com/package/forever

Использование разных свойств / конфигурации для разных сред, таких как dev, qa, настройка и т. Д.

Крупномасштабные приложения часто нуждаются в разных свойствах при работе в разных средах. мы можем добиться этого, передав аргументы в приложение NodeJs и используя тот же аргумент в процессе узла для загрузки файла свойств среды.

Предположим, у нас есть два файла свойств для разных условий.


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

Следующий код в приложении будет экспортировать соответствующий файл свойств, который мы хотим использовать.

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

Мы приводим аргументы для приложения, как показано ниже.

node app.js env=dev

если мы используем диспетчер процессов как навсегда, чем это так просто, как

forever start app.js env=dev

Воспользовавшись кластерами

Один экземпляр Node.js работает в одном потоке. Чтобы воспользоваться преимуществами многоядерных систем, пользователь иногда захочет запустить кластер из процессов Node.js для обработки нагрузки.

 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow