Deploy NodeJS website lên VPS với Ubuntu 18.04


1048

Chuẩn bị

Đầu tiên khi deploy app NodeJS cần những điều sau

  • VPS với Ubuntu 18.04 đã cài đặt sẵn và quyền root
  • Putty hoặc SSH client khác
  • Dữ liệu NodeJS + Express.js server(Tôi sẽ sử dụng code này)
  • Tùy chọn: miền có bản ghi DNS trỏ đến VPS của bạn

Tạo user

Chúng ta muốn tạo user mới có quyền “sudo”, vì user root mặc định trong sản xuất là một hành vi xấu.

Tôi sẽ tạo user với tên lukas.

# tạo user mới
adduser lukas
# set superuser cho user
usermod -aG sudo lukas

Đăng xuất và đăng nhập với tư cách user mới của bạn. Ngoài ra, bạn nên update

sudo apt-get update
sudo apt-get upgrade

Cài đặt NodeJS

Có nhiều cách để cài đặt NodeJS, nhưng tôi thích NVM (Node Version Manager). Chúng ta sẽ cài đặt phiên bản 10.

Chúng ta sẽ tải script cài đặt với curl (hoặc sử dụng wget). Thao tác này sẽ tạo thư mục .nvm bên trong thư mục user của chúng ta. Bên trong thư mục này sẽ được lưu trữ các bản cài đặt NodeJS của bạn.

# câu lệnh này down script với curl
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
# hoặc sử dụng wget
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

Bây giờ hãy đăng xuất và đăng nhập lại. Sau đó, bạn sẽ có thể sử dụng các lệnh nvm.

# check đã cài đặt chưa
nvm --version
==> 0.33.11
# danh sách version có thể cài
nvm ls-remote
# ở đây chúng ta chọn v10 và cài đặt
nvm install v10.4.1
# kiểm tra xem đã cài đặt node chưa
node --version
==> v10.4.1

NVM là công cụ mạnh mẽ, cho phép bạn cài đặt nhiều phiên bản NodeJS và chuyển đổi giữa chúng theo ý muốn. Bạn có thể sử dụng lệnh “help” hoặc xem trang github của họ để tìm hiểu thêm.

# check more nvm usage
nvm --help

Tạo server cơ bản với Express

# đi đến thư mục user
cd /home/lukas
# tạo folder simpleServer
mkdir simpleServer
# đi vào trong
cd simpleServer
# tạo package.json
npm init -y
# cài đặt Express.js
npm install express

Tạo tệp với văn bản này bên trong nó và lưu. Bạn có thể sử dụng nano hoặc bất kỳ công cụ nào khác.

# mở nano
nano server.js
# để save, nhấn Ctrl + X ==> Y ==> Enter
const express = require('express');
const app = express();
app.get('/', (req, res) => {
  res.send("Hello World!");
});
const port = 3000;
const server = app.listen(port, () => {
  console.log(`Listening on http://localhost:${port}`);
});
# start server
node server.js
==> Listening on http://localhost:3000

Nếu bạn truy cập <ĐịaChỉIPVPSCủaBạn>: 3000, bạn sẽ thấy “Hello World!” bên trong trình duyệt của bạn.

PM2 trên VPS

Nếu bây giờ bạn close SSH client của mình, trang web của bạn sẽ ngừng hoạt động. Chúng ta cần một số công cụ sẽ giữ cho sever của chúng ta “sống”. Chào PM2!

# cài đặt PM2
npm install pm2 -g
# check version
pm2 -V
==> 2.10.4

PM2 sẽ làm cho server của chúng ta chạy dưới background và nếu nó bị lỗi, PM2 sẽ tự động khởi động lại.

# start server với PM2
pm2 start server.js
# check <ĐịaChỉIpVPSCủaBạn>:3000 nếu server đang chạy

Set PM2 tự start boot trên VPS

Nếu bây giờ chúng ta khởi động lại VPS, server của chúng ta sẽ không khởi động. Chúng ta phải kích hoạt nó trước. Tài liệu liên quan tại đây.

pm2 startup
#
điều này sẽ tạo ra một lệnh khác mà bạn cần chạy
# Chúng ta cũng cần lưu những quy trình nào nên bắt đầu với pm2
pm2 save
# khởi động lại VPS và kiểm tra xem trang web của bạn đã hoạt động chưa
sudo reboot

Tương tự như NVM, PM2 là một công cụ mạnh mẽ có thể làm được nhiều điều hơn thế. Kiểm tra document official và lệnh “help”.

pm2 help

Nginx cho app Express

Cài đặt Nginx cho app NodeJS với câu lệnh sau

sudo apt-get install nginx
# check version
sudo nginx -v
==> nginx version: nginx/1.14.0 (Ubuntu)

Tạo file config cho server của bạn

cd /etc/nginx/sites-availablesudo nano simpleServer

Bên trong file này, hãy viết đoạn code sau:

server {
    listen 80;
    server_name <ĐịaChỉIPVPSCủaBạn>;    location / {
        proxy_pass http://localhost:3000/;
    }
}

Nếu bạn muốn setup thêm domain

# ...
server_name www.TênDomainCủaBạn.com TênDomainCủaBạn.com;
# ...

Tìm hiểu thêm tại đây Nginx documentation.

Bước cuối cùng để deploy lên VPS

# check config có ok chưa
sudo nginx -t
# enable file config của bạn
sudo ln -s /etc/nginx/sites-available/simpleServer /etc/nginx/sites-enabled
# restart nginx
sudo systemctl restart nginx

Máy chủ của bạn bây giờ sẽ khả dụng trên <ĐịaChỉIPVPSCủaBạn>.

Kết luận

Qua bài viết bạn có thể deploy app NodeJS lên VPS với những công cụ cần thiết một các dễ dàng.

Tham khảo thêm về NodeJS tại đây : Server-Side và Client-sid rendering

Tham khảo thêm về React : Test ứng dụng Rect với Jest


Like it? Share with your friends!

1048