Що таке PM2 і як управляти процесами Node.js у виробництві?
Управління процесами в Node.js
У виробництві вам потрібно забезпечити, щоб ваш додаток на Node.js:
- Продовжував працювати у разі збою (автоматичний перезапуск)
- Використовував усі ядра ЦП (кластерний режим)
- Міг бути моніторингом (логи, метрики)
- Міг бути розгорнутий без простоїв (перезавантаження без простоїв)
PM2 є найпопулярнішим менеджером процесів для Node.js у виробництві.
Чому не просто node server.js?
| Проблема | Без PM2 | З PM2 |
|---|---|---|
| Збій програми | Процес зупиняється, залишається зупиненим | Автоматично перезапускається |
| Багатоядерність | Використовує лише 1 ядро | Кластерний режим (усі ядра) |
| Логування | Виводиться в stdout, втрачається | Збережені файли логів |
| Розгортання | Простій під час перезапуску | Перезавантаження без простоїв |
| Моніторинг | Немає вбудованого | ЦП, пам'ять, перезапуски |
Як почати з PM2
bash
# Встановити глобально
npm install -g pm2
# Запустити додаток
pm2 start server.js
# Запустити з параметрами
pm2 start server.js --name "my-api" -i max # кластерний режим, усі ЦП
# Переглянути запущені процеси
pm2 list
# Моніторинг в реальному часі
pm2 monit
# Переглянути логи
pm2 logs
pm2 logs my-api --lines 100Файл екосистеми (ecosystem.config.js)
js
module.exports = {
apps: [{
name: 'my-api',
script: 'dist/main.js',
instances: 'max', // Використовувати всі ядра ЦП
exec_mode: 'cluster', // Кластерний режим
max_memory_restart: '1G',
env: {
NODE_ENV: 'production',
PORT: 3000
},
env_staging: {
NODE_ENV: 'staging',
PORT: 3001
}
}]
};bash
# Запустити з файлом екосистеми
pm2 start ecosystem.config.js
# Запустити для конкретного середовища
pm2 start ecosystem.config.js --env stagingОсновні команди PM2
| Команда | Опис |
|---|---|
pm2 start app.js | Запустити |
pm2 stop app | Зупинити |
pm2 restart app | Перезапустити |
pm2 reload app | Перезавантаження без простоїв |
pm2 delete app | Видалити з PM2 |
pm2 list | Переглянути всі процеси |
pm2 monit | Панель моніторингу в реальному часі |
pm2 logs | Переглянути логи |
pm2 save | Зберегти список процесів |
pm2 startup | Автоматичний запуск при завантаженні |
Кластерний режим
Кластерний режим PM2 створює кілька екземплярів вашого додатку, розподіляючи навантаження між ядрами ЦП:
bash
# Запустити 4 екземпляри
pm2 start server.js -i 4
# Запустити на всіх доступних ЦП
pm2 start server.js -i max
# Масштабувати вгору/вниз
pm2 scale my-api +2 # Додати ще 2 екземпляри
pm2 scale my-api 2 # Встановити точно 2Розгортання без простоїв
bash
# Перезавантажити коректно (по одному в кластерному режимі)
pm2 reload my-api
# Робочий процес розгортання
pm2 deploy ecosystem.config.js production setup
pm2 deploy ecosystem.config.js productionАльтернативи PM2
| Інструмент | Сфера використання |
|---|---|
| Docker | Розгортання на основі контейнерів |
| systemd | Управління службами Linux |
| Kubernetes | Оркестрація контейнерів в масштабах |
| nodemon | Тільки для розробки (не для виробництва) |
| forever | Простий менеджер процесів (старий) |
Рекомендація для виробництва: Використовуйте PM2 для простих розгортань на VPS. Для мікросервісів в масштабах розгляньте Docker + Kubernetes з належними перевірками стану та автоматичним масштабуванням.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.