Запуск и управление приложениями 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"
}
Пример приложения