Развертывание Node.js приложения на VPS с PM2
В этом руководстве мы рассмотрим процесс развёртывания Node.js приложения на VPS сервере с использованием менеджера процессов PM2 для обеспечения надежности, автоматического перезапуска и масштабирования приложений.
Что такое PM2 и почему его стоит использовать
PM2 (Process Manager 2) — это продвинутый менеджер процессов для Node.js приложений, который предоставляет:
- Автоматический перезапуск при краше приложения
- Балансировку нагрузки через кластеризацию
- Мониторинг процессов в реальном времени
- Управление логами
- Автоматический запуск при старте системы
- Развертывание без простоя (zero-downtime deployment)
Предварительные требования
- VPS сервер с Linux (как пример, используется Ubuntu 24)
- Права root
- Базовые знания командной строки Linux
- Проект на Node.js для деплоя
Установка Node.js и npm
Для начала установим Node.js и npm с использованием менеджера версий NVM (Node Version Manager), который позволяет легко переключаться между разными версиями Node.js.
# Установка curl, если его нет
sudo apt update
sudo apt install curl
# Установка NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash
source ~/.bashrc
# Проверяем, ли NVM установился успешно
nvm --version
# Установка последней LTS версии Node.js
nvm install --lts
# Проверка версий Node.js и npm
node --version
npm --version
ПОДСКАЗКА
Рекомендуется использовать LTS (Long Term Support) версии Node.js для критических важных приложений, так как на данных версиях предоставляется долгосрочная поддержка и стабильность.
Установка PM2
Давайте установим PM2 глобально для удобства:
npm install -g pm2
Подготовка приложения Node.js
Клонирование проекта из репозитория
Склонируйте ваш проект из репозитория Git или загрузите его на сервер вручную:
# Клонирование проекта
git clone https://github.com/username/your-project.git
cd your-project
# Установка dependencies
npm install
Настройка и запуск приложения с PM2
Базовый запуск
Самый простой способ запустить приложение с PM2:
pm2 start app.js --name "my-app"
Где my-app
- название вашего приложения, по которому вы сможете обращаться к PM2 для дальнейшего управления.
Запуск в кластерном режиме
Для использования нескольких ядер процессора и обеспечения высокой доступности вы можете воспользоваться следующей командой:
# Автоматически создаст оптимальное количество процессов в зависимости от числа ядер CPU
pm2 start app.js --name "my-app" -i max
Обратите внимание: ваше приложение должно поддерживать кластеризацию.
Создание файла конфигурации PM2
Для более детальной настройки, давайте создадим файл конфигурации ecosystem.config.js
:
cat > ecosystem.config.js << 'EOL'
module.exports = {
apps: [{
name: "my-app",
script: "app.js",
instances: "max",
exec_mode: "cluster",
autorestart: true,
watch: false,
max_memory_restart: "200M",
env: {
NODE_ENV: "development",
},
env_production: {
NODE_ENV: "production",
PORT: 3000
}
}]
}
EOL
Запуск приложения с помощью файла конфигурации:
pm2 start ecosystem.config.js --env production
Настройка автозапуска PM2 при перезагрузке сервера
Чтобы приложение автоматически запускалось при перезагрузке сервера, выполните следующую команду:
pm2 startup
Выполните команду, которую PM2 выведет в консоль.
После этого сохраните текущий список процессов:
pm2 save
Теперь ваше приложение (или приложения) будет запускаться даже после перезагрузки сервера без ручного вмешательства.
Настройка Nginx как обратного прокси
Для предоставления публичного доступа к приложению (например, через домен), нужно настроить Nginx:
# Установка Nginx
sudo apt install nginx
# Создание конфигурации сайта
sudo nano /etc/nginx/sites-available/my-app
Добавьте следующую конфигурацию:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Активируйте конфигурацию и перезапустите Nginx:
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
ПОДСКАЗКА
После настройки Nginx, рекомендуется настроить SSL-сертификат с помощью Let's Encrypt для безопасного соединения. Инструкцию можно найти в нашей статье о настройке Let's Encrypt.
Базовые команды PM2
Мониторинг процессов
# Мониторинг в режиме реального времени
pm2 monit
# Просмотр списка процессов
pm2 list
# Детальная информация о процессе
pm2 show my-app
Управление процессами
# Перезапуск приложения
pm2 restart my-app
# Остановка приложения
pm2 stop my-app
# Удаление процесса из списка PM2
pm2 delete my-app
Работа с логами
# Просмотр общих логов, от всех приложений
pm2 logs
# Просмотр логов конкретного приложения
pm2 logs my-app
# Просмотр последних 200 строк логов
pm2 logs --lines 200
Обновление приложения без простоя (Zero-Downtime Deployment)
Для обновления приложения без прерывания работы:
- Обновите код (например, через git pull)
- Выполните перезапуск приложения:
pm2 reload my-app
Мониторинг и статистика
PM2 предоставляет базовый бесплатный мониторинг, но для критически важных приложений рекомендуется настроить более продвинутый мониторинг:
PM2 Plus (платное решение)
pm2 plus
Интеграция с Prometheus + Grafana
Установите pm2-prometheus:
npm install -g pm2-prometheus
pm2 install pm2-prometheus
Затем настройте Prometheus для сбора метрик с endpoint /metrics
и Grafana для визуализации данных.
Устранение проблем
Приложение не запускается
Проверьте логи:
pm2 logs my-app
Общие причины:
- Ошибки в коде приложения
- Порт уже используется
- Недостаточно прав доступа к файлам
- Зависимости не установлены
Приложение падает при высокой нагрузке
- Проверьте использование памяти:
pm2 monit
- Возможно, стоит увеличить лимит памяти в конфигурации
- Рассмотрите возможность масштабирования приложения сразу на несколько серверов
- Увеличьте тариф вашего сервера, если не хватает ресурсов
Проблема: PM2 не перезапускается после перезагрузки сервера
Повторно настройте автозапуск:
pm2 unstartup
pm2 startup
pm2 save
Заключение
Правильная настройка Node.js приложения с PM2 на VPS обеспечивает надежность, отказоустойчивость и лёгкость в управлении.
PM2 предоставляет множество инструментов для мониторинга и управления процессами, что делает его незаменимым для ваших проектов.
Для получения дополнительной помощи по настройке вашего Node.js приложения на нашем VPS, обратитесь в службу поддержки.