15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
08.10.2024

Cara Menginstal NVM untuk Node.js di Ubuntu: Panduan Teknis Lengkap

NVM (Node Version Manager) adalah skrip shell yang sesuai dengan POSIX yang menginstal dan mengelola beberapa lingkungan runtime Node.js yang terisolasi pada satu mesin, tanpa memerlukan hak akses root atau memodifikasi jalur sistem secara keseluruhan. Setiap versi Node.js berada di direktorinya sendiri di bawah `~/.nvm/versions/node/`, memberikan isolasi yang lengkap dan bebas konflik antar proyek.

Panduan ini memandu melalui instalasi NVM tingkat produksi di Ubuntu (20.04, 22.04, dan 24.04), mencakup tidak hanya perintah dasar tetapi juga kasus tepi file profil shell, otomatisasi alur kerja `.nvmrc`, migrasi paket global, dan kendala khusus server yang sering diabaikan oleh sebagian besar tutorial.

Mengapa NVM Daripada Package Manager Sistem

Menginstal Node.js melalui `apt` menempatkan satu biner sistem secara keseluruhan di `/usr/bin/node`. Memperbaruinya memengaruhi setiap aplikasi di host secara bersamaan. Pada mesin pengembangan bersama atau VPS yang menjalankan beberapa proyek Node.js, hal ini menciptakan lingkungan yang rapuh dan sulit direproduksi.

NVM mengatasi hal ini dengan menginstal setiap versi Node.js ke dalam direktori ruang pengguna dan memanipulasi `PATH` di tingkat shell. Hasilnya adalah kontrol versi per pengguna, per proyek tanpa dampak pada status paket sistem operasi.

NVM vs. Manajer Versi Node.js Lainnya

FiturNVMfnmVoltan
BahasaShell (Bash/Zsh)RustRustShell
KecepatanSedangSangat cepatSangat cepatCepat
Dukungan `.nvmrc`YaYaSebagianTidak
Penentuan per proyekYaYaYaTidak
Dukungan WindowsTidak (hanya WSL)YaYaTidak
Isolasi paket globalYaYaYaTidak
Overhead startup shell~70ms~5ms~5msMinimal
Kematangan / ekosistemTertinggiTinggiSedangTinggi

NVM tetap menjadi pilihan yang paling banyak didokumentasikan dan didukung ekosistemnya, menjadikannya pilihan default yang paling aman untuk tim dan lingkungan server di mana reproduktibilitas lebih penting daripada kecepatan startup mentah.

Prasyarat

  • Ubuntu 20.04, 22.04, atau 24.04 (desktop atau server)
  • Akun pengguna non-root dengan hak akses `sudo`
  • `curl` atau `wget` terinstal (keduanya tersedia secara default di sebagian besar image Ubuntu)
  • Familiar dasar dengan Bash atau Zsh

Untuk mengonfirmasi shell dan versi Ubuntu Anda sebelum memulai:

“`bash

echo $SHELL

lsb_release -a

“`

Langkah 1: Perbarui Indeks Paket Sistem

Segarkan daftar paket APT untuk memastikan dependensi apa pun yang diselesaikan selama sesi ini sudah terkini:

“`bash

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

“`

Juga konfirmasi bahwa `curl` tersedia:

“`bash

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

“`

Langkah 2: Unduh dan Jalankan Skrip Instalasi NVM

Penginstal NVM resmi dihosting di GitHub. Ini mengkloning repositori NVM ke dalam `~/.nvm` dan menambahkan blok inisialisasi shell yang diperlukan ke file profil Anda.

Opsi A — Menggunakan curl (direkomendasikan):

“`bash

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

“`

Opsi B — Menggunakan wget:

“`bash

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

“`

Selalu verifikasi tag rilis terbaru di halaman rilis GitHub NVM sebelum menjalankan. Ganti `v0.40.1` dengan tag stabil saat ini jika versi yang lebih baru telah diterbitkan.

Apa yang sebenarnya dilakukan penginstal:

  1. Mengkloning repositori NVM ke `~/.nvm`
  2. Mendeteksi shell aktif Anda (`bash`, `zsh`, `ksh`, atau `fish`)
  3. Menambahkan blok inisialisasi berikut ke file profil yang sesuai (`~/.bashrc`, `~/.zshrc`, `~/.profile`, atau `~/.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"

“`

Catatan keamanan: Menyalurkan skrip jarak jauh langsung ke `bash` adalah pola umum tetapi membawa risiko yang melekat. Untuk server produksi atau lingkungan dedicated server, unduh skrip terlebih dahulu, periksa, lalu jalankan:

“`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

“`

Langkah 3: Aktifkan NVM di Sesi Shell Saat Ini

Penginstal memodifikasi profil Anda, tetapi perubahan tersebut hanya berlaku dalam sesi shell baru. Untuk mengaktifkan NVM segera tanpa membuka terminal baru:

Untuk Bash:

“`bash

source ~/.bashrc

“`

Untuk Zsh:

“`bash

source ~/.zshrc

“`

Sourcing manual (berfungsi di shell mana pun):

“`bash

export NVM_DIR="$HOME/.nvm"

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

“`

Kendala Umum: File Profil Tidak Di-source di Shell Non-Interaktif

Di Ubuntu, `~/.bashrc` hanya di-source untuk shell non-login interaktif. Jika Anda terhubung melalui SSH (shell login), Bash membaca `~/.bash_profile` atau `~/.profile` sebagai gantinya. Jika NVM tidak ditemukan setelah login SSH, tambahkan blok sourcing ke `~/.bash_profile`:

“`bash

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

source ~/.bash_profile

“`

Ini adalah salah satu masalah yang paling sering ditemui saat mengonfigurasi NVM di server jarak jauh.

Langkah 4: Verifikasi Instalasi NVM

“`bash

nvm –version

“`

Output yang diharapkan (nomor versi akan bervariasi):

“`

0.40.1

“`

Jika perintah mengembalikan `nvm: command not found`, profil shell tidak di-source dengan benar. Jalankan ulang perintah sourcing dari Langkah 3 dan verifikasi bahwa blok inisialisasi ada di file profil Anda:

“`bash

grep -n 'NVM_DIR' ~/.bashrc

“`

Langkah 5: Instal Node.js Menggunakan NVM

Instal Rilis LTS Terbaru (Direkomendasikan untuk Produksi)

“`bash

nvm install –lts

“`

Flag `–lts` menginstal rilis Long-Term Support terbaru, yang menerima patch keamanan selama 30 bulan. Untuk beban kerja produksi di VPS dengan cPanel atau lingkungan server mana pun, LTS sangat diutamakan daripada rilis saat ini.

Instal Rilis Terbaru Mutlak

“`bash

nvm install node

“`

Instal Versi Tertentu

“`bash

nvm install 20.14.0

“`

Daftar Semua Versi Remote yang Tersedia

“`bash

nvm ls-remote

“`

Untuk memfilter hanya versi LTS:

“`bash

nvm ls-remote –lts

“`

Langkah 6: Verifikasi Versi Node.js dan npm yang Aktif

“`bash

node -v

npm -v

“`

Juga konfirmasi jalur biner untuk memastikan Anda tidak secara tidak sengaja menggunakan instalasi Node.js sistem secara keseluruhan:

“`bash

which node

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

“`

Langkah 7: Kelola Beberapa Versi Node.js

Daftar Semua Versi yang Terinstal Secara Lokal

“`bash

nvm ls

“`

Contoh output:

“`

-> 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)

“`

Beralih Antar Versi

“`bash

nvm use 18.20.3

“`

Perubahan ini hanya berlaku untuk sesi terminal saat ini. Membuka terminal baru akan kembali ke alias default.

Periksa Versi yang Sedang Aktif

“`bash

nvm current

“`

Langkah 8: Tetapkan Versi Node.js Default yang Persisten

Untuk menjadikan versi tertentu sebagai default untuk semua sesi shell baru:

“`bash

nvm alias default 20.14.0

“`

Anda juga dapat membuat alias ke lini rilis daripada versi patch tertentu, yang secara otomatis melacak pembaruan dalam lini tersebut:

“`bash

nvm alias default lts/*

“`

Langkah 9: Otomatiskan Pergantian Versi dengan `.nvmrc`

Ini adalah salah satu fitur NVM yang paling kuat dan jarang digunakan. Tempatkan file `.nvmrc` di root proyek Anda yang berisi versi Node.js yang diperlukan:

“`bash

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

“`

Kemudian, ketika Anda `cd` ke direktori tersebut:

“`bash

nvm use

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

Now using node v20.14.0

“`

Pergantian Versi Otomatis saat Perubahan Direktori

Tambahkan yang berikut ke `~/.bashrc` (atau `~/.zshrc`) Anda untuk memicu `nvm use` secara otomatis setiap kali Anda memasuki direktori yang berisi file `.nvmrc`:

Untuk 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'

“`

Pola ini sangat berharga dalam pipeline CI/CD dan lingkungan tim di mana beberapa pengembang mengerjakan proyek dengan persyaratan runtime yang berbeda.

Langkah 10: Kelola Paket npm Global di Berbagai Versi

Setiap versi Node.js yang diinstal oleh NVM memiliki direktori `node_modules` yang terisolasi untuk paket yang diinstal secara global. Ini berarti alat seperti `pm2`, `yarn`, atau `typescript` yang diinstal secara global di bawah `v18` tidak tersedia di bawah `v20`.

Instal Paket Global untuk Versi yang Aktif

“`bash

npm install -g yarn

npm install -g pm2

npm install -g typescript

“`

Migrasi Paket Global Saat Menginstal Versi Baru

NVM menyediakan flag bawaan untuk menyalin semua paket global dari satu versi ke instalasi baru:

“`bash

nvm install 20.14.0 –reinstall-packages-from=18.20.3

“`

Ini sangat penting saat memutakhirkan versi Node.js di server yang menjalankan proses persisten yang dikelola oleh PM2 atau alat serupa.

Daftar Paket yang Terinstal Secara Global untuk Versi Saat Ini

“`bash

npm list -g –depth=0

“`

Langkah 11: Hapus Instalasi Versi Node.js

Sebelum menghapus instalasi, beralih dari versi yang ingin Anda hapus:

“`bash

nvm use 20.14.0

nvm uninstall 16.20.2

“`

Anda tidak dapat menghapus instalasi versi yang sedang aktif. Mencoba melakukannya akan mengembalikan kesalahan.

Lanjutan: Menggunakan NVM di Lingkungan Non-Interaktif (CI/CD, Cron, Systemd)

NVM bergantung pada file inisialisasi shell yang tidak di-source di shell non-interaktif. Hal ini menyebabkan kesalahan `node: command not found` dalam cron job, file unit systemd, dan beberapa lingkungan CI.

Solusi 1: Gunakan jalur biner lengkap

“`bash

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

“`

Solusi 2: Source NVM secara eksplisit dalam skrip

“`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

“`

Solusi 3: Buat symlink untuk akses sistem secara keseluruhan (gunakan dengan hati-hati)

“`bash

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

“`

Pendekatan ini mengorbankan isolasi per pengguna tetapi terkadang diperlukan untuk layanan systemd yang berjalan sebagai pengguna layanan khusus.

NVM di Shared Hosting vs. VPS vs. Dedicated Server

LingkunganKesesuaian NVMCatatan
Shared hostingTidak didukungTidak ada akses shell; gunakan Node.js yang disediakan platform
[VPS Hosting](https://alexhost.com/id/vps/)Sangat baikAkses shell penuh; isolasi per pengguna berfungsi dengan sempurna
[Dedicated Servers](https://alexhost.com/id/dedicated-servers/)Sangat baikIdeal untuk lingkungan multi-proyek dan runner CI
Docker containersSebagianPertimbangkan menggunakan image Docker Node.js resmi sebagai gantinya
Shared Web HostingTidak didukungTidak ada akses SSH di sebagian besar konfigurasi

Untuk tim yang menjalankan aplikasi Node.js bersama layanan lain, VPS memberi Anda kontrol tingkat shell yang dibutuhkan NVM tanpa overhead pengelolaan perangkat keras fisik.

Daftar Periksa Poin Kunci Praktis

Gunakan ini sebagai referensi deployment dan konfigurasi:

  • Verifikasi jenis shell (`echo $SHELL`) sebelum menginstal — Zsh dan Bash memerlukan file profil yang berbeda
  • Selalu gunakan `–lts` untuk instalasi Node.js produksi; cadangkan `node` (terbaru) untuk pekerjaan eksperimental
  • Commit `.nvmrc` ke version control agar setiap anggota tim dan runner CI menggunakan versi runtime yang identik
  • Gunakan `–reinstall-packages-from` saat memutakhirkan versi Node.js untuk menghindari penginstalan ulang alat global secara manual
  • Source NVM secara eksplisit dalam skrip non-interaktif mana pun (cron, systemd, pipeline CI) — jangan pernah berasumsi profil shell telah dimuat
  • Audit paket global per versi dengan `npm list -g –depth=0` setelah beralih versi untuk mendeteksi dependensi yang hilang lebih awal
  • Sematkan versi eksak di `.nvmrc` (mis., `20.14.0`) daripada alias (mis., `lts`) untuk reproduktibilitas maksimum di produksi
  • Periksa `which node` setelah beralih versi untuk mengonfirmasi Anda tidak secara tidak sengaja menggunakan biner yang terinstal di sistem

Pertanyaan yang Sering Diajukan

Apakah NVM memerlukan akses sudo atau root untuk menginstal Node.js?

Tidak. NVM menginstal segalanya di bawah `~/.nvm` di direktori home pengguna saat ini. Tidak diperlukan hak akses root untuk menginstal atau beralih versi Node.js. Ini adalah salah satu keunggulan utamanya dibandingkan package manager tingkat sistem.

Mengapa `nvm: command not found` muncul setelah instalasi?

Blok inisialisasi NVM telah ditambahkan ke profil shell Anda, tetapi profil belum di-source ulang di sesi saat ini. Jalankan `source ~/.bashrc` (Bash) atau `source ~/.zshrc` (Zsh). Jika kesalahan berlanjut setelah membuka terminal baru, periksa bahwa blok inisialisasi benar-benar ditulis ke file yang benar menggunakan `grep NVM_DIR ~/.bashrc`.

Bisakah beberapa pengguna di server yang sama masing-masing memiliki versi Node.js yang berbeda melalui NVM?

Ya. Karena NVM menginstal ke direktori home setiap pengguna (`~/.nvm`), setiap pengguna mempertahankan serangkaian versi Node.js dan paket global yang sepenuhnya independen. Ini adalah arsitektur yang tepat untuk server multi-tenant.

Apa yang terjadi pada paket npm yang terinstal secara global ketika saya beralih versi Node.js dengan NVM?

Setiap versi Node.js memiliki direktori paket global yang terisolasi. Paket yang diinstal secara global di bawah satu versi tidak terlihat oleh versi lain. Gunakan `nvm install <new-version> –reinstall-packages-from=<old-version>` untuk memigrasikannya secara otomatis.

Apakah NVM cocok untuk menjalankan aplikasi Node.js di produksi di server?

NVM sangat cocok untuk mengelola versi Node.js mana yang digunakan, tetapi untuk manajemen proses di produksi Anda harus memasangkannya dengan manajer proses seperti PM2 atau menggunakan file unit systemd. Pastikan lingkungan non-interaktif tersebut secara eksplisit men-source NVM atau mereferensikan jalur biner lengkap, seperti yang dijelaskan di bagian CI/CD di atas.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai