Установка 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.