15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
08.10.2024

Як встановити NVM для Node.js на Ubuntu: Повний технічний посібник

NVM (Node Version Manager) — це POSIX-сумісний shell-скрипт, який встановлює та керує кількома ізольованими середовищами виконання Node.js на одній машині без необхідності прав root або зміни системних шляхів. Кожна версія Node.js знаходиться у власному каталозі під `~/.nvm/versions/node/`, забезпечуючи повну ізоляцію між проєктами без конфліктів.

Цей посібник охоплює встановлення NVM виробничого рівня на Ubuntu (20.04, 22.04 та 24.04), включаючи не лише базові команди, але й особливості файлів профілю shell, автоматизацію робочого процесу `.nvmrc`, міграцію глобальних пакетів та специфічні для серверів підводні камені, які більшість посібників оминає.

Чому NVM, а не системний менеджер пакетів

Встановлення Node.js через `apt` розміщує єдиний системний бінарний файл за адресою `/usr/bin/node`. Його оновлення одночасно впливає на всі застосунки на хості. На спільній машині розробки або VPS, що запускає кілька проєктів Node.js, це створює нестабільні середовища, які важко відтворити.

NVM вирішує цю проблему, встановлюючи кожну версію Node.js у каталог користувацького простору та маніпулюючи `PATH` на рівні shell. Результатом є контроль версій для кожного користувача та проєкту без жодного впливу на стан пакетів операційної системи.

NVM проти інших менеджерів версій Node.js

ФункціяNVMfnmVoltan
МоваShell (Bash/Zsh)RustRustShell
ШвидкістьПомірнаДуже високаДуже високаВисока
Підтримка `.nvmrc`ТакТакЧастковаНі
Прив’язка до проєктуТакТакТакНі
Підтримка WindowsНі (лише WSL)ТакТакНі
Ізоляція глобальних пакетівТакТакТакНі
Накладні витрати на запуск shell~70ms~5ms~5msМінімальні
Зрілість / екосистемаНайвищаВисокаСередняВисока

NVM залишається найбільш задокументованим варіантом з найширшою підтримкою екосистеми, що робить його найбезпечнішим вибором за замовчуванням для команд і серверних середовищ, де відтворюваність важливіша за швидкість запуску.

Передумови

  • Ubuntu 20.04, 22.04 або 24.04 (десктоп або сервер)
  • Обліковий запис користувача без прав root з привілеями `sudo`
  • Встановлений `curl` або `wget` (обидва присутні за замовчуванням на більшості образів Ubuntu)
  • Базове знайомство з Bash або Zsh

Щоб підтвердити тип shell та версію Ubuntu перед початком:

“`bash

echo $SHELL

lsb_release -a

“`

Крок 1: Оновлення індексу пакетів системи

Оновіть списки пакетів APT, щоб переконатися, що всі залежності, які вирішуються під час сесії, є актуальними:

“`bash

sudo apt-get update && sudo apt-get upgrade -y

“`

Також переконайтеся, що `curl` доступний:

“`bash

curl –version || sudo apt-get install -y curl

“`

Крок 2: Завантаження та запуск скрипту встановлення NVM

Офіційний інсталятор NVM розміщений на GitHub. Він клонує репозиторій NVM до `~/.nvm` та додає необхідний блок ініціалізації shell до вашого файлу профілю.

Варіант A — Використання curl (рекомендовано):

“`bash

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

“`

Варіант B — Використання wget:

“`bash

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

“`

Завжди перевіряйте останній тег релізу на сторінці релізів NVM на GitHub перед запуском. Замініть `v0.40.1` на поточний стабільний тег, якщо опублікована новіша версія.

Що насправді робить інсталятор:

  1. Клонує репозиторій NVM до `~/.nvm`
  2. Визначає ваш активний shell (`bash`, `zsh`, `ksh` або `fish`)
  3. Додає наступний блок ініціалізації до відповідного файлу профілю (`~/.bashrc`, `~/.zshrc`, `~/.profile` або `~/.bash_profile`)

“`bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"

“`

Примітка щодо безпеки: Передача віддаленого скрипту безпосередньо до `bash` є поширеною практикою, але несе в собі певний ризик. Для виробничих серверів або середовищ виділеного сервера спочатку завантажте скрипт, перевірте його, а потім виконайте:

“`bash

curl -o install_nvm.sh https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh

cat install_nvm.sh # review before running

bash install_nvm.sh

“`

Крок 3: Активація NVM у поточній сесії shell

Інсталятор змінює ваш профіль, але ці зміни набувають чинності лише в нових сесіях shell. Щоб активувати NVM негайно без відкриття нового термінала:

Для Bash:

“`bash

source ~/.bashrc

“`

Для Zsh:

“`bash

source ~/.zshrc

“`

Ручне підключення (працює в будь-якому shell):

“`bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

“`

Поширена проблема: файл профілю не підключається в неінтерактивних shell

В Ubuntu `~/.bashrc` підключається лише для інтерактивних неавторизаційних shell. Якщо ви підключаєтесь через SSH (авторизаційний shell), Bash читає `~/.bash_profile` або `~/.profile` натомість. Якщо NVM не знайдено після входу через SSH, додайте блок підключення до `~/.bash_profile`:

“`bash

echo 'source ~/.bashrc' >> ~/.bash_profile

source ~/.bash_profile

“`

Це одна з найчастіше зустрічаних проблем при налаштуванні NVM на віддалених серверах.

Крок 4: Перевірка встановлення NVM

“`bash

nvm –version

“`

Очікуваний результат (номер версії може відрізнятися):

“`

0.40.1

“`

Якщо команда повертає `nvm: command not found`, профіль shell не був підключений правильно. Повторно виконайте команду підключення з Кроку 3 та перевірте, що блок ініціалізації існує у вашому файлі профілю:

“`bash

grep -n 'NVM_DIR' ~/.bashrc

“`

Крок 5: Встановлення Node.js за допомогою NVM

Встановлення останнього LTS-релізу (рекомендовано для виробництва)

“`bash

nvm install –lts

“`

Прапорець `–lts` встановлює найновіший реліз з довгостроковою підтримкою, який отримує патчі безпеки протягом 30 місяців. Для виробничих навантажень на VPS з cPanel або будь-якому серверному середовищі LTS настійно рекомендується над поточним релізом.

Встановлення абсолютно останнього релізу

“`bash

nvm install node

“`

Встановлення конкретної версії

“`bash

nvm install 20.14.0

“`

Перегляд усіх доступних віддалених версій

“`bash

nvm ls-remote

“`

Щоб відфільтрувати лише LTS-версії:

“`bash

nvm ls-remote –lts

“`

Крок 6: Перевірка активних версій Node.js та npm

“`bash

node -v

npm -v

“`

Також підтвердіть шлях до бінарного файлу, щоб переконатися, що ви випадково не використовуєте системне встановлення Node.js:

“`bash

which node

Expected: /home/<username>/.nvm/versions/node/v20.14.0/bin/node

“`

Крок 7: Керування кількома версіями Node.js

Перегляд усіх локально встановлених версій

“`bash

nvm ls

“`

Приклад виводу:

“`

-> v20.14.0

v18.20.3

v16.20.2

default -> lts/* (-> v20.14.0)

node -> stable (-> v20.14.0) (default)

lts/* -> lts/iron (-> v20.14.0)

“`

Перемикання між версіями

“`bash

nvm use 18.20.3

“`

Ця зміна застосовується лише до поточної сесії термінала. Відкриття нового термінала повертає до версії за замовчуванням.

Перевірка поточної активної версії

“`bash

nvm current

“`

Крок 8: Встановлення постійної версії Node.js за замовчуванням

Щоб зробити конкретну версію версією за замовчуванням для всіх нових сесій shell:

“`bash

nvm alias default 20.14.0

“`

Ви також можете створити псевдонім для лінійки релізів, а не конкретної патч-версії, що автоматично відстежує оновлення в межах цієї лінійки:

“`bash

nvm alias default lts/*

“`

Крок 9: Автоматизація перемикання версій за допомогою `.nvmrc`

Це одна з найпотужніших і найменш використовуваних функцій NVM. Розмістіть файл `.nvmrc` у кореневому каталозі вашого проєкту з необхідною версією Node.js:

“`bash

echo "20.14.0" > /path/to/your/project/.nvmrc

“`

Тоді, коли ви виконуєте `cd` до цього каталогу:

“`bash

nvm use

Found '/path/to/your/project/.nvmrc' with version <20.14.0>

Now using node v20.14.0

“`

Автоматичне перемикання версій при зміні каталогу

Додайте наступне до вашого `~/.bashrc` (або `~/.zshrc`), щоб автоматично запускати `nvm use` щоразу, коли ви входите до каталогу, що містить файл `.nvmrc`:

Для Bash:

“`bash

cdnvm() {

command cd "$@" || return $?

nvm_path="$(nvm_find_up .nvmrc | command tr -d 'n')"

if [[ ! $nvm_path = *[^[:space:]]* ]]; then

declare default_version

default_version="$(nvm version default)"

if [[ $default_version == "N/A" ]]; then

nvm use default

elif [[ $(nvm current) != "$default_version" ]]; then

nvm use default

fi

elif [[ -r "$nvm_path/.nvmrc" && -r "$nvm_path" ]]; then

declare nvm_version

nvm_version=$(<"$nvm_path/.nvmrc")

declare locally_resolved_nvm_version

locally_resolved_nvm_version="$(nvm ls –no-colors "$nvm_version" | command tail -1 | command tr -d '->*' | command tr -d '[:space:]')"

if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then

nvm install "$nvm_version"

elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then

nvm use "$nvm_version"

fi

fi

}

alias cd='cdnvm'

“`

Цей підхід особливо цінний у CI/CD-конвеєрах та командних середовищах, де кілька розробників працюють над проєктами з різними вимогами до середовища виконання.

Крок 10: Керування глобальними пакетами npm між версіями

Кожна версія Node.js, встановлена NVM, має власний ізольований каталог `node_modules` для глобально встановлених пакетів. Це означає, що інструменти на кшталт `pm2`, `yarn` або `typescript`, встановлені глобально під `v18`, недоступні під `v20`.

Встановлення глобального пакету для активної версії

“`bash

npm install -g yarn

npm install -g pm2

npm install -g typescript

“`

Міграція глобальних пакетів при встановленні нової версії

NVM надає вбудований прапорець для копіювання всіх глобальних пакетів з однієї версії до нової інсталяції:

“`bash

nvm install 20.14.0 –reinstall-packages-from=18.20.3

“`

Це критично важливо при оновленні версій Node.js на сервері, що запускає постійні процеси, якими керує PM2 або подібні інструменти.

Перегляд глобально встановлених пакетів для поточної версії

“`bash

npm list -g –depth=0

“`

Крок 11: Видалення версії Node.js

Перед видаленням перейдіть з версії, яку хочете видалити:

“`bash

nvm use 20.14.0

nvm uninstall 16.20.2

“`

Неможливо видалити поточну активну версію. Спроба зробити це повертає помилку.

Додатково: Використання NVM у неінтерактивних середовищах (CI/CD, Cron, Systemd)

NVM покладається на файли ініціалізації shell, які не підключаються в неінтерактивних shell. Це спричиняє помилки `node: command not found` у завданнях cron, файлах юнітів systemd та деяких CI-середовищах.

Рішення 1: Використовуйте повний шлях до бінарного файлу

“`bash

/home/username/.nvm/versions/node/v20.14.0/bin/node /path/to/app.js

“`

Рішення 2: Явно підключайте NVM у скриптах

“`bash

#!/bin/bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

nvm use 20.14.0

node /path/to/app.js

“`

Рішення 3: Створіть символічне посилання для загальносистемного доступу (використовуйте з обережністю)

“`bash

sudo ln -s /home/username/.nvm/versions/node/v20.14.0/bin/node /usr/local/bin/node

“`

Цей підхід жертвує ізоляцією для кожного користувача, але іноді необхідний для служб systemd, що працюють як виділений користувач служби.

NVM на спільному хостингу проти VPS проти виділених серверів

СередовищеПридатність NVMПримітки
Спільний хостингНе підтримуєтьсяНемає доступу до shell; використовуйте Node.js, наданий платформою
[VPS Хостинг](https://alexhost.com/uk/vps/)ВідміннаПовний доступ до shell; ізоляція для кожного користувача працює ідеально
[Виділені сервери](https://alexhost.com/uk/dedicated-servers/)ВідміннаІдеально для багатопроєктних середовищ та CI-раннерів
Docker-контейнериЧастковаРозгляньте використання офіційних Docker-образів Node.js натомість
Спільний веб-хостингНе підтримуєтьсяНемає SSH-доступу в більшості конфігурацій

Для команд, що запускають застосунки Node.js поряд з іншими службами, VPS надає контроль на рівні shell, який вимагає NVM, без накладних витрат на управління фізичним обладнанням.

Практичний контрольний список ключових висновків

Використовуйте це як довідник з розгортання та налаштування:

  • Перевірте тип shell (`echo $SHELL`) перед встановленням — Zsh та Bash вимагають різних файлів профілю
  • Завжди використовуйте `–lts` для виробничих встановлень Node.js; залишайте `node` (latest) для експериментальної роботи
  • Додайте `.nvmrc` до системи контролю версій, щоб кожен член команди та CI-раннер використовували однакову версію середовища виконання
  • Використовуйте `–reinstall-packages-from` при оновленні версій Node.js, щоб уникнути ручного перевстановлення глобальних інструментів
  • Явно підключайте NVM у будь-якому неінтерактивному скрипті (cron, systemd, CI-конвеєри) — ніколи не припускайте, що профіль shell було завантажено
  • Перевіряйте глобальні пакети для кожної версії за допомогою `npm list -g –depth=0` після перемикання версій, щоб завчасно виявити відсутні залежності
  • Вказуйте точні версії у `.nvmrc` (наприклад, `20.14.0`), а не псевдоніми (наприклад, `lts`) для максимальної відтворюваності у виробництві
  • Перевіряйте `which node` після перемикання версій, щоб переконатися, що ви випадково не використовуєте системний бінарний файл

Часті запитання

Чи потребує NVM sudo або root-доступу для встановлення Node.js?

Ні. NVM встановлює все під `~/.nvm` у домашньому каталозі поточного користувача. Для встановлення або перемикання версій Node.js права root не потрібні. Це одна з його основних переваг перед системними менеджерами пакетів.

Чому після встановлення з’являється `nvm: command not found`?

Блок ініціалізації NVM було додано до вашого профілю shell, але профіль не було повторно підключено в поточній сесії. Виконайте `source ~/.bashrc` (Bash) або `source ~/.zshrc` (Zsh). Якщо помилка зберігається після відкриття нового термінала, перевірте, що блок ініціалізації дійсно було записано до правильного файлу за допомогою `grep NVM_DIR ~/.bashrc`.

Чи можуть кілька користувачів на одному сервері мати різні версії Node.js через NVM?

Так. Оскільки NVM встановлюється до домашнього каталогу кожного користувача (`~/.nvm`), кожен користувач підтримує повністю незалежний набір версій Node.js та глобальних пакетів. Це правильна архітектура для багатокористувацьких серверів.

Що відбувається з глобально встановленими пакетами npm, коли я перемикаю версії Node.js за допомогою NVM?

Кожна версія Node.js має власний ізольований каталог глобальних пакетів. Пакети, встановлені глобально під однією версією, не видимі для іншої. Використовуйте `nvm install <new-version> –reinstall-packages-from=<old-version>` для їх автоматичної міграції.

Чи підходить NVM для запуску застосунків Node.js у виробництві на сервері?

NVM добре підходить для керування тим, яка версія Node.js використовується, але для управління процесами у виробництві вам слід поєднувати його з менеджером процесів на кшталт PM2 або використовувати файли юнітів systemd. Переконайтеся, що ці неінтерактивні середовища явно підключають NVM або посилаються на повний шлях до бінарного файлу, як описано у розділі CI/CD вище.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати