sadrix logoSadriX
Минцифры готовит обязательную регистрацию IMEI смартфонов, купленных за границей
Гайды

Как настроить PM2 для Node.js приложения на VPS: полное руководство

PM2 — менеджер процессов для Node.js, который держит приложение запущенным 24/7, перезапускает его при сбоях и стартует вместе с сервером.

+19 220 просмотров5 мин
+1
Поделиться:TelegramVK

Введение

Если вы разворачиваете 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 startup

PM2 выведет команду с правами 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 myapp

reload перезапускает процессы по очереди, поэтому приложение остаётся доступным. Если вы не используете кластер, всё равно предпочтите 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 и ротацию логов — и ваше приложение будет работать без простоев.

Читайте также

Комментарии

Комментарии доступны только зарегистрированным пользователям. Войти

  • Пока нет комментариев. Будьте первым.