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 và 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é.