Возможно, вы знакомы с запуском приложений Node с помощью сценария по умолчанию npm start, который обычно запускает ваш сервер непосредственно на Node. Сначала это может показаться адекватным, но в очень реальном случае, когда ваше приложение сталкивается с ошибкой (например, при запросе несуществующего файла), ваше приложение падает не только для пользователя, который столкнулся с ошибкой, но и для всех… это плохо. . Здесь на помощь приходит PM2.

PM2 — это бесплатный диспетчер процессов производственного уровня с открытым исходным кодом и встроенным балансировщиком нагрузки. Одним из основных преимуществ PM2 является то, что он демонизирует ваши процессы (запускает их в фоновом режиме), перезапускает ваше приложение в случае сбоя, регистрирует любые необработанные исключения, а также автоматически запускает ваше приложение между перезагрузками сервера.

Установка PM2

Если вы используете npm в качестве менеджера пакетов, вы можете установить PM2, введя:

sudo npm install -g pm2

Флаг -g гарантирует, что мы устанавливаем pm2 глобально, чтобы он был доступен для всей системы, а не только в каталоге вашего проекта.

Аналогично, если вы используете пряжу в качестве менеджера пакетов:

sudo yarn global add pm2

Запуск и настройка PM2

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

sudo pm2 start example.js

Затем вы должны увидеть что-то похожее на следующее:

[PM2] Spawning PM2 daemon
[PM2] PM2 Successfully daemonized
[PM2] Starting example.js in fork_mode (1 instance)
[PM2] Done.
┌─────────┬──┬────┬────┬──────┬───────┬──────┬─────────┬──────────┐
│ App name│id│mode│pid │status│restart│uptime│memory   │ watching │
├─────────┼──┼────┼────┼──────┼───────┼──────┼─────────┼──────────┤
│ example │0 │fork│3221│online│0      │5s    │15.276 MB│ disabled │
└─────────┴──┴────┴────┴──────┴───────┴──────┴─────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

Как показано выше, PM2 автоматически назначит имя приложения на основе файла, заданного подкомандой start PM2. Это можно настроить после запуска приложения с помощью подкоманды restart с флагом name, за которым следует любое имя, которое мы хотели бы присвоить приложению:

sudo pm2 restart old-app-name --name new-app-name

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

Вам нужно будет указать, какую систему инициализации вы используете, в нашем случае это systemd:

sudo pm2 startup systemd

В случае успеха вы должны увидеть что-то вроде этого:

[PM2] Generating system init script in  /etc/systemd/system/pm2.service
[PM2] Making script booting at startup...
[PM2] -systemd- Using the command:
      su root -c "pm2 dump && pm2 kill" && su root -c "systemctl daemon-reload && systemctl enable pm2 && systemctl start pm2"
[PM2] Dumping processes
[PM2] Stopping PM2...
[PM2] All processes have been stopped and deleted
[PM2] PM2 stopped
[PM2] Done.

Далее мы хотим сообщить PM2, какие приложения запускать при загрузке. Мы можем сделать это, сохранив текущий список процессов, который в нашем случае будет только нашим «примером» приложения. Чтобы сохранить текущий список процессов, запустите:

sudo pm2 save

Список был сохранен, если вы видите вывод, подобный следующему:

[PM2] Saving current process list...
[PM2] Successfully saved in /home/deployer/.pm2/dump.pm2

Вот и все! Теперь PM2 будет автоматически запускать приложения, указанные в списке сохраненных процессов, между перезагрузками системы без какого-либо дополнительного вмешательства с вашей стороны.

Дополнительные подкоманды

PM2 поставляется с дополнительными подкомандами, которые предоставляют вам различные способы управления и просмотра информации о ваших приложениях.

Перечислите все ваши приложения узла:

sudo pm2 list

Перезапустите процесс, сославшись на него по идентификатору или имени, или перезапустите все процессы:

sudo pm2 restart <id|name|all>

Остановите запуск процесса, оставив его в списке отслеживаемых процессов, сославшись на него по идентификатору или имени, или остановите все процессы:

sudo pm2 stop <id|name|all>

Удалите процесс из списка отслеживаемых процессов PM2, сославшись на него по идентификатору или имени, или удалите все процессы:

sudo pm2 delete <id|name|all>

Отображение журналов, пользовательских метрик и другой информации о ваших процессах:

sudo pm2 monit

Просмотр сведений об отдельном процессе с использованием уникального идентификатора процесса:

sudo pm2 show <id>

Отображение веб-панели инструментов с диагностикой процесса (требуется учетная запись pm.io и изначально включает 14-дневную бесплатную пробную версию):

sudo pm2 plus

Вывод

Это лишь малая часть того, что вы можете сделать с PM2, так что отправляйтесь туда и сами протестируйте его!

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

Спасибо за чтение! Оставьте комментарий или напишите мне, если у вас есть какие-либо вопросы.