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

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

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

09 189 просмотров5 мин
0
Поделиться:TelegramVK

Введение

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 startup

PM2 выведет команду, которую нужно скопировать и выполнить с правами 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 с нуля и обеспечить бесперебойную работу вашего приложения. Не забывайте сохранять конфигурацию и регулярно проверять логи, чтобы оперативно реагировать на возможные проблемы.

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

Комментарии

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

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