cp.lv — VPS, выделенные и облачные серверы

cp.lv (LANGMARKET LLP) — хостинг-провайдер: VPS, выделенные и облачные серверы на NVMe с выбором ОС, полным root-доступом и поддержкой 24/7. Тест-период до оплаты: выделенные серверы — 5 дней, VPS и облако — 5 часов.

Contact Info
LANGMARKET LLP
Rīga, Latvija

+371 00 000 000

Follow Us

Личный кабинет

Язык

Установка Node.js через nvm и запуск приложения через pm2

Установка Node.js через nvm и запуск приложения через pm2

Запустить на сервере одной командой (сначала проверьте содержимое скрипта ниже):

curl -sSL https://cp.lv/scripts/ustanovit-nodejs-pm2.sh | sudo bash

…или через wget:

wget -qO- https://cp.lv/scripts/ustanovit-nodejs-pm2.sh | sudo bash

Содержимое скрипта ustanovit-nodejs-pm2.sh:

#!/usr/bin/env bash
set -e

APP_DIR=/var/www/myapp

# 1. Установка nvm и загрузка в текущую сессию
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

# 2. Node.js LTS по умолчанию
nvm install --lts
nvm use --lts
nvm alias default 'lts/*'

# 3. Зависимости приложения (точные версии из lock-файла)
cd "$APP_DIR"
npm ci --omit=dev

# 4. Установка pm2 и запуск приложения
npm install -g pm2
pm2 start app.js --name myapp

# 5. Автозапуск после перезагрузки сервера
sudo env PATH=$PATH:$(dirname "$(command -v node)") \
  pm2 startup systemd -u "$USER" --hp "$HOME"
pm2 save

pm2 status
echo "Node.js-приложение myapp запущено под pm2."

Чтобы Node.js-приложение работало в продакшене стабильно, его нельзя просто запустить командой node app.js в SSH-сессии — оно остановится при выходе. Нужен менеджер процессов pm2: он держит приложение живым, перезапускает при падении и стартует после перезагрузки сервера. А устанавливать сам Node.js удобно через nvm — тогда легко переключать версии.

Шаг 1. Установка nvm

nvm (Node Version Manager) ставит Node.js без прав root и позволяет держать несколько версий:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc

Проверьте:

nvm --version

Шаг 2. Установка Node.js LTS

Ставьте LTS-версию — она стабильна и получает долгую поддержку:

nvm install --lts
nvm use --lts
nvm alias default lts/*

Проверьте версии:

node -v
npm -v

Шаг 3. Подготовка приложения

Загрузите код (через git clone или rsync), установите зависимости в продакшен-режиме:

cd /var/www/myapp
npm ci --omit=dev

npm ci устанавливает точные версии из package-lock.json — предсказуемее, чем npm install. Проверьте, что приложение запускается:

node app.js

Если увидели «server listening on port 3000» — остановите (Ctrl+C) и переходите к pm2.

Шаг 4. Установка и запуск pm2

Установите pm2 глобально и запустите приложение:

npm install -g pm2
pm2 start app.js --name myapp

Для приложений с точкой входа в package.json:

pm2 start npm --name myapp -- run start

Проверьте статус:

pm2 status
pm2 logs myapp

Шаг 5. Автозапуск после перезагрузки

Чтобы pm2 поднимал приложения при старте сервера, сгенерируйте systemd-сервис и сохраните список процессов:

pm2 startup systemd
# выполните команду, которую pm2 выведет (начинается с sudo env ...)
pm2 save

pm2 save фиксирует текущий набор процессов, а pm2 resurrect восстановит их после перезагрузки автоматически.

Шаг 6. Режим кластера (по желанию)

Если приложение поддерживает несколько воркеров, pm2 может запустить процесс на всех ядрах CPU:

pm2 start app.js --name myapp -i max

Это балансирует нагрузку между ядрами без внешнего балансировщика.

Полезные команды pm2

Задача Команда
Список процессов pm2 list
Перезапуск pm2 restart myapp
Плавная перезагрузка pm2 reload myapp
Остановить pm2 stop myapp
Удалить из pm2 pm2 delete myapp
Мониторинг pm2 monit

Частые вопросы

Зачем nvm, если Node.js есть в apt? Версия в репозитории Ubuntu часто устаревшая. nvm ставит любую нужную версию и позволяет быстро переключаться между проектами с разными требованиями.

Чем отличается pm2 restart от reload? restart перезапускает процесс полностью (с кратким простоем), reload в режиме кластера перезапускает воркеры по очереди без простоя (zero-downtime).

Приложение падает — pm2 его поднимет? Да, pm2 автоматически перезапускает упавший процесс. Настройте --max-restarts и следите за логами, чтобы не зациклить перезапуск при постоянной ошибке.

Как ограничить память процесса? Флаг --max-memory-restart 300M перезапустит приложение при превышении лимита — защита от утечек памяти.

Node.js-приложения выиграют от быстрого CPU и достаточной памяти. Подобрать сервер можно на странице аренда VPS, а для контейнеризированных сборок пригодится VPS для Docker.

Эдгарс Калейс

Эдгарс Калейс

Технический директор (CTO). Проектирует серверную платформу на NVMe и отвечает за производительность и надёжность инфраструктуры.