PM2: управление Node.js процессами
2025-08-28

PM2: управление Node.js процессами

PM2 — это продвинутый процессный менеджер для Node.js, который позволяет запускать, мониторить и масштабировать приложения в продакшене. В этой статье мы разберём, как установить PM2, настроить процессы, использовать кластеризацию, мониторинг и интеграцию с Docker.

1. Что такое PM2

  • Управление процессами – запуск, остановка, перезапуск.
  • Кластеризация – автоматическое распределение запросов по нескольким воркерам.
  • Мониторинг – веб‑интерфейс и API для наблюдения за состоянием.
  • Автозапуск – интеграция с systemd, launchd, upstart и др.

2. Установка

npm i -g pm2

После установки можно проверить версию:

pm2 -v

3. Запуск приложения

pm2 start app.js --name myapp

PM2 создаст процесс с именем myapp. Для просмотра списка процессов:

pm2 list

4. Кластеризация

PM2 автоматически создаёт кластер, если указать -i (или --instances):

pm2 start app.js -i max

max означает количество CPU‑ядер. PM2 распределит воркеры по ядрам.

5. Перезапуск и остановка

pm2 restart myapp
pm2 stop myapp
pm2 delete myapp

6. Мониторинг

PM2 предоставляет веб‑интерфейс:

pm2 monit

или можно подключиться к API: http://localhost:9615. В интерфейсе видны CPU, память, запросы и логи.

7. Логи

pm2 logs myapp

Можно сохранять логи в файл:

pm2 start app.js --log-file logs/myapp.log

8. Автозапуск при загрузке системы

PM2 умеет генерировать конфигурацию для systemd:

pm2 startup systemd

После выполнения команды скопируйте и выполните предложенную команду, затем сохраните состояние:

pm2 save

9. Интеграция с Docker

В Dockerfile можно установить PM2 и запустить приложение:

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm i -g pm2
CMD ["pm2-runtime", "ecosystem.config.js"]

ecosystem.config.js описывает процессы:

module.exports = {
  apps: [
    {
      name: "myapp",
      script: "app.js",
      instances: "max",
      exec_mode: "cluster",
      env: {
        NODE_ENV: "production"
      }
    }
  ]
};

10. Расширенные возможности

  • Watch mode – автоматический перезапуск при изменении файлов: pm2 start app.js --watch.
  • Load balancer – PM2 может выступать как балансировщик нагрузки.
  • Metrics – экспорт метрик в Prometheus: pm2 monit --metrics.

11. Лучшие практики

  1. Разделяйте конфигурацию – храните переменные окружения в .env.
  2. Используйте pm2-runtime в Docker для корректного управления процессами.
  3. Регулярно обновляйте PM2: npm i -g pm2@latest.
  4. Проверяйте логи и настройте алерты.

12. Полезные ссылки

13. Заключение

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