Я написал приложение Node.js, я хочу запустить его на одной из наших производственных машин. Это довольно распространенная просьба, но я не могу найти адекватного решения. Нет ли устоявшихся решений для развертывания производственных приложений Node.js?
Приложение простое (<100 LOC), но должно быть очень эффективным, надежным и могло работать непрерывно в течение многих лет без перезапуска. Он будет запущен на большом сайте с десятками подключений в секунду. (приложение не используется в качестве веб-сервера, оно имеет только JSON API)
Вот подходы, которые я рассмотрел, но я все еще не уверен в следующем:
Использование фреймворка (например, Express)
Поскольку приложение должно быть высокопроизводительным и настолько простым, я бы хотел избежать добавления раздутия в виде фреймворка.
Запуск сервера с помощью nohup
Основная проблема здесь связана с обработкой исключений, мы (очевидно) не хотим, чтобы весь сервер падал из-за исключения. Насколько я понимаю, упаковка всего приложения в цикл try {} catch {}
не поможет, потому что интерпретатор Javascript остается в непредсказуемом состоянии после исключения. Это правильно?
Используя что-то вроде Forever
, я установил Forever на нашу машину FreeBSD, и в ней было много ошибок. Это привело к появлению бесконечных процессов, которые нельзя было убить с помощью Forever.Мне пришлось запустить kill -9
, чтобы вернуть мою машину, и я не очень уверен в запуске производственного приложения на Forever. Также кажется, что Upstart (аналогичный инструмент, но более общий) не будет работать во FreeBSD.
Хостинговые решения (например, Heroku, Rackspace, Amazon EC2 и т. Д.)
Это, вероятно, самое простое решение, но у нас уже есть серьезное оборудование для остальных наших веб-серверов. По финансовым соображениям в этом нет смысла.
Разве у этого должно быть какое-то установленное решение? Я что-то упустил?