Deploy Express.Js website lên VPS Server với Nginx, PM2 và Ubuntu

I. Chuẩn bị

Bạn cần chuẩn bị những thứ sau:

  • VPS chạy Ubuntu 18.04 được cài đặt và truy cập với quyền root
  • Putty hoặc SSH client
  • Dummy Node.js + Express.js server (Tôi sử dụng cái này)
  • Optional: domain với DNS records được trỏ tới VPS

II. Tạo mới một User

Chúng ta muốn tạo mới một user với quyền “sudo”, chúng ta không nên sử dụng user mặc định quyền root để deploy sản phẩm.

Tôi sẽ tạo user với tên là autosol

# creating new user
adduser autosol

# providing superuser rights

usermod -aG sudo autosol

Log out và login lại server với new user. Sau đó thực hiện update lại hệ thống:

sudo apt-get update
sudo apt-get upgrade

III. Node.js

Có nhiều cach để cài đặt Node.js. Tuy nhiên tôi thích cài NVM (Node.js Version Manager). Chúng ta sẽ cài Node.js version 10.

Chúng ta sẽ download install script với curl (hoặc chúng ta có thể dùng wget để thay thế). Đều này sẽ tạo .nvm folder bên trong thư mục user của chúng ta. Bên trong thư mục này sẽ lưu những bảng cài đặt Node.js của bạn.

# this command will download install script with curl
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
# or use wget
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bas

Giờ hãy log out và log in lại, sau đó bạn sử dụng những lệnh nvm để kiểm tra

# check if installed
nvm --version
==> 0.33.11
# list available Node.js versions
nvm ls-remote
# choose one version and install it
# example of v10.4.1 installation
nvm install v10.4.1

# check if installed properly
node –version
==> v10.4.1

NVM là tool rất mạnh cho phép bạn cài đặt nhiều Node version khác nhau và có thể chuyển đổi qua lại giữa chúng. Bạn có thể dùng command “help” hay kiểm tra nó để biết nhiều hơi tại github page

# check more nvm usage
nvm --help

Tạo Server cơ bản với Express.js

# go to your user's directory
cd /home/autosol
# create folder simpleServer
mkdir simpleServer
# go inside
cd simpleServer
# create package.json
npm init -y
# install Express.js
npm install express

Sau đó tạo file với text bên dưới và lưu nó. Để tạo file bạn có thể dụng nano hoặc bất cứ tool nào khác.

# open nano
nano server.js
# to save, press Ctrl + X ==> Y ==> Enter
Chạy câu lênh sau để start server:
# start server
node server.js
==> Listening on http://localhost:3000

Nếu bạn dùng browser và gõ <YourVPSIpAddress>:3000, bạn nên thấy “Hello World”.

IV. PM2

Bây giờ nếu bạn close của sổ SSH client của bạn lại, thì website của bạn sẽ bị stop. Do đó chúng ta cần một vài tool để giữ server của chúng ta luôn sống “alive”. Hãy nói lời xin chào đến PM2!

# globally install PM2
npm install pm2 -g
# check if installed properly
pm2 -V
==> 2.10.4

PM2 sẽ tạo cho server của chúng ta run ở background và nếu nó bị crash, PM2 sẽ restart lại tự động.

# start our server with PM2
pm2 start server.js
# check <YourVPSIpAddress>:3000 if your server is running

Start PM2 khi boot server

Nếu giờ chúng ta reboot VPS, thì server của chúng ta sẽ start. Do đó chúng ta phải enable nó. Tham khảo tài liệu liên quan tại đây.

pm2 startup
# this will generate another command that you need to run
# We also need to save what processes 
# should get started with pm2
pm2 save
# reboot VPS and check if your website is up
sudo reboot

Cũng giống như NVM, PM2 cũng là công cụ rất mạnh giúp chúng ta làm rất nhiều thức với nó. Để biết nhiều hơn về công cụ này, tham chiếu đến tài liệu chính thức tại official documentation và dùng “help” command.

# get help!
pm2 help

V. Nginx

Cài đặt Nginx:

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

Tạo file cấu hình cho server của bạn

cd /etc/nginx/sites-available
sudo nano simpleServer

Enter code sau vào file simpleServer trên

server {
    listen 80;
    server_name <YourVPSIpAddress>;
    location / {
        proxy_pass http://localhost:3000/;
    }
}

Nếu bạn có setup domain của mình, thì hãy làm đều này.

# ...
server_name www.example.com example.com;
# ...

Thông tin chi tiết có thể tìm thấy trong Nginx documentation.

Bước cuối cùng

# check if your configuration is ok
sudo nginx -t
# enable your configuration
sudo ln -s /etc/nginx/sites-available/simpleServer /etc/nginx/sites-enabled
# restart nginx
sudo systemctl restart nginx

Server của bạn nên sẳn sàn trên <YourVPSIpAddress>.

Chúc bạn thành công với VPS server của mình nhé.

Leave a Reply

Your email address will not be published. Required fields are marked *