Как настроить PM2 для Node.js приложения на VPS: полное руководство
PM2 — менеджер процессов для Node.js, который держит приложение запущенным 24/7, перезапускает его при сбоях и стартует вместе с сервером.
Введение
Если вы разворачиваете Node.js приложение на VPS, рано или поздно столкнётесь с проблемой: приложение падает, сервер перезагружается, а процесс не поднимается автоматически. Решение — менеджер процессов PM2. Он запускает ваше приложение в фоне, следит за его состоянием, перезапускает при падении и умеет стартовать вместе с системой.
В этом руководстве мы пройдём весь путь: от подготовки VPS до настройки кластеризации, логов и мониторинга. Инструкция подойдёт для Ubuntu/Debian и других популярных дистрибутивов Linux.
Требования
Перед началом убедитесь, что у вас есть:
VPS с Ubuntu 20.04/22.04 или Debian 11/12 (команды легко адаптировать под другие системы).
Доступ по SSH с правами sudo.
Установленный Node.js (рекомендуется LTS-версия) и npm.
Файл приложения (например,
app.jsилиserver.js) с точкой входа.Базовое понимание работы терминала.
Если Node.js ещё не установлен, установите его через NodeSource или nvm. Для простоты будем считать, что node -v и npm -v уже выводят версии.
Шаг 1. Подключение к серверу и обновление системы
Подключитесь к VPS по SSH:
ssh root@ваш_ipОбновите список пакетов и установите обновления:
sudo apt update && sudo apt upgrade -yЭто важно для безопасности и совместимости. После обновления можно переходить к установке PM2.
Шаг 2. Установка PM2 глобально
PM2 устанавливается как глобальный npm-пакет:
sudo npm install -g pm2Проверьте установку:
pm2 --versionЕсли команда не найдена, убедитесь, что глобальные пакеты npm доступны в PATH. Обычно проблема решается перезаходом в SSH или настройкой переменной PATH.
Шаг 3. Подготовка приложения и файла ecosystem
Перейдите в директорию с вашим приложением:
cd /var/www/myappУбедитесь, что зависимости установлены:
npm install --productionСоздайте файл конфигурации ecosystem.config.js — он позволит управлять параметрами запуска:
module.exports = {
apps: [{
name: 'myapp',
script: 'app.js',
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '300M',
env: {
NODE_ENV: 'production',
PORT: 3000
}
}]
};Замените app.js на вашу точку входа, а PORT — на нужный порт. Файл ecosystem удобен тем, что все настройки хранятся в одном месте и легко версионируются.
Шаг 4. Первый запуск приложения через PM2
Запустите приложение с указанием конфигурации:
pm2 start ecosystem.config.jsПроверьте статус:
pm2 statusВы увидите таблицу с именем процесса, статусом online, использованием CPU и памяти. Если статус errored, посмотрите логи (шаг 7).
Шаг 5. Настройка автозапуска при загрузке сервера
Чтобы приложение стартовало после перезагрузки VPS, выполните:
pm2 startupPM2 выведет команду с правами sudo — скопируйте и выполните её. Затем сохраните текущий список процессов:
pm2 saveТеперь при перезагрузке сервера PM2 восстановит все процессы из сохранённого списка. Если вы изменили конфигурацию, не забудьте снова выполнить pm2 save.
Шаг 6. Кластеризация и балансировка нагрузки
Node.js работает в одном потоке, поэтому для использования всех ядер CPU включите кластерный режим. В ecosystem.config.js укажите:
instances: 'max',или конкретное число, например instances: 4. PM2 запустит несколько экземпляров приложения и распределит нагрузку между ними.
Примените изменения:
pm2 reload ecosystem.config.jsКоманда reload выполняет плавный перезапуск без простоя, в отличие от restart.
Шаг 7. Работа с логами
PM2 собирает логи stdout и stderr. Просмотр в реальном времени:
pm2 logs myappПоследние 100 строк:
pm2 logs myapp --lines 100Очистка логов:
pm2 flushЧтобы логи не разрастались, установите модуль ротации:
pm2 install pm2-logrotateНастройте параметры, например максимальный размер файла и количество хранимых файлов:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7Шаг 8. Мониторинг и управление процессами
Основные команды для ежедневной работы:
pm2 list— список процессов.pm2 monit— интерактивный мониторинг CPU и памяти.pm2 show myapp— детальная информация о процессе.pm2 restart myapp— перезапуск.pm2 stop myapp— остановка.pm2 delete myapp— удаление из списка.
Для удалённого мониторинга можно подключить PM2 Plus (pm2.io), но для большинства задач достаточно встроенных средств.
Шаг 9. Обновление приложения без простоя
При деплое новой версии используйте:
git pull
npm install --production
pm2 reload myappreload перезапускает процессы по очереди, поэтому приложение остаётся доступным. Если вы не используете кластер, всё равно предпочтите reload — он минимизирует время недоступности.
Шаг 10. Настройка переменных окружения
Не храните секреты в коде. Передавайте их через ecosystem.config.js или отдельный .env файл. Например, в конфиге:
env: {
NODE_ENV: 'production',
PORT: 3000,
DATABASE_URL: 'postgres://...'
}Либо используйте пакет dotenv в самом приложении. PM2 также поддерживает env_production, env_staging и переключение через --env.
Шаг 11. Интеграция с Nginx и HTTPS
PM2 не занимается веб-сервером. Для проксирования запросов с 80/443 порта на ваше приложение используйте Nginx. Пример конфигурации:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
}
}После настройки Nginx получите SSL-сертификат через Let's Encrypt (certbot). Это обеспечит HTTPS и повысит доверие пользователей.
Шаг 12. Безопасность и права доступа
Не запускайте приложение от root. Создайте отдельного пользователя:
sudo adduser deploy
sudo usermod -aG sudo deployПеренесите файлы приложения в его домашнюю директорию и настройте PM2 от имени этого пользователя. Также ограничьте доступ к порту приложения через firewall (ufw), оставив открытыми только 22, 80 и 443.
Типичные ошибки
1. Приложение не стартует после перезагрузки. Забыли выполнить pm2 save после pm2 startup. 2. Порт уже занят. Другой процесс слушает тот же порт. Проверьте sudo lsof -i :3000. 3. Логи переполняют диск. Не установлен pm2-logrotate. 4. Приложение падает из-за нехватки памяти. Установите max_memory_restart и оптимизируйте код. 5. Изменения в коде не применяются. PM2 не перезапускает процесс автоматически, если watch: false. Используйте pm2 reload. 6. Ошибки прав доступа. Запуск от root или неправильные права на файлы. 7. Кластеризация не работает. Убедитесь, что приложение не хранит состояние в памяти (сессии, кэш) без внешнего хранилища.
FAQ
Вопрос: Чем PM2 отличается от systemd? Ответ: systemd — системный менеджер, PM2 — специализированный инструмент для Node.js с удобным CLI, кластеризацией и мониторингом. Часто их используют вместе: systemd запускает PM2, а PM2 управляет приложениями.
Вопрос: Можно ли использовать PM2 с Docker? Ответ: Да, но обычно в контейнерах PM2 не нужен — Docker сам перезапускает процессы. PM2 полезен, если вы запускаете несколько Node.js приложений в одном контейнере.
Вопрос: Как обновить PM2? Ответ: npm install -g pm2@latest, затем pm2 update для обновления демона.
Вопрос: Где хранятся логи PM2? Ответ: По умолчанию в ~/.pm2/logs/. Путь можно изменить в конфигурации.
Вопрос: Что делать, если pm2 startup не работает? Ответ: Убедитесь, что вы скопировали и выполнили команду с sudo, которую вывел PM2. Иногда требуется вручную создать systemd-юнит.
Итог
PM2 — надёжный помощник для запуска Node.js приложений на VPS. Он обеспечивает автозапуск, перезапуск при сбоях, кластеризацию и удобный мониторинг. Настройка занимает не более 15–20 минут, а вы получаете стабильно работающий сервис. Следуйте шагам, не забывайте про pm2 save и ротацию логов — и ваше приложение будет работать без простоев.
Читайте также
Комментарии
Комментарии доступны только зарегистрированным пользователям. Войти
- Пока нет комментариев. Будьте первым.



