Как настроить PM2 для Node.js приложения на VPS: пошаговое руководство
Узнайте, как обеспечить бесперебойную работу вашего Node.js приложения на сервере с помощью PM2.
Введение
PM2 — это популярный менеджер процессов для Node.js, который позволяет запускать приложения в фоновом режиме, автоматически перезапускать их при сбоях, балансировать нагрузку между ядрами CPU и многое другое. Если вы развертываете Node.js приложение на VPS, PM2 станет незаменимым инструментом для обеспечения стабильности и удобства управления.
В этом руководстве мы рассмотрим полный цикл настройки PM2 на VPS: от установки до тонкой конфигурации, включая автозапуск, кластеризацию, мониторинг и работу с логами. Инструкция подойдет как для новичков, так и для опытных разработчиков, желающих систематизировать знания.
Требования
Прежде чем начать, убедитесь, что у вас есть:
VPS с установленной ОС Linux (Ubuntu 20.04/22.04, Debian 10/11, CentOS 7/8 или аналогичной).
Доступ по SSH с правами пользователя, имеющего sudo (или root).
Установленный Node.js (рекомендуется LTS-версия) и npm. Проверить можно командами
node -vиnpm -v.Базовые навыки работы в командной строке Linux.
Ваше Node.js приложение (или тестовый скрипт) на сервере.
Если Node.js не установлен, установите его через nvm или официальный репозиторий.
Шаг 1: Установка PM2
Самый простой способ установить PM2 — использовать npm с флагом -g для глобальной установки:
npm install -g pm2После установки проверьте версию:
pm2 --versionЕсли команда не найдена, возможно, потребуется добавить путь к глобальным пакетам npm в переменную PATH. Обычно это решается перезаходом в SSH или выполнением source ~/.bashrc.
Шаг 2: Запуск приложения через PM2
Перейдите в директорию с вашим приложением. Если у вас есть файл app.js или server.js, запустите его командой:
pm2 start app.js --name "my-app"Флаг --name задает понятное имя процесса, которое будет отображаться в списке. Если у вас есть npm-скрипт для запуска (например, npm start), используйте:
pm2 start npm --name "my-app" -- startПосле запуска проверьте статус:
pm2 listВы увидите таблицу с процессами, их ID, статусом, использованием CPU и памяти.
Шаг 3: Основные команды управления
PM2 предоставляет удобный набор команд для управления процессами:
pm2 stop <id|name>— остановить процесс.pm2 restart <id|name>— перезапустить.pm2 reload <id|name>— перезагрузить с нулевым простоем (для кластерного режима).pm2 delete <id|name>— удалить процесс из списка.pm2 logs— просмотр логов в реальном времени.pm2 monit— мониторинг ресурсов в реальном времени.pm2 show <id|name>— детальная информация о процессе.
Эти команды помогут вам быстро реагировать на изменения и контролировать состояние приложения.
Шаг 4: Настройка автозапуска при загрузке системы
Чтобы ваше приложение автоматически запускалось после перезагрузки сервера, выполните:
pm2 startupPM2 выведет команду, которую нужно скопировать и выполнить с правами sudo. Обычно это что-то вроде:
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u youruser --hp /home/youruserПосле выполнения команды сохраните текущий список процессов:
pm2 saveТеперь при перезагрузке PM2 восстановит все запущенные процессы.
Шаг 5: Использование файла конфигурации (ecosystem)
Для более сложных проектов удобнее использовать файл конфигурации. Создайте его командой:
pm2 initБудет создан файл ecosystem.config.js. Отредактируйте его под свои нужды. Пример:
module.exports = {
apps: [{
name: 'my-app',
script: './app.js',
instances: 2,
exec_mode: 'cluster',
watch: false,
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}]
};Запустите приложение с этим файлом:
pm2 start ecosystem.config.js --env productionТакой подход позволяет управлять несколькими приложениями и окружениями централизованно.
Шаг 6: Кластерный режим и балансировка нагрузки
PM2 умеет запускать несколько экземпляров приложения на разных ядрах CPU, что повышает производительность и отказоустойчивость. В файле конфигурации установите instances в max или конкретное число, а exec_mode в cluster.
Пример:
module.exports = {
apps: [{
name: 'my-app',
script: './app.js',
instances: 'max',
exec_mode: 'cluster'
}]
};После запуска PM2 автоматически распределит нагрузку между процессами. Для применения изменений используйте pm2 reload ecosystem.config.js.
Шаг 7: Настройка логирования
PM2 по умолчанию собирает логи в ~/.pm2/logs. Вы можете изменить расположение и формат логов в файле конфигурации:
module.exports = {
apps: [{
name: 'my-app',
script: './app.js',
out_file: './logs/out.log',
error_file: './logs/error.log',
merge_logs: true,
log_date_format: 'YYYY-MM-DD HH:mm Z'
}]
};Для удобства можно использовать модуль pm2-logrotate для ротации логов:
pm2 install pm2-logrotateНастройте параметры ротации:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7Шаг 8: Мониторинг и управление через PM2 Plus
PM2 имеет веб-интерфейс PM2 Plus (ранее Keymetrics) для удаленного мониторинга. Подключите его командой:
pm2 link <secret_key> <public_key>Ключи выдаются после регистрации на сайте PM2. Это позволяет отслеживать метрики, получать уведомления и управлять процессами через браузер.
Шаг 9: Обновление приложения без простоя
Для обновления кода используйте pm2 reload. Если приложение в кластерном режиме, PM2 перезапустит процессы по одному, сохраняя доступность. Для этого:
1. Загрузите новый код на сервер (например, через git pull). 2. Выполните pm2 reload ecosystem.config.js.
Если вы не используете файл конфигурации, можно перезапустить конкретный процесс: pm2 reload my-app.
Шаг 10: Управление переменными окружения
PM2 позволяет задавать переменные окружения в файле конфигурации или через CLI. В файле используйте секции env и env_production. При запуске с --env production будут применены переменные из env_production.
Также можно передать переменные при запуске:
NODE_ENV=production pm2 start app.jsШаг 11: Настройка рестарта при изменении файлов (watch mode)
Для разработки удобен режим watch, который перезапускает приложение при изменении файлов:
pm2 start app.js --watchНо в production этот режим лучше отключить, чтобы избежать неожиданных перезапусков. В файле конфигурации установите watch: false.
Шаг 12: Резервное копирование и восстановление списка процессов
PM2 сохраняет список процессов в файле ~/.pm2/dump.pm2. Вы можете вручную сохранить текущее состояние:
pm2 saveИ восстановить:
pm2 resurrectЭто полезно при миграции на другой сервер или после сбоя.
Типичные ошибки
Ошибка прав доступа: при установке глобальных пакетов без sudo могут возникнуть проблемы с правами. Используйте nvm или настройте npm prefix.
Приложение не запускается: проверьте логи
pm2 logs. Часто причина в отсутствии зависимостей или неверном пути к скрипту.Автозапуск не работает: убедитесь, что команда
pm2 startupвыполнена с sudo иpm2 saveвыполнен после настройки процессов.Высокое потребление памяти: используйте
pm2 monitдля выявления утечек. Настройтеmax_memory_restartв конфиге.Конфликт портов: если запущено несколько экземпляров, убедитесь, что приложение использует разные порты или работает через кластерный режим.
FAQ
Вопрос: Можно ли использовать PM2 с TypeScript? Да, но потребуется либо скомпилировать код в JavaScript, либо использовать ts-node. В файле конфигурации укажите interpreter: './node_modules/.bin/ts-node'.
Вопрос: Как обновить PM2? Выполните npm install -g pm2@latest, затем pm2 update для обновления демона.
Вопрос: Что делать, если PM2 не видит приложение после перезагрузки? Проверьте, выполнили ли вы pm2 save после настройки автозапуска. Также убедитесь, что путь к Node.js и PM2 корректны в systemd-юните.
Вопрос: Можно ли запускать несколько приложений под одним пользователем? Да, PM2 поддерживает множество процессов. Используйте разные имена и порты.
Вопрос: Как удалить PM2 полностью? Остановите все процессы (pm2 delete all), удалите автозапуск (pm2 unstartup), затем удалите пакет: npm uninstall -g pm2.
Итог
PM2 — мощный и гибкий инструмент для управления Node.js приложениями на VPS. Он обеспечивает стабильность, автоматический перезапуск, кластеризацию и удобный мониторинг. Следуя этому руководству, вы сможете настроить PM2 с нуля и обеспечить бесперебойную работу вашего приложения. Не забывайте сохранять конфигурацию и регулярно проверять логи, чтобы оперативно реагировать на возможные проблемы.
Читайте также
Комментарии
Комментарии доступны только зарегистрированным пользователям. Войти
- Пока нет комментариев. Будьте первым.



