Запуск и управление приложениями nodejs на одном сервере

Есть ли хороший способ запускать и управлять несколькими приложениями nodejs на одном сервере?

Я смотрел haibu и nodester, но они кажутся немного сложными для того, что я пытаюсь сделать.

Я также смотрел forever, и я думаю, что это может работать с конфигурационным файлом и веб-gui, но я не уверен, как Я собираюсь обрабатывать информацию о порте через ENV или аргументы.

Ответы

Ответ 1

Я использую Supervisord и Monit, более подробную информацию и пример конфигурации здесь: Управление процессами в Bringr.

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

Если номер порта не изменится для каждого приложения (но изменится между производством и средой разработки). Я рекомендую указать их внутри config.json(или непосредственно внутри package.json). И config.json будет содержать другой номер порта для каждого приложения в зависимости от среды:

{
 myapp:{
  production:{port:8080},
  development:{port:3000}
 }
}

И внутри myapp.js:

 var config = require('./config');
 app.listen(config.myapp[process.env.NODE_ENV].port)

С process.env.NODE_ENV, объявленным в ~/.bashrc.

Ответ 2

Я написал приложение nodegod, которое я использую для небольшого развертывания, возможно, 10 приложений каждый.

  • nodegod читает список приложений из json. Он имеет внутренний конечный автомат для каждого приложения, который безопасно обрабатывает жизненный цикл приложения, включая перезагрузки, а функции веб-страницы останавливают/запускают/отлаживают.

  • Веб-интерфейс использует веб-сокеты, поэтому вы можете управлять удаленными серверами через ssh.

  • При развертывании через rsync приложения перезапускаются автоматически.

  • Поскольку nodegod контролирует работу других приложений, вы можете захватить конечное дыхание приложения, например, segfault и malloc.

  • Я использую вилку http-proxy перед множеством экспресс-экземпляров, поэтому любое количество приложений может обмениваться одним портом сервера на DNS для обоих http и веб-сокетов.

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

Конфигурации приложений Я сохраняю в репозитории git в файловой системе.

Это не ракетостроение, и все это прекрасно сочетается. Только node и json: SIMPLE делает больше.

Ответ 3

Если ваш сервер имеет выскочку, просто используйте его. Мне не повезло с навсегда и схожим. Если вы хотите продолжить выскочку, roco было бы неплохо как решение для развертывания:

roco deploy:setup:upstart
roco deploy

Ответ 4

Мы постоянно пытаемся улучшить forever и haibu в Nodejitsu. Похоже, что подход, который вы ищете, представляет собой конфигурационный файл .forever для сложных опций. Эта функция сейчас находится в нашем отставании

https://github.com/nodejitsu/forever/issues/124

Вернитесь назад. Я считаю это довольно высоким приоритетом после следующего раунда улучшения производительности.

Ответ 5

В наши дни я использовал dokku, который является клоном OSS для героя. Развертывание выполняется так же просто, как убедиться, что ваш package.json содержит начало script. Например:

"scripts": {
  "start": "node index.js"
}

Пример приложения