受注中

Đang nhận dự án backend cho 2026. Thị trường Nhật Bản, làm việc từ xa.

Tất cả bài viết

記事

Triển khai Nuxt.js lên AWS với S3, CloudFront và Route 53

K
Võ Cao Kỳ

2025/02/267 phút đọc

Triển khai ứng dụng Nuxt.js lên Amazon S3, sử dụng CloudFront để phân phối nội dung nhanh chóng và thiết lập Route 53 để trỏ domain là một cách tối ưu để host website tĩnh. Bài viết này sẽ hướng dẫn bạn từng bước để thực hiện.


Build Nuxt.js thành static files

Trước tiên, bạn cần build ứng dụng Nuxt.js ở chế độ static để có thể upload lên S3.

index.sh
npm run generate  # Hoặc yarn generate

Sau khi build xong, toàn bộ file tĩnh sẽ nằm trong thư mục .output/public/.


Tạo và cấu hình AWS S3

Tạo S3 Bucket

Truy cập AWS S3 > Create Bucket

Đặt tên bucket (VD: www.example.com)

Đặt bên bucket
Đặt bên bucket

Bỏ chọn Block all public access để cho phép public access

Bỏ chọn Block all public access
Bỏ chọn Block all public access

Tạo bucket

Cấu hình Public Access

Sau khi tạo bucket, bạn cần chỉnh sửa quyền để public có thể truy cập nội dung:

Chuyển đến Permissions > Bucket Policy và thêm:

index.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::www.example.com/*"
    }
  ]
}

Chuyển đến Properties > Static website hosting > Edit

Chọn Enable và ở phần index document nhập index.html làm file gốc

Tạo static website hosing bằng S3
Tạo static website hosing bằng S3


Upload file lên S3

Sử dụng AWS CLI hoặc S3 UI để upload:

index.sh
aws s3 sync .output/public s3://www.example.com --delete

Sau đó bạn có thể truy cập vào đường dẫn Bucket website endpoint http://www.example.com.s3-website-ap-southeast-1.amazonaws.com để kiểm tra xem trang web đã hiển thị chưa

Cấu hình CloudFront

Tạo CloudFront Distribution

Truy cập AWS CloudFront > Create Distribution

Chọn Origin Domain Name là bucket S3 của bạn, sau đó sẽ hiển thị mục warning để bạn chọn Use website endpoint

Chọn Origin Domain Name
Chọn Origin Domain Name

Default cache behavior > Viewer Protocol Policy, chọn Redirect HTTP to HTTPS

Cache Policy, chọn CachingOptimized

Default cache behavior
Default cache behavior

Nhấn Create Distribution

Lấy CloudFront URL

Sau khi tạo xong, ở tab General > Distribution domain name sẽ có một URL dạng xxxxx.cloudfront.net. Đây sẽ là URL phân phối của bạn.

Tạo AWS Certificate Manager (ACM)

Truy cập vào AWS Certificate Manager > Certificates nhấn vào Request

Request Certificates
Request Certificates

Nhấn next, sau đó ở Fully qualified domain name nhập vào domain của bạn rồi nhấn Request

Thêm thông tin certificates
Thêm thông tin certificates

Thêm SSL vào cloudfront

Truy cập vào CloudFront > Distributions sau đó chọn Edit settings

  • Alternate domain name (CNAME): www.example.com, example.com
  • Custom SSL certificate: Chọn ACM vừa tạo ở bước 3
  • Default root object: index.html

Thêm SSL vào cloudfront
Thêm SSL vào cloudfront


Cấu hình Route 53 với CloudFront

Nếu bạn có domain trên Route 53, bạn có thể trỏ domain về CloudFront:

Phí lưu trữ host zone trên route 53 là 0.5$/tháng cho mỗi một host zone nha!

Truy cập Route 53 > Hosted Zones > Create hosted zone, ở đây mình sẽ ví dụ với domain example.com

Tạo hosted zone
Tạo hosted zone

Chọn vào domain của bạn tìm Record có type NS có value dạng:

index.json
ns-xxx.awsdns-xx.com.
ns-xxx.awsdns-xx.net.
ns-xxxx.awsdns-xx.co.uk.
ns-xxxx.awsdns-xx.org.

Bạn lấy phần NS được AWS cung cấp config vào phần quản trị domain của nhà cung cấp

Cấu hình NS cho domain
Cấu hình NS cho domain

Tiếp theo tạo record type A với url của cloudfront

Chọn domain của bạn và tạo bản ghi mới:

  • Record name: www
  • Record type: A
  • Alias: Yes
  • Route traffic to: Chọn Alias to Cloudfront distribution, sau đó chọn Cloudfront distribution của bạn

Tạo A record
Tạo A record

Sau khi hoàn tất, domain của bạn sẽ trỏ đến CloudFront và phục vụ nội dung từ S3.


Kết luận

Bây giờ bạn đã hoàn thành việc triển khai Nuxt.js lên AWS S3, tối ưu hóa với CloudFront, và gán domain với Route 53. Điều này giúp bạn có một trang web tốc độ cao, chi phí thấp và dễ dàng mở rộng.

Bạn có thể tự động hóa việc deploy bằng GitHub Actions hoặc AWS CodePipeline để cập nhật website nhanh hơn.

Chúc bạn thành công! 🚀


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

Chia sẻ Facebook