Hướng dẫn cài đặt Node.js và npm trên Ubuntu (2024)

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

Vì sao developer cần Node.js và npm?

Build xong server Ubuntu rồi, giờ cài gì tiếp? Với dân phát triển web, đặc biệt là JavaScript, câu trả lời gần như chắc chắn là Node.js và npm.

Về cơ bản, Node.js phá vỡ giới hạn của JavaScript. Nó cho phép bạn chạy code JavaScript ngay trên server, không cần đến trình duyệt. Nhờ đó, bạn có thể xây dựng trọn bộ backend, từ API cho ứng dụng di động đến các microservices phức tạp, chỉ với một ngôn ngữ duy nhất. Còn npm (Node Package Manager) là “trợ thủ” đi kèm, một trình quản lý gói giúp bạn cài đặt, chia sẻ và quản lý hàng triệu thư viện code có sẵn.

Tóm lại, bạn sẽ cần chúng để:

  • Xây dựng ứng dụng phía server (ví dụ: API cho app React Native, backend cho trang web Next.js).
  • Dùng các công cụ build frontend hiện đại như Vite, Webpack. Ví dụ, lệnh `npm run build` bạn hay dùng chính là nhờ có Node.js.
  • Chạy các script tự động hóa trong quá trình phát triển.

Bắt đầu với Node.js, bạn sẽ thấy có vài cách cài đặt. Giống như việc chọn `apt` trên Ubuntu hay `yum` trên CentOS, mỗi phương pháp đều có triết lý riêng. Chọn đúng cách ngay từ đầu sẽ giúp bạn tránh được nhiều rắc rối về sau, đặc biệt là các lỗi xung đột phiên bản.

3 cách cài đặt Node.js và npm phổ biến

Dưới đây là 3 phương pháp phổ biến nhất. Mình sẽ đi từ cách linh hoạt nhất được các developer chuyên nghiệp ưa chuộng, đến cách đơn giản nhất nhưng ít được dùng trong môi trường production.

Phương pháp 1: Dùng NVM (Node Version Manager) – Cách linh hoạt nhất

NVM là một công cụ giúp bạn quản lý nhiều phiên bản Node.js trên cùng một máy. Đây là cứu cánh khi bạn làm việc trên nhiều dự án, mỗi dự án lại yêu cầu một phiên bản Node khác nhau. Ví dụ, dự án A chạy trên Node 18 (LTS) trong khi dự án B cần Node 20 để tận dụng tính năng mới. NVM giúp bạn chuyển đổi giữa chúng chỉ bằng một dòng lệnh.

Bước 1: Cài đặt NVM

Mở terminal và chạy script cài đặt của NVM. Bạn nên kiểm tra trang GitHub chính thức của NVM để lấy lệnh cài đặt cho phiên bản mới nhất, vì nó đảm bảo bạn có các bản vá lỗi và tính năng mới nhất.

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

Sau đó, bạn cần khởi động lại terminal hoặc chạy lệnh dưới đây để terminal “nhận diện” được NVM.

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

Bước 2: Kiểm tra cài đặt NVM

Để chắc chắn NVM đã sẵn sàng, gõ lệnh:

command -v nvm

Nếu terminal trả về `nvm`, bạn đã thành công.

Bước 3: Cài đặt phiên bản Node.js

Với NVM, việc cài đặt Node.js cực kỳ trực quan. Để cài phiên bản LTS (Long-Term Support) mới nhất, phiên bản ổn định được khuyến khích cho hầu hết các dự án:

nvm install --lts

Hoặc nếu dự án yêu cầu một phiên bản cụ thể, ví dụ `18.17.0`:

nvm install 18.17.0

Bước 4: Chọn phiên bản Node.js để sử dụng

Sau khi cài, bạn cần “bảo” NVM sử dụng phiên bản đó cho session hiện tại:

nvm use 18.17.0

Để đặt một phiên bản làm mặc định mỗi khi mở terminal mới, dùng lệnh:

nvm alias default 18.17.0

Phương pháp 2: Dùng kho lưu trữ NodeSource PPA

Nếu bạn chỉ cần một phiên bản Node.js cụ thể và không có nhu cầu thay đổi thường xuyên, PPA (Personal Package Archive) từ NodeSource là một lựa chọn đơn giản và hiệu quả.

Bước 1: Thêm NodeSource PPA

Ví dụ, bạn muốn cài đặt Node.js phiên bản 20.x:

# Đảm bảo các gói cần thiết đã được cài đặt
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

# Thêm GPG key của NodeSource để xác thực gói tin
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

# Thêm kho lưu trữ Node.js 20.x vào hệ thống
NODE_MAJOR=20
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

Bước 2: Cài đặt Node.js

Giờ bạn chỉ cần cập nhật lại danh sách gói và cài đặt như bình thường:

sudo apt-get update
sudo apt-get install -y nodejs

Cách này sẽ tự động cài đặt cả `node` và `npm`. Tuy nhiên, nó có một nhược điểm lớn: việc nâng cấp hay chuyển đổi phiên bản Node.js sẽ khá phức tạp so với dùng NVM.

Phương pháp 3: Từ kho mặc định của Ubuntu (Không khuyến khích)

Đây là cách đơn giản nhất, nhưng không được khuyến khích cho môi trường phát triển nghiêm túc. Lý do là phiên bản Node.js trong kho mặc định của Ubuntu thường rất cũ. Ví dụ, trong khi cộng đồng đã chuyển sang Node.js 20.x, kho mặc định có thể vẫn đang cung cấp phiên bản 16.x.

sudo apt update
sudo apt install nodejs npm

Bạn chỉ nên dùng cách này nếu cần một phiên bản Node.js “chữa cháy” cho một tác vụ đơn giản và không quan tâm đến phiên bản cụ thể.

Cấu hình và Tối ưu

Sau khi cài đặt, hãy kiểm tra lại phiên bản để xác nhận mọi thứ đã sẵn sàng:

node -v
npm -v

Khi cài bằng PPA hoặc kho mặc định, bạn sẽ cần quyền `sudo` để cài các gói global (ví dụ: `npm install -g pm2`). Điều này không chỉ bất tiện mà còn tiềm ẩn rủi ro bảo mật. Để khắc phục, bạn nên cấu hình lại thư mục global cho npm.

Bước 1: Tạo một thư mục cho các gói global trong thư mục home

mkdir ~/.npm-global

Bước 2: Cấu hình npm để sử dụng thư mục mới này

npm config set prefix '~/.npm-global'

Bước 3: Thêm thư mục vào biến môi trường PATH

Mở file `~/.profile` (hoặc `~/.bashrc`) và thêm dòng sau vào cuối file:

export PATH=~/.npm-global/bin:$PATH

Sau đó, chạy lệnh `source ~/.profile` để cập nhật PATH cho session hiện tại. Từ giờ, mọi gói bạn cài với cờ `-g` sẽ nằm trong thư mục này và có thể được thực thi từ bất cứ đâu mà không cần `sudo`.

Kiểm tra và giám sát ứng dụng

Cách tốt nhất để kiểm tra là tạo một web server Node.js đơn giản.

Bước 1: Tạo file server.js

Tạo một file tên là `server.js` với nội dung sau. Đây là một web server tối giản, lắng nghe ở cổng 3000 và trả về dòng chữ “Hello ITfromZERO!”.

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello ITfromZERO!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Bước 2: Chạy server

Trong terminal, chạy lệnh: `node server.js`. Bạn sẽ thấy thông báo `Server running at http://127.0.0.1:3000/`.

Bước 3: Kiểm tra kết quả

Mở một terminal khác và dùng `curl` để gửi request:

curl http://127.0.0.1:3000

Nếu bạn nhận được `Hello ITfromZERO!`, xin chúc mừng, Node.js của bạn đã hoạt động hoàn hảo!

Giám sát ứng dụng với PM2

Khi bạn đóng terminal, ứng dụng `node server.js` cũng sẽ tắt theo. Để triển khai thực tế, bạn cần một công cụ quản lý tiến trình (process manager) để giữ cho ứng dụng luôn chạy. PM2 là lựa chọn phổ biến và mạnh mẽ nhất trong hệ sinh thái Node.js.

Cài đặt PM2 (global):

npm install -g pm2

Chạy ứng dụng của bạn với PM2:

pm2 start server.js

Ưu điểm lớn nhất của PM2 là khả năng tự động khởi động lại ứng dụng nếu nó bị crash, đảm bảo uptime cao. Nó còn có thể khởi động cùng hệ thống, giúp ứng dụng của bạn tự chạy mỗi khi server reboot.

Một vài lệnh PM2 hữu ích:

  • `pm2 list`: Liệt kê tất cả các ứng dụng đang được PM2 quản lý.
  • `pm2 stop server`: Dừng ứng dụng (thay `server` bằng tên hoặc id từ `pm2 list`).
  • `pm2 restart server`: Khởi động lại ứng dụng.
  • `pm2 logs`: Xem log real-time của tất cả ứng dụng.
  • `pm2 monit`: Mở dashboard theo dõi CPU và RAM của các ứng dụng.

Giờ thì bạn đã có trong tay bộ công cụ “chuẩn bài” để làm việc với Node.js trên Ubuntu: NVM để linh hoạt chuyển đổi phiên bản và PM2 để ứng dụng chạy ổn định 24/7. Môi trường của bạn đã sẵn sàng cho mọi dự án!

Share: