Какой способ установки выбрать
Есть три пути: пакет из репозитория Ubuntu, nvm и NodeSource. Пакет Ubuntu часто отстаёт по версии. Nvm ставит Node.js в домашний каталог пользователя и переключает версии: он удобен на рабочем компьютере. На сервере у него есть минус: путь к Node.js привязан к пользователю и оболочке, и службе автозапуска проще потерять его.
Основной способ здесь NodeSource. Он ставит Node.js системным пакетом в /usr/bin, обновления приходят через apt, а служба systemd находит программу без доп. настроек. Nodejs.org в разделе загрузки тоже предлагает nvm и другие способы, но на сервере для одного приложения проще системный пакет.
LTS (Long Term Support) это версия с долгой поддержкой. Для сервера берите именно её, а не последнюю «текущую»: список выпусков и сроки поддержки лежат на странице previous-releases сайта nodejs.org.
Установка Node.js LTS
sudo apt update
sudo apt install -y ca-certificates curl
curl -fsSL https://deb.nodesource.com/setup_lts.x -o nodesource_setup.sh
less nodesource_setup.sh
sudo -E bash nodesource_setup.sh
sudo apt install -y nodejs
Первая команда обновляет список пакетов. Вторая ставит curl и сертификаты, если их нет. Третья скачивает установочный скрипт NodeSource в файл. Четвёртая открывает его для чтения, выход клавишей q: так вы видите, что запускаете. Пятая выполняет скрипт, он подключает репозиторий. Последняя ставит сам Node.js вместе с npm.
Проверьте версии:
node -v
npm -v
Команды печатают версии Node.js и менеджера пакетов npm. Если нужна конкретная мажорная версия, а не текущая LTS, в документации NodeSource есть скрипты вида setup_NN.x, где NN номер версии.
Простое приложение
Создайте каталог и файл:
mkdir -p ~/myapp
nano ~/myapp/app.js
Первая команда создаёт каталог в домашней папке, вторая открывает файл в nano. Вставьте:
const http = require('http');
http.createServer((req, res) => {
res.end('Работает\n');
}).listen(3000, '127.0.0.1');
Приложение отвечает на запросы по порту 3000 и слушает только локальный адрес. Снаружи его покажет обратный прокси, например Nginx. Если приложение будет использовать порт напрямую, этот порт придётся открыть в файрволе.
Запустите вручную для проверки:
node ~/myapp/app.js
В другом окне выполните curl http://127.0.0.1:3000, ответ: Работает. В первом окне остановите приложение через Ctrl+C. Запускать так на постоянной основе нельзя: процесс умрёт при закрытии терминала и не поднимется после сбоя.
Установка PM2
PM2 это менеджер процессов для Node.js. Он запускает приложение в фоне, перезапускает его при падении и ведёт журналы.
sudo npm install -g pm2
pm2 -v
Первая команда ставит PM2 глобально. Вторая печатает версию. Запускайте приложение под обычным пользователем, а не root: при ошибке в коде сбой не затронет всю систему.
Запуск приложения
cd ~/myapp
pm2 start app.js --name myapp
pm2 list
pm2 start запускает файл в фоне и даёт процессу имя myapp. pm2 list выводит таблицу процессов: имя, статус (online), число перезапусков, использование процессора и памяти. Остановить и убрать процесс из списка: pm2 stop myapp и pm2 delete myapp.
Автозапуск после перезагрузки
Без этого шага после перезагрузки сервера приложение не запустится.
pm2 startup systemd
Команда не включает автозапуск сама, а печатает готовую строку, которую нужно выполнить с sudo. Скопируйте эту строку целиком и запустите. Она создаёт службу systemd pm2-имяпользователя. Затем сохраните текущий список процессов:
pm2 save
pm2 save записывает список запущенных процессов, и PM2 восстановит именно его после загрузки системы. После каждого добавления нового приложения повторяйте pm2 save. Проверить можно перезагрузкой: sudo reboot, затем pm2 list после входа. О службах systemd читайте в статье журналы и службы systemd.
Логи
pm2 logs myapp
pm2 logs myapp --lines 100
pm2 flush
Первая команда выводит журнал приложения в реальном времени: и обычный вывод, и ошибки. Выход через Ctrl+C. Вторая показывает последние 100 строк. pm2 flush очищает файлы логов. Сами файлы лежат в каталоге ~/.pm2/logs/.
Файлы растут без ограничения. Чтобы они не занимали диск, установите модуль ротации:
pm2 install pm2-logrotate
Команда ставит модуль, который периодически разбивает и удаляет старые журналы. Настройки по умолчанию описаны в документации PM2.
Обновление приложения
Порядок действий, если код лежит в git:
cd ~/myapp
git pull
npm install --omit=dev
pm2 restart myapp
git pull забирает свежий код. npm install --omit=dev ставит зависимости без пакетов для разработки. pm2 restart перезапускает процесс с новым кодом. Если зависимости менялись, сначала перезапустите, потом смотрите pm2 logs myapp на ошибки. Для приложений, которые поддерживают плавный перезапуск, есть pm2 reload myapp: при режиме cluster он не обрывает соединения.
Переменные окружения (токены, пароли) не храните в коде. PM2 умеет читать файл конфигурации ecosystem.config.js, его создаёт команда pm2 init simple. Если на сервере живёт Telegram-бот, подберите ресурсы по статье сервер для Telegram-бота.
Что делать дальше
Поставьте Nginx и сертификат, чтобы приложение открывалось по домену, и настройте резервные копии. Подобрать сервер под Node.js можно на странице подбора VPS: тарифы от 140 ₽ в месяц, цены сверены 19 октября 2026 года.
