Đầ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
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
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
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
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;
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>
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
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
Sử dụng câu lệnh sau để check lỗi trên vps
sudo tail -f /var/log/nginx/error.log
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
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