Запуск приложений Node с Forever

Введение Для многих людей запуск вашего кода в производственной среде - это запоздалая мысль, и простое написание кода - вот где настоящая проблема. Хотя по моему опыту это в основном верно, найти надежный и простой способ запуска вашего приложения может быть довольно сложно. При запуске приложения необходимо учитывать несколько моментов. * Куда пойдут вывод / логи? * Что произойдет, если приложение выйдет из строя? * Как мне отслеживать все мои процессы демона? * Как мне доказать

Вступление

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

При запуске приложения необходимо учитывать несколько моментов.

  • Куда пойдут вывод / логи?
  • Что произойдет, если приложение выйдет из строя?
  • Как мне отслеживать все мои процессы демона?
  • Как предоставить конфигурации для каждого процесса?

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

Что такое навсегда?

forever - это утилита командной строки для приложений Node, полностью написанных на JavaScript. Он предназначен для упрощения вашей жизни в производственной среде за счет управления (запуск, остановка, перезапуск и т. Д.) Процессами узлов и их конфигурациями. Вы можете использовать его в командной строке или программно (через forever-monitor ) в своем коде узла.

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

Он работает под управлением сервера Flatiron в качестве процесса-демона для управления другими процессами-демонами, поэтому, если / когда ваш код выйдет из строя и выйдет из строя, forever будет там, чтобы автоматически перезапустить его и, надеюсь, избежать простоев для ваших пользователей. Запуск forever с сервером Флэшерона простым способ сохранить полезность и работает во время мониторинга для пользовательского ввода, и благодарность CLI плагина это было легко для forever разработчиков делать. Если вы собираетесь создать такую программу, как forever (то есть долго работающий процесс-демон, который получает пользовательские команды), я настоятельно рекомендую вам сделать это таким образом. Это значительно упростит жизнь.

Межпроцессное взаимодействие происходит через сокеты, которые обрабатываются высокоуровневой библиотекой nssocket Файлы сокетов, которые позволяют повторно открывать связь между процессами, находятся в [forever.root]/socks . Естественно, сообщения между процессами сериализуются как JSON. Это еще одна полезная библиотека, которую стоит попробовать, если вам когда-нибудь понадобится связь сокетов на основе событий.

Я должен отметить, что одна важная особенность forever (и других подобных инструментов управления процессами) заключается в том, что вы можете использовать его также для приложений, не относящихся к Node, таких как Python, Ruby и т. Д. -c или command (который вы ' увидим позже), давайте вы forever расскажете, как запускать ваше приложение. Используя это, вы можете указать ему использовать для выполнения любой другой интерпретатор, например Python:

 $ forever start -c python py_script.py 

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

Как использовать Forever

Хорошо, перейдем к важной части, как на самом деле использовать эту чертову штуку. Начнем с простого примера, например, запуск и остановка веб-приложения. В нашем примере мы будем запускать и останавливать сервер Express «hello world»:

 // index.js 
 
 var express = require('express'); 
 var app = express(); 
 
 app.get('/', function (req, res) { 
 res.send('Hello World!'); 
 }); 
 
 var server = app.listen(8080); 

Установить forever с помощью npm install forever -g и запустить сервер с помощью:

 $ forever start -a index.js 

Это запустит приложение Express в фоновом режиме. -a добавляет журналы в файл журнала по умолчанию, расположенный в корневом каталоге forever ~/.forever по умолчанию в системах Unix). Вы не сможете start приложение без этого флага, если файл журнала уже существует.

Осмотрите запущенный процесс с помощью forever list :

 info: Forever processes running 
 data: uid command script forever pid id logfile uptime 
 data: [0] moMB /Users/scott/.nvm/versions/node/v4.1.2/bin/node index.js 21389 21390 /Users/scott/.forever/moMB.log 0:0:0:3.345 

Чтобы остановить процесс, просто обратитесь к нему по id ( 21390 ), uid ( moMB ), pid ( 21389 ), index ( 0 ) или имени скрипта ( index.js ):

 $ forever stop index.js 

Хотя это хорошо, могло быть и лучше. index.js не очень уникален для нашего приложения, а PID трудно запомнить, так зачем давать ему лучшее имя? Таким образом, вам не нужно постоянно запускать forever list чтобы получать информацию о текущем процессе.

 $ forever start -a --uid myapp index.js 

Теперь вы можете просто остановить это с помощью:

 $ forever stop myapp 

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

 { 
 // Comments are allowed! 
 "uid": "myapp", 
 "append": true, 
 "watch": true, 
 "script": "index.js", 
 "sourceDir": "/home/scott/myapp", 
 "command": /Users/scott/.nvm/versions/node/v4.1.2/bin/node 
 } 

Предполагая, что этот файл находится в вашем текущем рабочем каталоге и называется forever.json , используйте его следующим образом:

 $ forever start ./forever.json 

Как видите, вы даже можете forever указать, какую версию Node использовать, что действительно удобно, когда у вас есть несколько приложений на одном сервере, которым требуются разные версии (например, вилка io.js).

 [ 
 { 
 // App using Node v0.11.8 
 "uid": "myapp1", 
 "append": true, 
 "watch": true, 
 "script": "index.js", 
 "sourceDir": "/Users/scott/myapp1", 
 "command": "/Users/scott/.nvm/versions/node/v0.11.8/bin/node" 
 }, 
 { 
 // App using io.js 
 "uid": "myapp2", 
 "append": true, 
 "watch": true, 
 "script": "index.js", 
 "sourceDir": "/Users/scott/myapp2", 
 "command": "/Users/scott/.nvm/versions/io.js/v2.2.1/bin/node", 
 "args": ["--port", "8080"] 
 } 
 ] 

Заключение

Есть несколько инструментов, которые помогут вам запускать приложения Node, в первую очередь forever и pm2 . Я пробовал оба и думал, что forever было немного проще в использовании (в основном потому, что он проще и имеет меньше функций / опций, о которых нужно беспокоиться), в то время как pm2 более мощный. Если вы действительно амбициозны, вы можете попробовать pm2 или API, чтобы отслеживать показатели вашего запущенного приложения.

Какие еще интересные конфигурации и варианты использования у вас есть для таких инструментов управления процессами, как forever ? Дайте нам знать об этом в комментариях!

comments powered by Disqus

Содержание