Hướng dẫn triển khai ứng dụng Node.js trên AWS EC2
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 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 typeRSA
và file format.pem
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) và 443 (HTTPS) (Allow HTTPS traffic from the internet & Allow HTTP traffic from the internet) để chạy web.
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:
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:
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ảnnodejs
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:
node -v
npm -v
Cài đặt PM2 để quản lý ứng dụng
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
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.pub
và id_rsa
Lấy ra SSH Key
vừa tạo
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àoKey
Clone source code
Trước tiên, nếu chưa cài đặt Git-cli:
sudo dnf update -y
sudo dnf install git -y
Tạo thư mục và clone source code từ GitHub:
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
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
sudo yum install -y nginx
Cấu hình Nginx làm reverse proxy
Mở file cấu hình Nginx:
sudo vim /etc/nginx/conf.d/example.conf
Thêm đoạn sau:
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:
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:
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload
Nếu dùng Ubuntu:
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ớiyour-ec2-ip
. - Kiểm tra với lệnh:
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í:
sudo yum install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
Gia hạn tự động:
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é!