Установка Node.js в Ubuntu 20.04 - install с NVM или из репозитория - Академия Selectel

Как установить Node.js в Ubuntu 20.04

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

Вступление

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

  • Причина популярности № 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.

В этом руководстве мы расскажем как установить Node.js на сервер под управлением Ubuntu 20.04.

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

Залогинимся в личном кабинете 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 из исходного кода. В этой инструкции мы его не рассмотрели намеренно, возможно, на эту тему появится отдельная инструкция.