Bài viết


Kết nối với VPS Ubuntu/Debian từ Terminal và deploy dự án Nodejs

Ngày đăng: 15/12/2024

1.Kết nối vps Ubuntu/Debian từ terminal


Đầu tiên, kết nối đến vps thông qua địa chỉ ip

ssh root@ip_của_vps


-Nhập mật khẩu

Sau khi connect được vps, tiến hành clone dự án node từ github


Cài đặt git trước khi clone

sudo apt-get update
sudo apt-get install git


Truy cập vào tài khoản github để tạo một key chain sử dụng cho việc login đến github từ vps. Thực hiện theo: Vào Settings → Developer Settings → Personal Access Token → Tokens (classic) → Generate New Token . Điền full form dưới đây





thiết kế web, seo tổng thể, thiết kế app


Nhấn Generate Key, sử dụng nó như là password để clone project từ github

git clone https://github.com/tên_username_github/tên_repo_github.git


Tiếp theo, đi đến project vừa clone

cd tên_project


Cài đặt npm trên vps trước khi cài đặt các package cho project

sudo apt-get install npm


Cài node_modules cho project

npm i


Lúc này, nếu xảy ra lỗi version không tương thích với version của project thì cần update lại node


2.Update node nếu version không tương thích


sudo apt update


Cài đặt curl

sudo apt install curl


Cài đặt nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash


Đóng và mở lại terminal, sau đó chạy:

source ~/.bashrc


Check version hiện tại của nvm

nvm --version


Thấy tất cả version node hiện tại

nvm ls-remote


Cài version node chỉ định

nvm install [version.number]


Nếu xảy ra lỗi : getaddrinfo EAI_AGAIN registry.npmjs.org:80. Chạy lệnh sau:

npm config rm proxy
npm config rm https-proxy


Cuối cùng start dự án

npm start



3.Tạo database Mysql trong vps


Cài đặt các gói cần thiết

sudo apt install wget ca-certificates


Thêm kho lưu trữ Mysql chính thức

wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb 
sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb


Cập nhật danh sách gói lần nữa

sudo apt update


Cài đặt Mysql

sudo apt install mysql-server


Khởi động dịch vụ

sudo systemctl start mysql


Kiểm tra trạng thái Mysql

sudo systemctl status mysql


Cuối cùng, đăng nhập vào Mysql

sudo mysql -u root -p


4.Một số câu lệnh với Mysql


Thay đổi mật khẩu người dùng root

ALTER USER 'root'@'localhost' IDENTIFIED BY 'mật_khẩu';


Áp dụng thay đổi đó

FLUSH PRIVILEGES;


Kiểm tra danh sách người dùng

SELECT user, host FROM mysql.user;


Nếu gặp lỗi: Client does not support authentication protocol requested by server; consider upgrading MySQL client thì cần thay đổi phương thức xác thực

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mật_khẩu_của_root';


Lỗi:The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B7B3B788A8D3785C

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B7B3B788A8D3785C


Lưu thay đổi

FLUSH PRIVILEGES;



5.Cài đặt PM2 để chạy server


Cài đặt pm2

npm install pm2@latest -g


Di chuyển vào thư mục dự án , chạy lệnh để start

pm2 start npm --name "tên_ứng_dụng_tuỳ_ý" -- run start


Kiểm tra trạng thái pm2

pm2 status


Cách xoá 1 tiến trình pm2 bởi id

pm2 delete <id>



6.Cài đặt Nginx và thay thế ip backend bằng subsomain

6.1 Tạo subdomain


Truy cập vào bảng điều khiển DNS của domain và tạo 1 bảng ghi A. Ở đây mình tạo một subdomain cho backend, nhập tên subdomain và địa chỉ ip của VPS


6.2 Cài đặt nginx và thêm subdomain vừa tạo

Cài đặt nginx


sudo apt update 
sudo apt install nginx


Tạo file cấu hình cho subdomain

sudo nano /etc/nginx/sites-available/tên_subdomain


Thêm cấu hình

server {
listen 80;
server_name subdomain_của_bạn; # Thay thế bằng domain hoặc IP của bạn


location / {
proxy_pass http://localhost:1337; # Cổng mà Strapi chạy (mặc định là 1337)
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;
}


# Gzip settings (optional for performance optimization)
gzip on;
gzip_types text/css application/javascript text/javascript application/json;
gzip_vary on;
gzip_min_length 256;
}


Liên kết file cấu hình trong sites-available đến sites-enabled:

sudo ln -s /etc/nginx/sites-available/subdomain_của_bạn /etc/nginx/sites-enabled/


Kiểm tra cấu hình nginx

sudo nginx -t


Khởi động lại nginx

sudo systemctl restart nginx


Cài đặt Cerbot

sudo apt install certbot python3-certbot-nginx


Lấy chứng chỉ SSL

sudo certbot --nginx -d subdomain_của_bạn


Cài đặt Cronjob để tự động gia hạn ssl

sudo certbot renew --dry-run


Cuối cùng truy cập vào domain backend để xem có hoạt động qua nginx không. Kiểm tra log của nginx

sudo tail -f /var/log/nginx/error.log 
sudo tail -f /var/log/nginx/access.log


7.Một số lỗi thường gặp


Sử dụng câu lệnh sau để check lỗi trên vps

sudo tail -f /var/log/nginx/error.log


7.1.Client intended to send too large body: 10485761 bytes


Lỗi xảy ra khi call api từ FE đến BE. Cần sửa file cấu hình của domain, truy cập vào file

sudo nano /etc/nginx/sites-available/domain_của_bạn


Thêm client_max_body_size 20M; trong block server{}

Lưu và thoát


Kiểm tra cấu hình có ok không

sudo nginx -t


Restart lại nginx

sudo systemctl restart nginx


7.2Lỗi CORS


Mở file cấu hình

sudo nano /etc/nginx/sites-available/domain_của_bạn


Thêm đoạn code sau

location {
if ($request_method = OPTIONS) {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Origin, Authorization, Content-Type, timeout';
return 204;
}
}


Sau đó restart lại nginx


Liên hệ ngay tại đây với chúng tôi để được tư vấn nhanh nhất hoặc liên hệ:

Hotline: 0705.550.553

Email: bqsoftvn@gmail.com

Fanpage: https://www.facebook.com/bqsoftvn


Hân hạnh được hợp tác!

icon zalo
icon-mess