Гид по технологиям

PM2 для Node.js: запуск, мониторинг и развёртывание

5 min read DevOps Обновлено 05 Jan 2026
PM2 для Node.js: запуск, мониторинг и развёртывание
PM2 для Node.js: запуск, мониторинг и развёртывание

Сервер с подключённым монитором, вид корпуса и дисплея

Развёртывание — одна из самых важных и окончательных стадий разработки ПО. Правильная стратегия развёртывания дает лучший опыт пользователям и экономно использует ресурсы. Но этот этап приносит и свои сложности.

Node.js — это среда выполнения JavaScript вне браузера. Она популярна для бэкенда благодаря высокой скорости разработки и богатому экосистему модулей. Но что делать, если ваше Node.js-приложение падает в продакшне? В этой статье вы узнаете, как снизить риск простоев и быстро восстановить сервис.

Что такое PM2 и зачем он нужен

PM2 — это демон-менеджер процессов для Node.js. Коротко:

  • Держит процессы живыми (auto-restart) при падениях.
  • Позволяет перезагружать процессы без даунтайма (reload).
  • Поддерживает кластерный режим и простое масштабирование.
  • Собирает логи и предоставляет встроенный мониторинг.
  • Настраивает автозапуск после перезагрузки сервера.

Определение: демон — это фоновый процесс, который управляет другими процессами и работает независимо от пользовательских сессий.

Важно: без менеджера процессов вам придётся вручную перезапускать сервисы при падении. PM2 автоматизирует это и уменьшает операционные затраты.

Установка PM2 на Linux

Перед установкой убедитесь, что на сервере установлены Node.js и npm. Если вы используете nvm, активируйте нужную версию Node.

Установите PM2 глобально командой:

npm install -g pm2

Флаг -g устанавливает пакет глобально. В зависимости от прав пользователя может понадобиться sudo:

sudo npm install -g pm2

Примечание: если вы используете контейнеры (Docker), установка глобального PM2 не всегда нужна — в контейнере обычно запускают один процесс и используют оркестраторы.

Установка PM2 на Linux через NPM, вывод терминала

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

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

pm2 start index.js

Пример:

pm2 start index.js

(В некоторых окружениях между pm2 и start могут быть неразрывные пробелы; используйте корректную раскладку клавиатуры.)

Чтобы перезапустить приложение после правок:

pm2 restart index.js

Чтобы остановить приложение:

pm2 stop index.js

Чтобы удалить процесс из управления PM2:

pm2 delete index.js

Запуск npm-скрипта через PM2 (например, скрипт start из package.json):

pm2 start npm --name my-app -- start

Чтобы обеспечить восстановление процессов после перезапуска сервера, создайте скрипт автозапуска:

pm2 startup
pm2 save

Команда pm2 startup генерирует команду для вашей системы init/systemd; запустите её от root, если потребуется.

Важно: сохраните текущую конфигурацию командой pm2 save — тогда список процессов восстановится после reboot.

Конфигурация через ecosystem файл

Для более сложных настроек используйте ecosystem.config.js:

module.exports = {
  apps: [{
    name: "my-app",
    script: "index.js",
    instances: "max",
    exec_mode: "cluster",
    env: {
      NODE_ENV: "development"
    },
    env_production: {
      NODE_ENV: "production"
    }
  }]
}

Запуск конфигурации:

pm2 start ecosystem.config.js --env production

ecosystem позволяет задавать переменные окружения, режим исполнения (fork/cluster), количество инстансов и аргументы запуска.

Просмотр логов и статистики

Просмотр логов приложения:

pm2 logs 

Просмотр логов PM2 в терминале

Мониторинг процессов в реальном времени:

pm2 monit

Монитор PM2: графики CPU и памяти в терминале

Просмотр метаданных процесса (версия, рестарты, uptime):

pm2 show 

Информация о приложении в PM2: версия, рестарты, uptime

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

  • pm2 list — список процессов.
  • pm2 flush — очистить все логи.
  • pm2 reload — zero-downtime перезагрузка.

Лог-менеджмент: для вращения логов можно подключить модуль pm2-logrotate:

pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30

Это предотвратит переполнение диска большими лог-файлами.

Масштабирование и кластерный режим

PM2 умеет запускать ваше приложение в нескольких экземплярах и распределять нагрузку между ними (внутренний балансировщик):

pm2 scale my-app +2

В ecosystem.config.js установите instances: “max” для запуска инстансов по количеству CPU.

Для обновлений без даунтайма используйте:

pm2 reload my-app

Reload заменяет процессы по очереди, сохраняя доступность сервиса.

Когда PM2 не подходит

  • В серверлесс-архитектуре (AWS Lambda, Azure Functions) PM2 не нужен.
  • При использовании Kubernetes или другого оркестратора контейнеров управления состоянием внутри контейнера обычно делегируют оркестратору.
  • Для простых локальных скриптов PM2 может быть избыточен.

Альтернативы и дополнения:

  • systemd — проще для одиночных системных сервисов.
  • Docker + Kubernetes — для сложных кластеров и автошкалирования.
  • nodemon — для разработки и автоматической перезагрузки при изменениях кода.
  • forever — более простая альтернатива для автоперезапуска.

Роли и контрольные списки

Для DevOps:

  • Установить PM2 и задать pm2 startup + pm2 save.
  • Настроить лог-вращение (pm2-logrotate).
  • Поддерживать ecosystem.config.js в репозитории.

Для разработчика:

  • Проверять обработку ошибок в приложении (unhandledRejection, uncaughtException).
  • Локально тестировать перезапуск и миграции.

Для SRE:

  • Настроить мониторинг (Prometheus/Datadog) и алертинг по рестартам и нагрузке.
  • Проводить нагрузочное тестирование и проверять масштабирование.

Критерии приёмки

  • Приложение автоматически поднимается после падения.
  • PM2 сохраняет список процессов и восстанавливает их после перезагрузки сервера.
  • Логи агрегируются и не занимают весь диск (включено вращение).
  • Обновление приложения проходит без даунтайма (pm2 reload).

Мини-методология развёртывания

  1. Подготовьте ecosystem.config.js и переменные окружения.
  2. Разверните код на сервере.
  3. Выполните pm2 start или pm2 start ecosystem.config.js.
  4. Проверьте логи pm2 logs и монитор pm2 monit.
  5. Включите автозапуск pm2 startup && pm2 save.
  6. Настройте лог-вращение и мониторинг внешними инструментами.

Безопасность и конфиденциальность

  • Не храните в логах чувствительные персональные данные.
  • Настройте ротацию логов и удалённый сбор логов на централизованный сервер.
  • Запускайте процессы от непривилегированного пользователя, не от root, где это возможно.
  • Контролируйте доступ к серверу и интерфейсам мониторинга.

Юридическая заметка: логи могут содержать персональные данные. Если вы работаете с EU/EEA пользователями, убедитесь, что хранение логов соответствует требованиям GDPR: минимизация данных, контроль доступа и политика удаления.

Шпаргалка команд PM2

pm2 start index.js                 # Запуск приложения
pm2 start npm --name my-app -- start # Запуск npm-скрипта через PM2
pm2 restart my-app                   # Перезапуск
pm2 stop my-app                      # Остановка
pm2 delete my-app                    # Удаление
pm2 list                             # Список процессов
pm2 logs my-app                      # Просмотр логов
pm2 monit                            # Монитор в реальном времени
pm2 show my-app                      # Детали процесса
pm2 save                             # Сохранить текущие процессы (для автозапуска)
pm2 startup                          # Сгенерировать команду автозапуска для systemd/init
pm2 reload my-app                    # Zero-downtime перезагрузка
pm2 scale my-app +2                  # Добавить инстансы
pm2 install pm2-logrotate            # Установить ротацию логов

Часто задаваемые вопросы

Q: Нужен ли PM2 в Docker-контейнере?

A: В простом контейнере лучше запускать один процесс без PM2 и полагаться на Docker/Kubernetes для перезапуска. PM2 может пригодиться в контейнере для запуска нескольких процессов, но это нарушает принцип одного процесса на контейнер.

Q: Как обеспечить zero-downtime при деплое?

A: Используйте pm2 reload или стратегию blue-green с балансировщиком. reload перезапускает процессы по очереди.

Q: Можно ли хранить секреты в ecosystem.config.js?

A: Лучше не хранить секреты в файлах в репозитории. Используйте секреты CI/CD или менеджер секретов и переменные окружения.

Краткое резюме

PM2 — надёжный инструмент для работы с Node.js в традиционных VPS/VM-средах. Он автоматизирует перезапуск, даёт мониторинг и упрощает масштабирование. Однако для контейнерных и серверлесс-архитектур стоит рассмотреть альтернативы.

Важно: проверяйте обработку ошибок в коде, настраивайте ротацию логов и используйте проверенные практики безопасности.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство