0
0
Lập trình
Admin Team
Admin Teamtechmely

Hướng dẫn Deploy Web Application Trên Ubuntu Server Sử Dụng Nginx Reverse Proxy

Đăng vào 1 tuần trước

• 4 phút đọc

Deploy web application là một bước quan trọng trong quy trình phát triển phần mềm. Tuy nhiên, đối với những người mới, việc này có thể gây khó khăn do thiếu kiến thức nền tảng. Trong bài viết này, mình sẽ hướng dẫn các bạn cách triển khai một API viết bằng express.js lên một máy chủ Ubuntu, sử dụng Nginx làm reverse proxy để phục vụ qua tên miền app.ichhoa.dev.

Để nắm rõ hơn về các khái niệm như reverse proxy, forward proxy và SSL, bạn có thể tham khảo các bài viết sau:

Chuẩn Bị Để Deploy

Chọn Server

Bạn có thể sử dụng các dịch vụ điện toán đám mây như GCP (Google Cloud Platform), AWS (Amazon Web Services), hay Digital Ocean. Trong bài viết này, mình sẽ sử dụng máy chủ EC2 Ubuntu từ AWS để lưu trữ web app. Nếu bạn chưa biết cách tạo một máy EC2, hãy tham khảo bài viết hướng dẫn: Bắt Đầu Với Amazon EC2.

Đăng Ký Tên Miền (Tùy Chọn)

Bạn có thể đăng ký tên miền tại các nhà cung cấp như GoDaddy, Namecheap, hoặc Porkbun. Nếu bạn là sinh viên, hãy đăng ký Github Education để nhận 1 năm đăng ký tên miền miễn phí từ NameCheap.

Cài Đặt Các Gói Phần Mềm Cần Thiết

Chuẩn Bị Source Code

Trước khi triển khai ứng dụng, bạn cần upload source code lên máy chủ. Có nhiều cách để thực hiện điều này, ví dụ:

  1. Sử dụng Rsync để upload code thông qua SSH.
  2. Upload code lên S3 Bucket và sử dụng S3 CLI để tải về máy chủ.
  3. Sử dụng Git để pull code từ repository.

Để dễ dàng cho việc demo, mình sẽ sử dụng Git.

Cài Đặt Git và Pull Source Code

Đầu tiên, cài đặt Git:

bash Copy
sudo apt-get install git

Sau đó, clone repository:

bash Copy
git clone https://github.com/ichhoa129/express-example.git

Cài Đặt Node.js và PM2

Chạy các lệnh dưới đây để cài đặt Node.js phiên bản 18:

bash Copy
cd ~
curl -sL https://deb.nodesource.com/setup_18.x -o /tmp/nodesource_setup.sh
sudo bash /tmp/nodesource_setup.sh
sudo apt install nodejs

Khởi Chạy Project

Bây giờ hãy thử chạy project để đảm bảo mọi thứ hoạt động:

bash Copy
cd express-example
npm install
npm start

Khi khởi động, bạn sẽ thấy console hiển thị thông tin một cách đầy đủ. Giờ đây bạn có thể truy cập vào ứng dụng qua URL: <IP>:3000. Ví dụ, nếu server của bạn có IP là 35.77.42.119, hãy truy cập theo đường dẫn 35.77.42.119:3000.

Tuy nhiên, điều quan trọng là nếu bạn tắt kết nối đến server, ứng dụng sẽ ngừng hoạt động. Để xử lý vấn đề này, chúng ta sẽ cài đặt PM2 để chạy ứng dụng ẩn danh:

bash Copy
sudo npm i -g pm2
pm2 start "npm start" --name api

Giờ đây bạn có thể thoát khỏi console của server mà vẫn truy cập được ứng dụng qua URL <IP>:3000.

Để tạo sự chuyên nghiệp hơn, chúng ta sẽ thiết lập một tên miền cho ứng dụng, sử dụng tên miền app.ichhoa.dev.

Cài Đặt Tên Miền Cho Ứng Dụng

Cài Đặt Nginx

Do không thể trỏ tên miền đến địa chỉ IP với port cụ thể, ta cần thiết lập một reverse proxy cho client requests. Để hiểu rõ hơn về Nginx reverse proxy, bạn có thể tham khảo bài viết sau: Cấu Hình Reverse Proxy Trên Nginx.

Đầu tiên, cài đặt Nginx:

bash Copy
sudo apt update
sudo apt install nginx

Tiếp theo, tạo file cấu hình Nginx để route request vào ứng dụng:

bash Copy
cd /etc/nginx/sites-available
sudo touch app.ichhoa.dev

Sử dụng vim hoặc nano để chỉnh sửa file:

bash Copy
sudo nano app.ichhoa.dev
hoặc
sudo vi app.ichhoa.dev

Cập nhật file app.ichhoa.dev với nội dung như sau, nhớ thay đổi giá trị server_nameproxy_pass tương ứng:

nginx Copy
server {
 listen 80;
 server_name app.ichhoa.dev; # Thay đổi thành tên miền của bạn
 location / {
 proxy_pass http://localhost:3000; # Thay đổi port tương ứng với ứng dụng của bạn
 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;
 }
}

Với cấu hình trên, Nginx sẽ lắng nghe yêu cầu trên port 80, kiểm tra tên miền và chuyển tiếp các yêu cầu đến ứng dụng.

Để áp dụng thay đổi, tạo symbolic link tới folder /etc/nginx/sites-enabled và reload Nginx:

bash Copy
sudo ln -s /etc/nginx/sites-available/app.ichhoa.dev /etc/nginx/sites-enabled/
sudo systemctl reload nginx

Thiết Lập Tên Miền

Truy cập trang web của nhà cung cấp tên miền và tạo một record A trỏ vào địa chỉ IP của server.

Giờ đây bạn có thể truy cập vào trang web qua URL http://app.ichhoa.dev. Nhưng để tăng tính bảo mật, bạn nên thiết lập HTTPS cho tên miền này. Mình sẽ hướng dẫn cách cài đặt SSL free từ Let's Encrypt.

Cài Đặt SSL Cho Tên Miền

Trong môi trường production, bạn cần mua chứng chỉ từ Certificate Authority (CA) để cài đặt cho tên miền của mình. Tuy nhiên, để demo, ta sẽ sử dụng Let's Encrypt, một dịch vụ cấp chứng chỉ miễn phí.

Cài Đặt Certbot

Certbot là công cụ giúp bạn tạo và cài đặt SSL cho tên miền.

bash Copy
sudo apt install certbot python3-certbot-nginx

Cấu Hình Chứng Chỉ SSL

Tạo một chứng chỉ cho tên miền app.ichhoa.dev:

bash Copy
sudo certbot --nginx -d app.ichhoa.dev

Chạy lần đầu, Certbot yêu cầu bạn cung cấp email và đồng ý với các điều khoản.

Bây giờ bạn đã có thể truy cập trang web qua giao thức HTTPS: https://app.ichhoa.dev.


Cảm Ơn Các Bạn Đã Theo Dõi Bài Viết!

source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào