Cài đặt NodeJS trên Ubuntu Server 20.04

Giới thiệu

NodeJS là một môi trường JavaScript Runtime Open Source để xây dựng các ứng dụng mạng và phía máy chủ. Nền tảng này có thể chạy trên Linux, macOS, FreeBSD Windows. Mặc dù bạn có thể chạy các ứng dụng Node.js bằng dòng lệnh, nhưng bài viết này sẽ hướng dẫn bạn xuất bản ứng dụng NodeJS ra môi trường Web.

Trong bài viết này, bạn sẽ thiết lập môi trường NodeJS sẵn sàng sản xuất trên một máy chủ Ubuntu 20.04. Máy chủ này sẽ chạy ứng dụng Node.js do PM2 quản lý và cung cấp cho người dùng quyền truy cập an toàn vào ứng dụng thông qua Nginx.

Yêu cầu hệ thống

  • Ubuntu Server
  • Tên miền riêng
  • Nginx

Bước 1. Cài đặt NodeJS

Mình sử dụng NodeSource để cài đặt NodeJS. Phiên bản cài đặt là 16.14.0 LTS

  • Về thư mục chính
cd ~
  • Tải về từ NodeSource
sudo curl -sL https://deb.nodesource.com/setup_16.x -o nodesource_setup.sh
  • Thêm ppa vào
sudo bash nodesource_setup.sh

Chú ý: Cần cài các gói cần thiết như gcc g++ make

sudo apt install gcc g++ make

hoặc cái gói build-essential cho đầy đủ hơn

sudo apt install build-essential
  • Cài đặt
sudo apt install nodejs
  • Sau khi cài đặt, kiểm tra phiên bản xem nodejs đã cài đặt đúng chưa
node -v

Kiểm tra phiên bản npm

npm -v

Bước 2. Tạo ứng dụng NodeJS để test server

tạo file hello.js

nano hello.js

chép nội dung helloword vào =))

const http = require('http');

const hostname = 'localhost';
const port = 6969;

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

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

kiểm tra ứng dụng

node hello.js

mở session khác kiểm tra ứng dụng chạy chưa

curl http://localhost:6969

nếu bạn thấy hiển thị

	Output
	Hello World!

OK, vậy là server đã hoạt động rồi đó. Tắt ứng dụng bằng cách ấn Ctrl + C

Bước 3. Cài đặt PM2 - trình quản lý process cho NodeJS

Tiếp theo, hãy cài đặt PM2, một trình quản lý process cho các ứng dụng Node.js. PM2 làm cho nó có thể ảo hóa các ứng dụng để chúng sẽ chạy ở chế độ nền như một dịch vụ.

  • Sử dụng npm để cài đặt phiên bản mới nhất của PM2
sudo npm install pm2@latest -g

Tùy chọn -g yêu cầu cài đặt npm module globally để nó có sẵn trên toàn hệ thống.

# khởi chạy ứng dụng hello.js
pm2 start hello.js
# đóng ứng dụng hello.js
pm2 stop hello.js
# kiểm tra trạng thái các ứng dụng
pm2 status

Ứng dụng được chạy qua pm2 mặc định sẽ khởi chạy khi pm2 chạy. Thêm pm2 vào ứng dụng khởi chạy cùng hệ thống

pm2 startup systemd #không có sudo

Chương trình sẽ tạo ra 1 đoạn lệnh, copy lệnh này vào cho chạy tiếp

# thay luffy bằng tên user (sau khi chạy lệnh trên sẽ ra đoạn này)
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u luffy --hp /home/luffy

Cấu hình để pm2 được quản lý bởi systemd

sudo systemctl start pm2-luffy

Như ảnh bạn thấy pm2-luffy, đó là tên user của mình. Tùy user của bạn mà nó sẽ khác nhau.

sai thì chạy lệnh này để làm lại

pm2 kill

Một số lệnh của pm2:
Đóng ứng dụng

pm2 stop app_tên_hoặc_id

Khởi động lại ứng

pm2 restart app_tên_hoặc_id

Liệt kê danh sách ứng dụng đang chạy

pm2 list
  • thông tin ứng dụng
pm2 info app_name
  • PM2 process monitor giúp hiển thị tình trạng ứng dụng, CPU cũng như RAM
pm2 monit

Bây giờ ứng dụng Node.js của bạn đang chạy và được quản lý bởi PM2, tiếp theo chúng ta sẽ thiết lập Reverse Proxy để truy cập từ ngoài internet.

Bước 4. Cài nginx làm Reverse Proxy:

Giả sử mình có domain là nodejs.local, tiếp theo chúng ta sẽ cấu hình để khi truy cập vào trang nodejs.local sẽ chuyển hướng về ứng dụng NodeJS chạy trên cổng 6969 (tùy ý)
Tạo file cấu hình nginx

sudo nano /etc/nginx/sites-available/nodejs.local

Chèn nội dung sau, thay 6969 bằng cổng bạn sử dụng

server {
    listen 80;
    listen [::]:80;

    root /home/luffy;

    server_name nodejs.local;

    location / {
        proxy_pass http://localhost:6969;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Tạo liên kết

sudo ln -s /etc/nginx/sites-available/nodejs.local /etc/nginx/sites-enabled/nodejs.local

Kiểm tra và khởi động lại Nginx

sudo nginx -t
sudo systemctl restart nginx

Từ trình duyệt web truy cập nodejs.local, nếu bạn thấy như hình là đã cài thành công NodeJS rồi đó.

Vậy là chúng ta đã cài xong NodeJS để deloy ứng dụng. Đồng thời cấu hình Nginx để làm Reverse Proxy cho phép truy cập từ ngoài vào ứng dụng của bạn.
Nếu có khó khăn hay có câu hỏi gì hãy đừng ngại ngần mà viết comment ở phần bên dưới nhé.