Cách cài đặt Node.js trên Debian 10 và cấu hình Nginx làm Máy chủ Proxy Frontend

theanh

Administrator
Nhân viên
Node.js là một nền tảng JavaScript miễn phí và mã nguồn mở có thể được sử dụng để phục vụ nội dung phía máy chủ động và phản hồi. Nó được xây dựng trên công cụ JavaScript V8 của Chrome và có thể thực thi mã JavaScript bên ngoài trình duyệt web. Nó có thể chạy trên một số hệ điều hành bao gồm Linux, FreeBSD, Windows và macOS. Node.js cũng hoạt động trên các máy chủ web khác như Apache và Nginx.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách cài đặt và cấu hình Node.js để xử lý các yêu cầu phụ trợ và cấu hình Nginx để xử lý các yêu cầu giao diện người dùng trên Debian 10.

Điều kiện tiên quyết​

  • Một máy chủ chạy Debian 10.
  • Mật khẩu gốc được cấu hình trên máy chủ của bạn.

Bắt đầu​

Trước tiên, bạn nên cập nhật hệ thống của mình lên phiên bản mới nhất. Bạn có thể thực hiện bằng lệnh sau:
Mã:
apt-get update -y
 apt-get upgrade -y
Sau khi máy chủ của bạn được cập nhật, hãy khởi động lại để áp dụng các thay đổi.

Cài đặt Node.js​

Theo mặc định, phiên bản Node.js mới nhất không có trong kho lưu trữ mặc định của Debian 10. Vì vậy, bạn sẽ cần cài đặt nó từ tập lệnh.

Đầu tiên, cài đặt curl bằng lệnh sau:
Mã:
apt-get install curl -y
Tiếp theo, tải xuống và cài đặt tập lệnh cài đặt Node.js bằng lệnh sau:
Mã:
curl -sL https://deb.nodesource.com/setup_12.x | bash -
Sau khi quá trình cài đặt hoàn tất, bạn có thể cài đặt Node.js bằng lệnh sau:
Mã:
apt-get install nodejs -y
Sau khi quá trình cài đặt hoàn tất thành công, bạn có thể xác minh phiên bản Node.js bằng lệnh sau:
Mã:
nodejs --version
Bạn sẽ thấy phiên bản Node.js trong đầu ra sau:
Mã:
v12.16.1
Bạn cũng có thể kiểm tra phiên bản NPM bằng cách chạy lệnh sau:
Mã:
npm --version
Bạn sẽ thấy phiên bản NPM trong đầu ra sau:
Mã:
6.13.4

Create Node.js Application​

Trước tiên, bạn sẽ cần tạo một thư mục cho ứng dụng của mình. Bạn có thể tạo ứng dụng này bằng cách chạy lệnh sau:
Mã:
mkdir nodeapp
Tiếp theo, hãy đổi thư mục thành nodeapp và cài đặt express bằng lệnh sau:
Mã:
cd nodeapp
 npm install express
Tiếp theo, hãy tạo một ứng dụng Node.js mẫu bằng express bằng trình soạn thảo nano:
Mã:
nano app.js
Thêm các nội dung sau:
Mã:
var express = require('express');var app = express();app.get('/', function(req, res){ res.send("Nginx as Frontend Server for Node.js!");});app.listen(8000, '127.0.0.1');
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, chạy ứng dụng của bạn bằng lệnh sau:
Mã:
node app.js
Tiếp theo, mở thiết bị đầu cuối khác và xác minh ứng dụng bằng lệnh sau:
Mã:
netstat -antup | grep 8000
Bạn sẽ thấy ứng dụng Node.js của mình đang lắng nghe trên cổng 8000:
Mã:
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 26193/node
Bạn cũng có thể xác minh ứng dụng bằng lệnh curl như hiển thị bên dưới:
Mã:
curl http://127.0.0.1:8000
Nếu mọi thứ ổn, bạn sẽ nhận được kết quả sau:
Mã:
Nginx là Máy chủ giao diện cho Node.js!

Cài đặt và cấu hình PM2​

PM2 là trình quản lý quy trình để quản lý ứng dụng Node.js. Bạn có thể dễ dàng khởi động, dừng và kích hoạt ứng dụng Node.js để khởi động cùng lúc bằng PM2.

Đầu tiên, hãy cài đặt phiên bản PM2 mới nhất bằng NPM như hiển thị bên dưới:
Mã:
npm install pm2 -g
Sau khi cài đặt, hãy thay đổi thư mục thành nodeapp và ứng dụng của bạn bằng lệnh sau:
Mã:
cd nodeapp
 pm2 start app.js
Sau khi ứng dụng đã được khởi động, bạn sẽ nhận được kết quả sau:
Mã:
-------------__/\\\\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\\_____ _\/\\\////////\\\_\/\\\\\\\\________/\\\\\\__/\\\\//////\\\___ _\/\\\\_______\/\\\\_\/\\\____/\\\//\\\_\//______\//\\\__ _\/\\\\\\\\\\\\\\\\/__\/\\\\//\\\//\\\______/\\\/______\//\\\/__ _\/\\\\\\\\\\\\\\/__\/\\\\//\\\/_\/\\\__________/\\\/___ _\/\\\\////////____\/\\\________/\\\/___ _\/\\\////////____\/\\\________/\\\//____ _\/\\\ ...____\/\\\________/\\\//____ _\/\\\_____________\/\\\_____\//_____\/\\\_____/\\\//________ _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________ _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\\ _\///______________\///______________\///______________\////////////__ Runtime Edition PM2 là Trình quản lý quy trình sản xuất cho các ứng dụng Node.js có Bộ cân bằng tải tích hợp sẵn. Khởi động và Daemon hóa bất kỳ ứng dụng nào: $ pm2 start app.js Cân bằng tải 4 phiên bản api.js: $ pm2 start api.js -i 4 Giám sát trong quá trình sản xuất: $ pm2 monitor Làm cho pm2 tự động khởi động khi khởi động lại máy chủ: $ pm2 startup Để biết thêm thông tin, hãy kiểm tra: http://pm2.io/ -------------[PM2] Tạo daemon PM2 với pm2_home=/root/.pm2[PM2] Đã daemon hóa PM2 thành công[PM2] Đang khởi động /root/nodeapp/app.js trong fork_mode (1 phiên bản)[PM2] Hoàn tất.?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? id ? name ? namespace ? version ? mode ? pid ? uptime ? ? ? status ? cpu ? mem ? user ? watching ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 0 ? ứng dụng ? mặc định ? N/A ? nhánh ? 13202 ? 0 giây ? 0 ? trực tuyến ? 0% ? 27,2mb ? root ? vô hiệu hóa ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Trong đầu ra ở trên, bạn có thể thấy thông tin rất hữu ích như, PID ứng dụng, thời gian hoạt động, trạng thái, mức sử dụng CPU và Bộ nhớ.

Tiếp theo, chạy lệnh sau để tạo và cấu hình một tập lệnh khởi động cho ứng dụng Node.js để ứng dụng Node.js của bạn sẽ tự động khởi động khi khởi động.
Mã:
pm2 startup
Bạn sẽ nhận được đầu ra sau:
Mã:
[PM2] Đã tìm thấy Hệ thống khởi tạo: systemdNền tảng systemdMẫu[Đơn vị]Mô tả=Quy trình PM2 quản lýTài liệu=https://pm2.keymetrics.io/After=network.target[Dịch vụ]Loại=forkingNgười dùng=rootGiới hạnNOFILE=vô cựcGiới hạnNPROC=vô cựcGiới hạnCORE=vô cựcMôi trường=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/sbin:/usr/binMôi trường=PM2_HOME=/root/.pm2PIDFile=/root/.pm2/pm2.pidKhởi động lại=khi lỗiExecStart=/usr/lib/node_modules/pm2/bin/pm2 phục hồiExecReload=/usr/lib/node_modules/pm2/bin/pm2 tải lại tất cảExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill[Cài đặt]WantedBy=multi-user.targetĐường dẫn đích/etc/systemd/system/pm2-root.serviceDanh sách lệnh[ 'systemctl enable pm2-root' ][PM2] Viết cấu hình init trong /etc/systemd/system/pm2-root.service[PM2] Tạo tập lệnh khởi động khi khởi động...[PM2] [-] Đang thực thi: systemctl enable pm2-root...Đã tạo liên kết tượng trưng /etc/systemd/system/multi-user.target.wants/pm2-root.service → /etc/systemd/system/pm2-root.service.[PM2] [v] Lệnh đã được thực thi thành công.+---------------------------------------+[PM2] Đóng băng danh sách tiến trình khi khởi động lại thông qua:$ pm2 save[PM2] Xóa tập lệnh init thông qua:$ pm2 unstartup systemd
Tiếp theo, khởi động dịch vụ PM2 bằng lệnh sau:
Mã:
systemctl start pm2-root
Tiếp theo, xác minh trạng thái của dịch vụ PM2 bằng lệnh sau:
Mã:
systemctl status pm2-root
Bạn sẽ nhận được kết quả sau:
Mã:
? pm2-root.service - Trình quản lý quy trình PM2 Đã tải: đã tải (/etc/systemd/system/pm2-root.service; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thu 2020-03-26 06:04:28 UTC; 2 giây trước Tài liệu: https://pm2.keymetrics.io/ Quy trình: 13387 ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS) PID chính: 13191 (PM2 v4.2.3: God) Nhiệm vụ: 0 (giới hạn: 4915) CGroup: /system.slice/pm2-root.service ? 13191 PM2 v4.2.3: God Daemon (/root/.pm2)26/03 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2] Đang khôi phục các tiến trình nằm trong /root/.pm2/dump.pm2.bak26/03 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][LỖI] Không đọc được tệp dump trong /root/.pm2/dump.pm2.bak26/03 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][LỖI] Không lưu được tiến trình nào; tệp DUMP không tồn tại26/03 06:04:28 kolab.linuxbuz.com pm2[13387]: ? Đã kích hoạt PM2+ | Tên phiên bản: node.myserver.tld-109e | Dash: https://app.pm2.io/#/r/7p66twg26/03 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????26/03 06:04:28 kolab.linuxbuz.com pm2[13387]: ? id ? name ? namespace ? version ? mode ? pid ? uptime ? ? ? status ? cpu26/03 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????????????26/03 06:04:28 kolab.linuxbuz.com pm2[13387]: ? 0 ? ứng dụng ? mặc định ? N/A ? ngã ba ? 13202 ? 8 phút ? 0 ? trực tuyến ? 0%26/03 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????26/03 06:04:28 kolab.linuxbuz.com systemd[1]: Đã khởi động trình quản lý quy trình PM2.

Cấu hình Nginx làm Proxy ngược cho Node.js​

Lúc này, ứng dụng Node.js của bạn đang chạy và lắng nghe trên máy chủ cục bộ. Tiếp theo, bạn sẽ cần cấu hình Nginx làm máy chủ proxy giao diện người dùng cho ứng dụng Node.js để bất kỳ người dùng nào cũng có thể truy cập ứng dụng của bạn qua internet.

Đầu tiên, hãy cài đặt máy chủ web Nginx bằng lệnh sau:
Mã:
apt-get install nginx -y
Sau khi cài đặt, hãy tạo tệp cấu hình máy chủ ảo Nginx cho ứng dụng Node.js:
Mã:
nano /etc/nginx/sites-enabled/myapp.conf
Thêm nội dung sau:
Mã:
server { listen 80; server_name node.myserver.tld; location / { proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header Nâng cấp $http_upgrade; proxy_set_header Kết nối 'nâng cấp'; proxy_set_header Máy chủ $host; proxy_cache_bypass $http_upgrade; }}
Lưu và đóng tệp khi bạn hoàn tất. Sau đó, khởi động lại máy chủ Nginx để áp dụng các thay đổi:
Mã:
systemctl restart nginx
Bạn có thể xác minh trạng thái của dịch vụ Nginx bằng lệnh sau:
Mã:
systemctl status nginx
Bạn sẽ thấy đầu ra sau:
Mã:
? nginx.service - Máy chủ web hiệu suất cao và máy chủ proxy ngược Đã tải: đã tải (/lib/systemd/system/nginx.service; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ ba 2020-03-25 12:42:49 UTC; 5 phút trước Tài liệu: man:nginx(8) Quy trình: 26180 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Tiến trình: 26182 ExecStart=/usr/sbin/nginx -g daemon bật; master_process bật; (code=exited, status=0/SUCCESS) PID chính: 26183 (nginx) Nhiệm vụ: 3 (giới hạn: 2359) Bộ nhớ: 5,5M CGroup: /system.slice/nginx.service ??26183 nginx: tiến trình chính /usr/sbin/nginx -g daemon bật; master_process bật; ??26184 nginx: tiến trình công nhân ??26185 nginx: tiến trình công nhân25/03 12:42:49 debian10 systemd[1]: Đang khởi động Một máy chủ web hiệu suất cao và một máy chủ proxy ngược...25/03 12:42:49 debian10 systemd[1]: Đã khởi động Một máy chủ web hiệu suất cao và một máy chủ proxy ngược.
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.

Truy cập ứng dụng Node.js của bạn​

Tại thời điểm này, Nginx được cấu hình để phục vụ ứng dụng Node.js của bạn.

Bây giờ, hãy mở trình duyệt web của bạn và nhập URL http://node.myserver.tld. Bạn sẽ thấy ứng dụng Node.js của mình trong màn hình sau:


Kết luận​

Trong bài viết trên, bạn đã học cách thiết lập ứng dụng Node.js trên Debian 10. Bạn cũng đã học cách chạy ứng dụng Node.js dưới dạng daemon và cấu hình Nginx dưới dạng proxy ngược để phục vụ ứng dụng. Tôi hy vọng bây giờ bạn có thể dễ dàng lưu trữ ứng dụng Node.js của mình trong môi trường sản xuất.
 
Back
Bên trên