Рубрики
Без рубрики

Бег приложений узла с навсегда

Автор оригинала: Scott Robinson.

Вступление

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

Есть несколько вещей, которые вам нужно учитывать при запуске вашего приложения (ы).

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

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

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

навсегда Это утилита командной строки для приложений узлов, написанных полностью в JavaScript. Значит упростить вашу жизнь в производственной среде, управляя (запуск, остановка, перезагрузки и т. Д.) и их конфигурациями. Вы можете использовать его на командной строке или программно (через Forever-Monitor ) в пределах вашего узла.

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

Работает под запуском Flatiron Server В качестве процесса демона для управления другими процессами демона, так что если/когда ваш код не удается и сбои, навсегда Будет там, чтобы автоматически перезапустить его и, надеюсь, избегать простоя для ваших пользователей. Бег навсегда С помощью STALION SERVER – это простой способ удерживать утилиту вверх и запустить во время мониторинга для ввода пользователя, а также благодаря Плагин CLI Это было легко для навсегда разработчики делать. Если вы собираетесь создать программу, как навсегда (i.e. Длительный процесс демона, который получает пользовательские команды), то я очень рекомендую вам сделать это таким образом. Это сделает вещи намного проще.

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

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

$ forever start -c python py_script.py

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

Как использовать навсегда

ОК, на важной части, как на самом деле использовать чертовски. Начнем с простой пример, как только начинать и остановить веб-приложение. Для нашего примера мы будем начать и остановить «Hello World» Express Server:

// index.js

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

var server = app.listen(8080);

Установить навсегда с NPM установить навсегда -G и запустите сервер с:

$ forever start -a index.js

Это запустит приложение Express в качестве фонового процесса. Флаг добавляет журналы в файл журнала по умолчанию, расположенными в навсегда Root Directory ( ~/. Iforever По умолчанию на системах Unix). Вы не сможете Начать Приложение без этого флага Если файл журнала уже существует.

Осмотрите рабочий процесс с Список навсегда :

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 start -a --uid myapp index.js

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

$ forever stop myapp

Две аргументы в командной строке не так плох, но она может стать немного многое, когда вы начинаете добавлять аргументы для файлов журналов, разных исполняемых файлов узлов, рабочие каталоги и многое другое. Таким образом, вместо того, чтобы указывать все в командной строке, вы можете использовать файл конфигурации 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

Как видите, вы даже можете сказать навсегда Какую версию узла использовать, что действительно удобно, когда у вас есть несколько приложений на одном сервере, требующих разных версий (например, Fork 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"]
  }
]

Заключение

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

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