Как использовать 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
Практическое руководство: развёртывание в продакшн
- Подготовка образа/VM: установите Node.js, npm, PM2 и запустите систему контроля версий.
- Настройка pm2.config.js (ecosystem file) для управления средами (development/production).
- Тестовый запуск и проверка логов.
- Настройка systemd автозапуска через pm2 startup и pm2 save.
- Мониторинг и алерты на уровне сервиса (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 — быстрый план при падении приложения
- Проверить статус процесса:
pm2 list
pm2 show my-app- Просмотреть последние логи на предмет ошибок:
pm2 logs my-app --lines 200- Если виден явный crash из-за исключения — устранить причину в коде и перезапустить:
pm2 restart my-app- Если приложение потребляет много памяти или CPU — перезапустить в режиме кластера (instances: “max”) и проверить утечки памяти.
- Если PM2 сам упал после рестарта сервера — выполнить pm2 resurrect или pm2 start ecosystem.config.js.
- При повторяющихся сбоях включите трассировку и профилировщик памяти (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 и чек-листы по ролям.
- В контейнерах рассмотрите нативные средства оркестрации.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента