Перейти на сайт
База знаний/Руководства/Установка Node.js на VPS. nvm, npm и деплой приложения

Установка Node.js на VPS. nvm, npm и деплой приложения

Какую версию Node.js выбрать

Версия Статус Рекомендация
Node.js 18 Maintenance LTS Для старых проектов
Node.js 20 Active LTS Рекомендуется для продакшна
Node.js 22 Current Для новых проектов

Всегда используйте LTS-версии на продакшн-серверах, они получают обновления безопасности дольше.

Установка Node.js через nvm (рекомендуется)

nvm (Node Version Manager) позволяет легко устанавливать и переключаться между версиями Node.js.

Установка nvm

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

Установка Node.js

# Установить последнюю LTS-версию
nvm install --lts

# Установить конкретную версию
nvm install 20

# Переключиться между версиями
nvm use 20

# Проверить версию
node -v
npm -v

Установка Node.js из репозитория NodeSource

Альтернативный способ, если не нужно несколько версий:

curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install nodejs -y

Запуск приложения на сервере

Простой запуск

cd /var/www/myapp
npm install
node app.js

Проблема: приложение остановится при закрытии SSH-сессии.

Запуск через PM2 (рекомендуется для продакшна)

PM2 это менеджер процессов, который держит приложение запущенным и перезапускает при падениях.

# Установка PM2
npm install -g pm2

# Запуск приложения
pm2 start app.js --name "myapp"

# Полезные команды
pm2 list              # Список процессов
pm2 logs myapp        # Логи приложения
pm2 restart myapp     # Перезапуск
pm2 stop myapp        # Остановка
pm2 delete myapp      # Удаление

# Автозапуск при перезагрузке сервера
pm2 startup
pm2 save

Проксирование через Nginx

Чтобы приложение было доступно по доменному имени на порту 80/443:

server {
    listen 80;
    server_name myapp.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;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_cache_bypass $http_upgrade;
    }
}

После настройки Nginx добавьте SSL через Certbot:

certbot --nginx -d myapp.com

Полезные инструменты

Инструмент Назначение
PM2 Менеджер процессов, автоперезапуск
nodemon Автоперезапуск при изменении файлов (для разработки)
dotenv Переменные окружения из .env файла
nvm Управление версиями Node.js

Никогда не запускайте Node.js-приложения от имени root. Создайте отдельного пользователя и используйте Nginx для проксирования с порта 80.