Установка Node.js в Ubuntu (Linux) и Windows - install с NVM или из репозитория

Установка Node.js в Ubuntu и Windows

Разбираем пять способов установки Node.js на Ubuntu и установку на Windows.

Вступление

Node.js — основанная на javascript-движке V8 от Google серверная среда выполнения javascript, ставшая в последние годы очень популярной. Первый ее выпуск датируется 2010 годом. За это время Node.js прошла путь от смелого эксперимента к одному из лидеров рынка, который поддерживается Microsoft, Google, IBM, linkedIn, NASA и многими другими.

Она обладает несколькими ключевыми особенностями. Во-первых, Node.js работает на основе асинхронной и событийной модели. Это позволяет ей обрабатывать множество запросов одновременно, не дожидаясь завершения какой-либо операции. Это делает ее подходящей для приложений, требующих интенсивного ввода-вывода.

Во-вторых она может управлять множеством соединений одновременно благодаря своему циклу событий, что делает ее легковесной и эффективной.

Третья особенность — быстрая работа. Node.js построена на движке V8 JavaScript, разработанном Google, который компилирует JavaScript непосредственно в нативный машинный код. Это обеспечивает быструю обработку кода, что позволяет приложениям на Node.js хорошо справляться с высокой нагрузкой.

Кроме того, Node.js поставляется с мощной системой управления пакетами под названием NPM, которая предоставляет доступ к обширному репозиторию библиотек и модулей. Это позволяет разработчикам легко делиться и повторно использовать код, ускоряя процесс разработки.

Node.js также поддерживает кроссплатформенную разработку, позволяя писать приложения на JavaScript, том же языке. Еще одной важной особенностью является масштабируемость. Ее архитектура позволяет обрабатывать большое количество одновременных соединений с минимальным потреблением ресурсов. Кроме того, он поддерживает горизонтальное масштабирование, позволяя добавлять больше серверов или экземпляров по мере необходимости.

  • Причина популярности № 1 — простота в освоении, ведь это все тот же javascript с прикрученными сетевым и файловым модулями. На Node.js пишут огромные распределенные сервисы, крошечные локальные демоны для собственных нужд, системы сборки современного фронтенда зависимы от Node.js.

На Node.js основан Electron — фреймворк, который применяется в разработке десктопных приложений на javascript.

Все это делает javascript, на котором и базируется Node.js, универсальным языком. Конечно, как и у любого универсального решения, у него есть свои недостатки. Он однопоточный, хоть и асинхронный. У него относительно низкая производительность из-за особенностей архитектуры. «Числодробилки» на нем точно писать не стоит. Зато его конек — фронтенд (вне конкуренции по причине отсутствия конкуренции) и быстрое прототипирование сервисов для proof of concept — проверки концепции на жизнеспособность. Часто Node.js-микросервисы используются как прокси для других микросервисов.

  • Причина популярности № 2 — огромное сообщество. Ода из производных огромного сообщества — https://npmjs.com — библиотека готовых модулей для использования в своих проектах. С большой вероятностью задача, которая перед вами стоит, уже решена полностью или частично в модулях из npm. Все опубликованные модули являются open source. 

Управлять зависимостями очень легко с помощью npm. Для того, получить какой-то модуль в свой проект, можно просто сделать:


    npm install packagename 

А дальше подключить его в своем приложении. Npm входит в Node.js, так что, в большинстве случаев установка npm на наш Ubuntu не требуется.

Несмотря на то, что сборки Node.js есть под огромное число платформ, лучшим выбором будет установка Node.js на linux.

Перед установкой — подготовить сервер

Залогинимся в личном кабинете https://my.selectel.ru/login/, нажав на вкладку «Облачная платформа». Там вы сможете создать виртуальный сервер.

Необходимо выбрать зону размещения сервера исходя из его близости к пользователям. Пинг выше, если сервер дальше.

Нажмем «Создать сервер». 

В разделе «Источник» убеждаемся, что выбран образ Ubuntu 20.04.

Конфигурацию можно настроить по своим потребностям.

В разделе «Сеть» стоит выбрать «Подсеть — Плавающий IP-адрес».

В разделе «Доступ» загрузите SSH-ключ и не забудьте сохранить root-пароль. Подробнее об этом рассказано в этой статье.

Теперь можно создать сервер кнопкой «Создать» в самом низу.

Будет отображена страница статуса сервера, надо дождаться индикации ACTIVE вверху справа.

Теперь на вкладке «Порты» можно посмотреть IP-адрес, присвоенный серверу.

Удаление старых версий

Если у вас уже был готовый сервер, то на нем, возможно, присутствуют старые версии. Их стоит удалить во избежание конфликтов, которые бывает крайне сложно отследить в дальнейшем. При создании сервера несколько минут назад, можно сразу начать установку, иначе надо проверить предыдущие инсталляции Node.js:


    dpkg --get-selections | grep node

В ответ на команду могут появиться пакеты/пакет, их можно удалить:


    sudo apt purge nodejs && sudo apt autoremove

Способ №1: NVM

Для управления установленной версией Node.js и внесения изменений необходима утилита NVM (Node Version Manager). Она будет приоритетна для работы на локальной машине разработчика, для dev-систем и тестирования новых фич в экспериментальных версиях. Возможность быстро сменить версию может очень пригодиться во всех этих вариантах. NVM на Ubuntu устанавливается без проблем. Приступим к установке.

Сперва зададим команду сбора списка пакетов из репозиториев:


    sudo apt update

Некоторые версии Node.js нужно собирать, поэтому нужные для этого пакеты важно установить:


    sudo apt install build-essential checkinstall libssl-dev

Если требуется установка или обновление NVM, команда должна выглядеть так:


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

Убедитесь в актуальности устанавливаемых версий. Вся информация есть в официальном репозитории NVM.

Как только установка завершится, необходимо осуществить перезапуск сессии (переподключиться или перелогиниться), или задать команду:


    . .bashrc

После всех исполненных команд нам стала доступна утилита nvm. Перед устанавкой Node.js нужно ознакомиться со списком доступных версий:


    nvm ls-remote

Список большой, так как Node.js существует с 2010 года и какое-то время даже существовала двумя параллельными проектами, которые через какое-то время снова слились в один проект.
Для знакомства с серверной средой Node.js стоит выбрать LTS. Она будет отмечена в списке соответствующим комментарием.


          v14.10.0
       v14.10.1
       v14.11.0
       v14.12.0
       v14.13.0
       v14.13.1
       v14.14.0
       v14.15.0   (LTS: Fermium)
       v14.15.1   (LTS: Fermium)
       v14.15.2   (LTS: Fermium)
       v14.15.3   (LTS: Fermium)
       v14.15.4   (LTS: Fermium)
       v14.15.5   (LTS: Fermium)
       v14.16.0   (LTS: Fermium)
       v14.16.1   (LTS: Fermium)
       v14.17.0   (LTS: Fermium)
       v14.17.1   (LTS: Fermium)
       v14.17.2   (LTS: Fermium)
       v14.17.3   (Latest LTS: Fermium)
        v15.0.0
        v15.0.1
        v15.1.0
        v15.2.0

Вы можете установить любую нужную вам версию, например, нам нужна 14.16.1.


    nvm install 14.16.1

    root@bria:~# nvm install 14.16.1
Downloading and installing node v14.16.1...
Downloading https://nodejs.org/dist/v14.16.1/node-v14.16.1-linux-x64.tar.xz...
################################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v14.16.1 (npm v6.14.12)
Creating default alias: default -> 14.16.1 (-> v14.16.1)


Обратите внимание на строку Now using node v14.16.1 (npm v6.14.12) при установке, эта версия сразу становится активной.


    root@bria:~# nvm install 14.16.1
Downloading and installing node v14.16.1...
Downloading https://nodejs.org/dist/v14.16.1/node-v14.16.1-linux-x64.tar.xz...
################################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v14.16.1 (npm v6.14.12)
Creating default alias: default -> 14.16.1 (-> v14.16.1)
root@bria:~# node -v
v14.16.1
root@bria:~# npm -v
6.14.12
root@bria:~# 
root@bria:~# nvm install 14.16.0
Downloading and installing node v14.16.0...
Downloading https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz...
################################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v14.16.0 (npm v6.14.11)
root@bria:~# node -v
v14.16.0
root@bria:~# nvm install 16.1.0
Downloading and installing node v16.1.0...
Downloading https://nodejs.org/dist/v16.1.0/node-v16.1.0-linux-x64.tar.xz...
################################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v16.1.0 (npm v7.11.2)
root@bria:~# node -v
v16.1.0
root@bria:~# nvm install 15.14.0
Downloading and installing node v15.14.0...
Downloading https://nodejs.org/dist/v15.14.0/node-v15.14.0-linux-x64.tar.xz...
################################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v15.14.0 (npm v7.7.6)
root@bria:~# node -v
v15.14.0

Если вы захотите посмотреть версии, которые установили, это легко сделать с помощью команды: 


    nvm list

Вывод:


    root@bria:~# nvm list
       v14.16.0
       v14.16.1
->     v15.14.0
        v16.1.0
default -> 14.16.1 (-> v14.16.1)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v16.1.0) (default)
stable -> 16.1 (-> v16.1.0) (default)
lts/* -> lts/fermium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.3 (-> N/A)
lts/fermium -> v14.17.3 (-> N/A)

Активная версия подсвечена в самом начале указателем ->

Если вы хотите сделать активной какую-то другую версию, укажите команду:


    nvm use 14.16.1

Проверяем, что у нас получилось:


    node -v
npm -v

Вывод:


    root@bria:~# nvm list
       v14.16.0
       v14.16.1
->     v15.14.0
        v16.1.0
default -> 14.16.1 (-> v14.16.1)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v16.1.0) (default)
stable -> 16.1 (-> v16.1.0) (default)
lts/* -> lts/fermium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.3 (-> N/A)
lts/fermium -> v14.17.3 (-> N/A)
root@bria:~# nvm use 14.16.1
Now using node v14.16.1 (npm v6.14.12)
root@bria:~# node -v
v14.16.1
root@bria:~# npm -v
6.14.12

Перед удалением определенной версии надо сначала ее деактивировать:


    nvm deactivate 14.16.1

А потом удалить командой:


    nvm uninstall 14.16.1

В системе ее больше не видно.


    root@bria:~# nvm deactivate 14.16.1
/root/.nvm/*/bin removed from ${PATH}
root@bria:~# nvm uninstall 14.16.1
Uninstalled node v14.16.1
root@bria:~# nvm list
       v14.16.0
       v15.14.0
        v16.1.0
default -> 14.16.1 (-> N/A)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v16.1.0) (default)
stable -> 16.1 (-> v16.1.0) (default)
lts/* -> lts/fermium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.3 (-> N/A)
lts/fermium -> v14.17.3 (-> N/A)
root@bria:~# node -v

Command 'node' not found, but can be installed with:

apt install nodejs

Способ №2: репозитории Ubuntu

Самый простой способ установки Node.js на Ubuntu 20.04. Использовать в production не рекомендуется, но для знакомства, можно использовать.

Сначала обновляем список пакетов, доступных к установке:


    sudo apt update

Теперь устанавливаем Node.js: 


    sudo apt install nodejs

Устанавливаем npm:


    sudo apt install npm

Проверяем, что у нас получилось:


    node -v
npm -v

Вывод:


    root@bria:~# node -v
v10.19.0
root@bria:~# npm -v
6.14.4

Обратите внимание, что хоть способ установки и прост, версия очень старая. Для боевых целей вам этот вариант не подойдет. Он больше подходит для новичков, которые только начинают знакомиться с Node.js. Об актуальных версиях серверной среды от Google мы рассказали в способах установки NVM и из официального репозитория.

Способ №3: Установка из официального репозитория Node.js (PPA)

Для production-систем лучше использовать официальные репозитории Node.js, они есть для всех популярных linux-дистрибутивов. Репозиторий позволит буквально двумя командами обновиться до актуальной версии вместе со всей системой.


    sudo apt update && sudo apt upgrade 

В этой инструкции вы найдете специальный скрипт. Он поможет с добавлением репозитория в систему:


    curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -

Следующий шаг — выполнение команды установки Node.js:


    sudo apt install -y nodejs

В скрипте также указано, что для сборки некоторых пакетов npm, стоит установить gcc, g++ и make:


    sudo apt-get install gcc g++ make

Проверяем:


    node -v
npm -v

Вывод:


    root@bria:~# node -v
v14.16.1
root@bria:~# npm -v
6.14.12

Способ №4: Установка из бинарных файлов

Этот способ довольно редкий, он применим для уникальных ситуаций. Например, в подготовке embedded, т.е. встроенной системы без доступа к ней снаружи для администрирования.
В остальных случаях — в этому способу стоит относиться с осторожностью во избежание проблем с обновлениями и управлением зависимостями.

Кроме того, такую установку очень сложно отменить, ее следы могут остаться в системе навсегда.

Сперва узнаем, какая архитектура у вашей системы:


    arch

Вывод:


    root@bria:~# arch
x86_64

На официальном сайте нужно выбрать версию и архив для архитектуры.

В нашем случае команда на скачивание:


    wget https://nodejs.org/dist/v14.16.1/node-v14.16.1-linux-x64.tar.gz

Скачанный архив нужно распаковать:


    sudo tar -C /usr/local --strip-components 1 -xf ./node-v14.16.1-linux-x64.tar.gz

И проверить: 


    node -v
npm -v

Вывод:


    root@bria:~# arch
x86_64
root@bria:~# wget https://nodejs.org/dist/v14.16.1/node-v14.16.1-linux-x64.tar.gz
--2021-07-26 03:09:42--  https://nodejs.org/dist/v14.16.1/node-v14.16.1-linux-x64.tar.gz
Resolving nodejs.org (nodejs.org)... 104.20.22.46, 104.20.23.46, 2606:4700:10::6814:162e, ...
Connecting to nodejs.org (nodejs.org)|104.20.22.46|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 33545521 (32M) [application/gzip]
Saving to: ‘node-v14.16.1-linux-x64.tar.gz’

node-v14.16.1-linux-x64.tar.gz                100%[================================================================================================>]  31.99M  8.77MB/s    in 3.7s    

2021-07-26 03:09:46 (8.75 MB/s) - ‘node-v14.16.1-linux-x64.tar.gz’ saved [33545521/33545521]

root@bria:~# tar -C /usr/local --strip-components 1 -xf ./node-v14.16.1-linux-x64.tar.gz
root@bria:~# node -v
v14.16.1
root@bria:~# npm -v
6.14.12

Все готово, дальше — обновить npm

Node.js установлен, пора приступать к его использованию. Перед этим стоит обновить ваш пакетный менеджер npm. Как правило, версия пакетного менеджера довольно устаревшая.

Смотрим, какая версия установлена сейчас:


    npm -v

Вывод:


    root@bria:~# npm -v
6.14.12

Обновляем:


    npm install npm -g

С помощью npm мы устанавливаем npm (обновляем по сути) и делаем мы это глобально (ключ -g). 

Смотрим версию:


    npm -v

Вывод:


    root@bria:~# npm -v
6.14.12
root@bria:~# npm install npm -g
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
/usr/local/bin/npx -> /usr/local/lib/node_modules/npm/bin/npx-cli.js
+ npm@7.20.1
added 68 packages from 26 contributors, removed 244 packages and updated 191 packages in 7.872s
root@bria:~# npm -v
6.14.13
root@bria:~# npm -v
7.20.1

Теперь можем создать первое приложение, чтобы убедиться в работоспособности инсталляции.

Сначала создаем ему директорию:


    mkdir -p ~/helloWorld

Переходим:


    cd ~/helloWorld

Инициализируем проект:


    npm init -y

Без использования ключа -y вам будет задано несколько вопросов о названии проекта, авторе, лицензии, репозитории и так далее. Команда создала в директории файл package.json, который является описанием всего проекта. Там прописываются зависимости, метаинформация, скрипты запуска, тестов и сборки проекта и так далее.


    root@bria:~/helloWorld# npm init -y
Wrote to /root/helloWorld/package.json:

{
  "name": "helloworld",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

Теперь установим какую-нибудь библиотеку из npmjs.com, например, пакет ip. Этот пакет позволяет удобно работать с IP-адресами.


    npm install ip -s

Ключ -s указывает npm сохранить пакет как зависимость в package.json. Без него пакет будет установлен, но не будет запомнен в рамках проекта.

Создадим ваше первое приложение:


    nano index.js

И вставим вот эту программу в файл:


    const ip = require('ip');
console.log("Hello, World!")
console.log(`Server's IP is ${ip.address()}`)

Сохраняем (CTRL + O), закрываем (CTRL + X) nano. Запускаем первую программу:


    node index.js

Будет выведено сообщение:


    root@bria:~/helloWorld# node index.js
Hello, World!
Server's IP is 192.168.0.100

Вот и все, программа сработала.

Заключение

В этой инструкции мы рассмотрели 4 способа установки Node.js на Ubuntu 20.04 и ситуации, когда лучше стоит применять тот или иной вариант. Теперь вы знаете, что устанавливать Node.js — быстро и несложно. 

Есть еще и 5 способ. Он для тех, кто планирует вносить изменения в код. В таких случаях нужен способ установки Node.js из исходного кода. В этой инструкции мы его не рассмотрели намеренно, возможно, на эту тему появится отдельная инструкция.