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

Как использовать PM2 для надёжного развёртывания Node.js

• 5 min read • DevOps • Обновлено 19 Nov 2025
PM2: надёжный деплой для Node.js
PM2: надёжный деплой для Node.js

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

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

PM2 — один из стандартных инструментов в экосистеме Node.js для управления жизненным циклом приложений. Ниже — понятное руководство от установки до рутинного восстановления после инцидента, а также практические чек-листы и шпаргалка по командам.

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

PM2 — это демон-менеджер процессов, который держит Node.js-приложения “в живых” постоянно: автоматически перезапускает упавшие процессы, выполняет zero-downtime reload, собирает логи, предоставляет мониторинг и поддерживает кластеризацию для масштабирования на нескольких ядрах.

Краткое определение: PM2 — системный менеджер процессов для Node.js, который обеспечивает высокую доступность и удобство эксплуатации приложений.

Почему это важно:

  • Автоматический перезапуск процессов при крахе.
  • Централизованное логирование и мониторинг в терминале.
  • Возможность запускать приложения в режиме кластера для лучшей отдачи CPU.
  • Управление приложениями через простые команды и конфигурационные файлы.

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

Перед установкой убедитесь, что Node.js и npm уже установлены на сервере. Проверить версии можно командами:

node -v
npm -v

Установка PM2 глобально через npm:

npm install -g pm2

Если у вашей учётной записи недостаточно прав, добавьте sudo:

sudo npm install -g pm2

Флаг -g означает глобальную установку, чтобы pm2 был доступен в системе для всех проектов. После установки рекомендуется добавить pm2 в автозапуск системы (systemd) — команда ниже создаёт сервис для текущего пользователя:

pm2 startup systemd

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

Запуск Node.js приложений с помощью PM2

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

pm2 start index.js

Если хотите задать имя процесса, используйте опцию –name:

pm2 start index.js --name my-app

Запуск npm-скрипта из package.json через pm2:

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

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

pm2 restart my-app
pm2 stop my-app
pm2 delete my-app

Для zero-downtime reload (перезагрузка процессов без простоя), если приложение поддерживает это:

pm2 reload my-app

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

Просмотр логов одного приложения или всех сразу:

pm2 logs my-app
pm2 logs

Терминальная панель мониторинга CPU/RAM и состояния процессов:

pm2 monit

Просмотр подробной информации и метаданных процесса:

pm2 show my-app

Эти команды полезны для быстрого анализа: количество рестартов, uptime, аргументы запуска, путь к скрипту.

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

  • Установка: npm install -g pm2
  • Запуск скрипта: pm2 start index.js –name my-app
  • Запуск npm-скрипта: pm2 start npm –name my-app – start
  • Перезапуск: pm2 restart my-app
  • К reload без простоя: pm2 reload my-app
  • Остановка: pm2 stop my-app
  • Удаление: pm2 delete my-app
  • Логи: pm2 logs my-app
  • Мониторинг: pm2 monit
  • Информация: pm2 show my-app
  • Сохранить текущий список процессов для автозагрузки: pm2 save
  • Восстановить сохранённый список после перезагрузки: pm2 resurrect

Практическое руководство: развёртывание в продакшн

  1. Подготовка образа/VM: установите Node.js, npm, PM2 и запустите систему контроля версий.
  2. Настройка pm2.config.js (ecosystem file) для управления средами (development/production).
  3. Тестовый запуск и проверка логов.
  4. Настройка systemd автозапуска через pm2 startup и pm2 save.
  5. Мониторинг и алерты на уровне сервиса (Prometheus, Grafana, или внешние APM).

Пример minimal 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"
    }
  }]
}

Runbook — быстрый план при падении приложения

  1. Проверить статус процесса:
pm2 list
pm2 show my-app
  1. Просмотреть последние логи на предмет ошибок:
pm2 logs my-app --lines 200
  1. Если виден явный crash из-за исключения — устранить причину в коде и перезапустить:
pm2 restart my-app
  1. Если приложение потребляет много памяти или CPU — перезапустить в режиме кластера (instances: “max”) и проверить утечки памяти.
  2. Если PM2 сам упал после рестарта сервера — выполнить pm2 resurrect или pm2 start ecosystem.config.js.
  3. При повторяющихся сбоях включите трассировку и профилировщик памяти (heapdump, clinic). Отложите деплой, если возникает регрессия.

Важно: всегда иметь резервный план — скрипт отката или DNS-фоллбек, если один экземпляр сервиса критически важен.

Чек-листы по ролям

DevOps:

  • Настроить pm2 startup и сохранить конфигурацию через pm2 save.
  • Настроить мониторинг и алерты.
  • Автоматизировать деплой (CI/CD) с использованием ecosystem файла.

Разработчик:

  • Обрабатывать uncaughtException и unhandledRejection и логировать контекст.
  • Писать тесты на регрессию производительности.
  • Контролировать потребление памяти.

SRE/Инженер поддержки:

  • Поддерживать runbook и проверять доступность логов.
  • Проводить постмортемы инцидентов и вносить изменения в конфигурацию.

Когда PM2 может не помочь и альтернативы

  • Если причина краха — аппаратный сбой или сбой ОС, PM2 сам по себе не спасёт виртуальную машину. Нужны облачные механизмы восстановления (VM scale sets, автоскейлинг).
  • Для контейнеризованных сред (Docker/Kubernetes) обычно используют встроенные механизмы orchestrator’а (kubernetes deployments, liveness/readiness probes). В контейнерах PM2 добавляет уровень сложности.

Альтернативы: systemd (простая опция для одиночных процессов), Docker + Kubernetes для масштабирования на уровне кластера, PM2 plus / Keymetrics для продвинутого мониторинга.

Диаграмма принятия решения (упрощённая)

flowchart TD
  A[Сервер/Container?] -->|VM| B[Использовать PM2]
  A -->|Container| C[Рассмотреть Docker/K8s]
  B --> D{Нужен кластер?}
  D -->|Да| E[pm2 cluster mode]
  D -->|Нет| F[single instance + systemd]
  C --> G[Использовать liveness/readiness]

Заключение

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

Полезные действия для старта: установить pm2, создать ecosystem.config.js, настроить pm2 startup и pm2 save, интегрировать в CI/CD и подготовить runbook для быстрого реагирования.

Важное: регулярные тесты восстановления и мониторинг — ключ к минимизации простоев.

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

  • Установите PM2 глобально и настройте автозапуск.
  • Используйте ecosystem файл для управления окружениями и кластеризацией.
  • Имейте runbook и чек-листы по ролям.
  • В контейнерах рассмотрите нативные средства оркестрации.

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

Панель мониторинга PM2 с показателями CPU и памяти

Детальная информация процесса PM2: версия, число рестартов, uptime

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро