🤖 AI vẫn chưa thể thay thế mình đâu, bạn có thể khám phá những gì mình đang làm tại đây!

Hướng dẫn triển khai ứng dụng Node.js trên AWS EC2

K
Võ Cao Kỳ

2025/02/27

AWS EC2 (Elastic Compute Cloud) là một dịch vụ cung cấp các máy chủ ảo trên nền tảng đám mây, cho phép bạn chạy ứng dụng một cách linh hoạt và có thể mở rộng dễ dàng. Trong hướng dẫn này, chúng ta sẽ triển khai một ứng dụng Node.js đơn giản lên EC2, từ khâu khởi tạo server, cài đặt môi trường, đến việc chạy ứng dụng và thiết lập tự động khởi động khi máy chủ reboot.


Tạo EC2 Instance

Đăng nhập AWS và tạo EC2 instance

Vào AWS Console > EC2 > Instances > Launch Instance.

Chọn hệ điều hành Amazon Linux 2 > Amazon Linux 2023 AMI.

💡 Mẹo:

Nhớ chọn đúng khu vực của bạn để tạo EC2 instance, nó sẽ giúp bạn SSH vào EC2 ít bị lag hơn

Chọn hệ điều hành Amazon Linux 2023 AMI

Chọn loại máy (ví dụ: t2.micro miễn phí nếu dùng Free Tier).

Chọn key pair để SSH.

💡 Mẹo:

Nếu chưa có key pair hoặc muốn tạo mới thì nhấn Create new key pair chọn type RSA và file format .pem

Chọn loại máy và key pair

Cấu hình Storage và Security Group ở Network settings:

  • Mở cổng 22 (SSH) (Allow SSH traffic from) để truy cập từ xa.
  • Mở cổng 80 (HTTP)443 (HTTPS) (Allow HTTPS traffic from the internet & Allow HTTP traffic from the internet) để chạy web.

Network settings

Nhấn Launch instance để xác nhận tạo instance

Kết nối vào EC2 instance

Sử dụng SSH để kết nối:

index.sh
ssh -i "your-key.pem" ec2-user@your-ec2-ip

💡 Mẹo:

Phải mở terminal ở folder chứa file ssh và thay đổi quyền của file pem bằng lệnh chmod 400 "your-key.pem", có thể xem thêm thông tin SSH vào server ở Instance summary > Connect


Cài Đặt Node.js Và Các Công Cụ Cần Thiết

Cài đặt Node.js và npm

Trên Amazon Linux 2:

index.sh
sudo yum update -y
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo dnf install nodejs -y

💡 Mẹo:

Ở đây mình đang cài phiên bản nodejs mới nhất, bạn có thể tìm các phiên bản nodejs khác để cài đặt. Nếu gặp lỗi thì bạn có thể tham khảo cách cài đặt tại đây

Kiểm tra phiên bản:

index.sh
node -v
npm -v

Cài đặt PM2 để quản lý ứng dụng

index.sh
sudo npm install -g pm2

Triển Khai Ứng Dụng Node.js

Tạo SSH Key

Nếu là repository private thì cần tạo thêm SSH Key để có thể clone được source

💡 Mẹo:

Nên quản lý SSH Key ở folder ~/.ssh

index.sh
cd ~/.ssh/
ssh-keygen -t ed25519 -C "your_email@example.com"

Sau khi chạy lệnh trên thì mình sẽ nhận được 2 key id_rsa.pubid_rsa

Lấy ra SSH Key vừa tạo

index.sh
cat ~/.ssh/id_rsa.pub

Thêm SSH Key vào Github

Để thêm SSH Key vào Repository:

  • Truy cập vào Repository chọn repository muốn clone
  • Chọn Settings > Deploy keys > Add new
  • Dán SSH Key vừa tạo phía trên vào Key

Clone source code

Trước tiên, nếu chưa cài đặt Git-cli:

index.sh
sudo dnf update -y
sudo dnf install git -y

Tạo thư mục và clone source code từ GitHub:

index.sh
mkdir /var/www
cd /var/www
git clone git@github.com:username/your-repo.git
cd your-repo
npm install

Chạy ứng dụng với PM2

index.sh
pm2 start server.js --node-args="--max-old-space-size=1024 --expose-gc" --name --watch --max-memory-restart 300M

Cấu Hình Reverse Proxy Với Nginx

Cài đặt Nginx

index.sh
sudo yum install -y nginx

Cấu hình Nginx làm reverse proxy

Mở file cấu hình Nginx:

index.sh
sudo vim /etc/nginx/conf.d/example.conf

Thêm đoạn sau:

index.sh
server {
    listen 80;
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Lưu lại và restart Nginx:

index.sh
sudo systemctl restart nginx
sudo systemctl enable nginx

Cấu Hình Tường Lửa (Firewall)

Mở cổng 80/443 để truy cập từ bên ngoài:

index.sh
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload

Nếu dùng Ubuntu:

index.sh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Trỏ Tên Miền Về EC2 (Nếu Có)

  • Vào quản lý DNS của domain (Cloudflare, Namecheap, GoDaddy,...).
  • Tạo bản ghi A trỏ tới your-ec2-ip.
  • Kiểm tra với lệnh:
index.sh
ping your-domain.com

Cài SSL (HTTPS) Với Let’s Encrypt (Tùy Chọn)

Dùng Certbot để cài SSL miễn phí:

index.sh
sudo yum install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com

Gia hạn tự động:

index.sh
sudo certbot renew --dry-run

Kết Luận 🎉

Bây giờ ứng dụng Node.js của bạn đã chạy trên EC2 với Nginx và có thể truy cập từ domain. Bạn có thể thêm CI/CD để tự động deploy mỗi khi cập nhật code. 🚀


Cảm ơn tài liệu tham khảo từ 💓


Lưu ý: Tất cả các bài viết trên blog này được viết dựa trên kinh nghiệm cá nhân và quá trình tìm hiểu của mình. Mình hy vọng chúng có thể giúp ích cho bạn trong công việc và học tập, nhưng hãy xem đây như một nguồn tham khảo thay vì hướng dẫn tuyệt đối. Công nghệ luôn thay đổi, mỗi dự án có những đặc thù riêng, vì vậy bạn nên kiểm tra, thử nghiệm và điều chỉnh cho phù hợp với nhu cầu thực tế. Nếu có góp ý hay câu hỏi, đừng ngần ngại chia sẻ nhé!

Copyright © 2025 Vo Cao Ky

Cảm ơn Nuxt.js, ShadcnUI đã giúp mình build website này.