Развертывание рабочего узла.сервер JS [закрыт]


Я написал узел.js app, я ищу, чтобы он работал на одной из наших производственных машин. Это похоже на довольно распространенный запрос, но я не могу найти адекватное решение. Нет ли установленных решений для развертывания производственного узла.в JS приложений?

приложение просто (

вот подходы, которые я рассмотрел, но я все еще не уверен:

использование фреймворка (например. Экспресс)

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

запуск сервера с помощью nohup

основная проблема здесь заключается в обработке исключений, мы (очевидно) не хочу, чтобы весь сервер рухнул из-за исключения. Из того, что я понимаю, обертывание всего приложения в try {} catch {} цикл не поможет, потому что интерпретатор Javascript остается в непредсказуемом состоянии после исключения. Это правильно?

Используя что-то вроде Forever

Я установил навсегда в нашей машине FreeBSD, и это было очень глючно. Это привело к возникновению бесконечных процессов, которые не могли быть убиты навсегда. Мне пришлось бежать kill -9 чтобы вернуть мою машину, и я не чувствую себя слишком уверенно о запуске производственного приложения на навсегда. Также кажется, что Upstart (аналогичный инструмент, но более общий) не будет работать на FreeBSD.

принимала решений (например. Heroku, Rackspace, Amazon EC2 и др.)

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

наверняка есть должно быть установлено разрешение для этого? Я что-то упустил?

6 75

6 ответов:

  • вы должны действительно действительно использовать фреймворк (я рекомендую что-то вроде Express, так как он был протестирован в бою), если вы не хотите иметь дело с сессиями, куки, промежуточным программным обеспечением и т. д. самостоятельно. Экспресс действительно легкий.
  • запуск сервера с помощью nohup: вы не должны этого делать, просто запустите его с помощью обычной команды "node". Также Express обертывает маршруты в try-catch, поэтому ваш сервер не будет сбой в маршруте. Однако если у вашего сервера есть серьезная проблема, вы не должны бояться перезапуск его (кроме того, если у вас есть 2-3 процесса, по крайней мере, только один умрет, поэтому останется как минимум 1-2, и пользователь ничего не почувствует).
  • для мониторинга я лично предпочитаю что-то большее на уровне ОС, например выскочка и Монит.
  • хостинг решение: так как у вас уже есть свой собственный серьезный аппаратный материал, нет необходимости вкладывать деньги в что-то еще. Просто используйте балансировщик нагрузки (возможно, nginx или node-http-proxy) для прокси материал.

посмотреть Хостинг Приложений Узла.

в этом руководстве вы узнаете, как настроить сервер, который может разместить узел.JS-приложения для серверных приложений JavaScript. Сейчас узел.параметры хостинга js сводятся к запуску процессов демона узла, которые разговаривают с веб-сервером. Большинство веб-серверов могут прокси-соединения с другим портом, так что вы сможете использовать Apache или nginx для этого.

здесь есть три вопроса, я думаю.

вопрос 0: "Должен ли я использовать фреймворк для моего приложения узла?"

Вопрос 1: "Как запустить серверы узлов на производственных машинах?"

Вопрос 2:"Как развернуть приложения узла в производство".

на Вопрос 1, мне очень нравится кластер (хотя последняя версия узла имеет что-то вроде этого встроенного, так что вы можете проверить это). У меня был хороший успех с что-то вроде Monit/Upstart для мониторинга событий уровня ОС и убедитесь, что ваши серверы находятся в хорошем состоянии. (Это был мониторинг N кластеров тонких серверов Ruby, но то же самое).

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

A платформа дает вам лучшую обработку ошибок и ловит ошибки, которые будут выходить из обычного узла.js apps. Если вы делаете это без фреймворка, убедитесь, что вы прочитали об обработке ошибок в узле.js.

на Вопрос 2, Я не думаю, что сообщество узлов имеет хороший стандарт развертывания. Вы можете попробовать использовать Ruby'S Capistrano tool (и вот запись в блоге, говорящая о развертывании кластера с Capinstrano).

плохо в Капистрано то, что он делает некоторые предположения, которые могут быть неверными (т. е.: что вы развертываете проект Rails), поэтому вы можете в конечном итоге бороться с фреймворком много.

мое решение для развертывания goto в целом-это Python ткани инструмент, который дает вам средства развертывания и позволяет делать то, что вам нужно сделать.

другой вариант развертывания - "облако", с такими вещами, как Nodester: пусть они об этом позаботятся.

попробуйте использовать pm2 это простой и интуитивно понятный CLI, устанавливаемый через NPM. Просто запустите приложение с PM2 и ваше приложение готово обрабатывать тонну трафика

официальная ссылка PM2

как настроить узел js приложения для производства с помощью pm2

вы можете получить лучшие ответы на ServerFault, но есть описание опыт одного пользователя здесь используя supervisord. Вам нужно будет использовать какой-то наблюдатель процесса, чтобы сохранить node процесс жив, и еще одна распространенная рекомендация, похоже, заключается в обратном прокси-соединении с

ребята из Cloudkick написали отличное решение для этого. Это называется Cast, http://cast-project.org/.

установите cast на вашем сервере и на вашей рабочей станции. Вы запускаете агент приведения на сервере и подписываете свою рабочую станцию с экземпляром приведения серверов. Затем вы можете создавать "пакеты", загружать их на сервер, создавать/обновлять/уничтожать из них, а также запускать/останавливать ваши экземпляры. Cast автоматически перезапустит ваши службы, когда они крушение. Вы также можете удаленно следить за stdout/strerr, а также получать список запущенных экземпляров и PID#s и управлять своими экземплярами/серверами с вашей рабочей станции (не требуется SSHing). Документы немного устарели, но результаты стоят немного дополнительной работы. Все взаимодействия / команды находятся над HTTPS и RESTful API.

до этого я делал все обновления вручную с помощью SCP/SSH. У нас есть supervise сохранение вещи. Мы не оглядывались назад.