How to Install Node.js on Ubuntu?
There are 3 ways of installing Node.js on Ubuntu Server.
Installing Node.js with Apt from the Default Repositories
Node.js is a part of default repositories of Ubuntu Server and thus may be installed through Apt from default repositories. In such way, the Node.js service is installed with root
permissions which should be changes for security reasons as soon as possible.
sudo apt update
- update the package lists for upgrades and updates on your Linux systemsudo apt install nodejs
- install Node.js through the apt package managernode -v
- check installed node version (verification, than the node.js was installed)Change permissions of Node.js service
Installing Node Using the Node Version Manager (Recommended)
Node Version Manager (NVM) is a piece of shell code that allows you to easily install and maintain many different independent versions of Node.js, and their associated Node packages.
NodeJs may be installed under any account, see below:
- Check latest verision of NVM on GitHub.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh
- Check NVM codecurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
- install NVM code. The NVM is installed with permissions of a user that processing that request (you). NVM is installed to user account, specifically "~/.bashrc" directory.source ~/.bashrc
- source/reload the script for the option to use itnvm list-remote
- check available Node.js versionsnvm install v18.17.0
- install requested version of Node.js, in this case Node Js v18.17.0. Node.js is installed with permissions of a user that processing that request (you)node -v
- show currently active version
As of Node.js is installed for user account only, it is known under node -v
of current user, but not under any other user nor sudo node -v
. There are 2 ways to make node
command (access to teh Node.js client) available also for other users:
- Symlink
There's possible to create a symlink from
/usr/local/bin/node
to the node client in the user's account$NVM_DIR/versions/node/$(nvm version)/bin/node
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/node" "/usr/local/bin/node"
- Environment variable with adding to user group (recommended)
When creating native services, you can add there a
Environment
variable referring to the Node.js client, see[Unit] Description="My service" Wants=network-online.target After=network-online.target [Service] User=<serviceUser> Group=<serviceUser> Type=simple Restart=always RestartSec=5 WorkingDirectory=/directory/to/service/client Environment="PATH=/home/<userNameWithNodeClient>/.nvm/versions/node/v18.17.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ExecStart=...
Note, to make the
node
accessible, the <serviceUser> must be added into the <userNameWithNodeClient> group.sudo usermod -aG <userNameWithNodeClient> <serviceUser>
- Create user and directory
sudo useradd --system --shell /bin/bash --home /srv/nodejs nodejsusr
sudo mkdir -p /srv/nodejs
sudo chown nodejsusr:nodejsusr /srv/nodejs
- Switch at
nodejsusr
sudo -i -u nodejsusr
- Install and enable NVM
Create bashsrccurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
Open the file with following contenttouch ~/.bashrc && nano ~/.bashrc
Reload shell profileexport NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
Check installed nvm versionsource ~/.bashrc
nvm --version
- Install Node js
nvm list-remote
- check available Node.js versionsnvm install v18.17.0
- install requested version of Node.js, in this case Node Js v18.17.0.
Check installed npm versionnode -v
npm -v
- Retrun back at standard user
exit
- Set shared access for nodejs and npm
sudo ln -s /srv/nodejs/.nvm/versions/node/$(ls /srv/nodejs/.nvm/versions/node)/bin/node /usr/local/bin/node
Shared access for yarnsudo ln -s /srv/nodejs/.nvm/versions/node/$(ls /srv/nodejs/.nvm/versions/node)/bin/npm /usr/local/bin/npm
- Log in to
nodejsusr
and
Reload bashrcsudo -i -u nodejsusr
get corepack yarnsource ~/.bashrc
which yarn
- Return back at standard user
exit
-
Create the symlink to corepack path
sudo ln -s /srv/nodejs/.nvm/versions/node/vXX.X.X/bin/yarn /usr/local/bin/yarn
-
Check corepack availability
yarn --version
- Log in to
Useful commands
nvm ls
- Listing Installed NodeJS Instancesnpm -v
- get version of NPM (When installing a Node.js instance, nvm also installs a compatible npm version.)
Installing next versions
nvm list-remote
- check available Node.js versionsnvm install vXX.XX.X
- install requested version of Node.js. After that, this new version will begin default running node version on Ubuntu Server. The previous version is still available, seenvm ls
.
Switching to selected node version
nvm use XX.X.X
Uninstalling useless versions
nvm uninstall XX.X.X