Tổng quan đồ án
Thương mại điện tử ngày càng phát triển mạnh mẽ, nhu cầu mua sắm trực tuyến của người dân tăng cao. Để đáp ứng nhu cầu này, các doanh nghiệp cần xây dựng và vận hành các ứng dụng web thương mại điện tử hiệu quả, an toàn và có khả năng mở rộng. DevOps là một phương pháp phát triển phần mềm kết hợp giữa các hoạt động phát triển và vận hành, giúp các doanh nghiệp xây dựng và triển khai ứng dụng web thương mại điện tử một cách nhanh chóng, linh hoạt và đáng tin cậy.

Mục tiêu
- Thiết kế và phát triển hệ thống quản lý và triển khai tự động ứng dụng web TMĐT dựa trên microservices.
- Xây dựng hệ thống quản lý ứng dụng web TMĐT với các chức năng như quản lý sản phẩm, quản lý đơn hàng, quản lý khách hàng, v.v.
- Phát triển hệ thống triển khai tự động giúp tự động hóa quy trình triển khai ứng dụng web TMĐT.
- Đánh giá hiệu quả của hệ thống quản lý và triển khai tự động ứng dụng web TMĐT dựa trên microservices.
Nội dung đồ án
Cơ sở lý thuyết
Terraform
Terraform là một công cụ mã nguồn mở được sử dụng để quản lý cơ sở hạ tầng (IaC) như: máy chủ ảo, mạng, lưu trữ, cân bằng tải, v.v. trên nhiều nhà cung cấp đám mây khác nhau như AWS, Azure, GCP, DigitalOcean, v.v. Nó cho phép bạn mô tả cơ sở hạ tầng mong muốn của mình bằng ngôn ngữ cấu hình HashiCorp Configuration Language (HCL) dễ đọc và dễ hiểu. Terraform sau đó sẽ tự động tạo hoặc cập nhật cơ sở hạ tầng để khớp với mô tả của bạn.

Github
GitHub là một nền tảng lưu trữ và quản lý kho mã nguồn (VCS – Version Control System) được sử dụng phổ biến nhất hiện nay. Nền tảng này cho phép các lập trình viên và nhóm phát triển lưu trữ, theo dõi và quản lý các thay đổi đối với mã nguồn của dự án một cách hiệu quả. GitHub cung cấp nhiều tính năng hỗ trợ cho việc cộng tác và phát triển phần mềm
GitHub Actions: Tự động hóa quy trình phát triển phần mềm
GitHub Actions là một nền tảng tự động hóa quy trình phát triển phần mềm (CI/CD – Continuous Integration/Continuous Delivery) được tích hợp sẵn vào GitHub. Nền tảng này cho phép người dùng tự động hóa các tác vụ trong quy trình phát triển phần mềm
Docker
Docker là một nền tảng phần mềm mã nguồn mở cho phép các nhà phát triển và quản trị hệ thống đóng gói ứng dụng và các phụ thuộc của nó vào các đơn vị có thể triển khai gọi là container. Container Docker cung cấp một cách nhẹ, hiệu quả và linh hoạt để phát triển và triển khai ứng dụng.

AWS ECS – Amazon Elastic Container Service (ECS)
Amazon Elastic Container Service (ECS) là dịch vụ quản lý container hoàn chỉnh, cho phép bạn dễ dàng chạy, quản lý và điều chỉnh quy mô container trên AWS. ECS loại bỏ sự phức tạp khi vận hành container, cho phép bạn tập trung vào việc xây dựng và triển khai ứng dụng của mình.
AWS EC2
Amazon Elastic Compute Cloud (EC2) là dịch vụ điện toán đám mây (cloud computing) do Amazon Web Services (AWS) cung cấp. EC2 cho phép người dùng thuê máy tính ảo (instance) để chạy các ứng dụng và dịch vụ của họ. Các instance EC2 hoạt động như những máy tính thực tế, có CPU, RAM, lưu trữ và mạng riêng.
AWS VPC – Amazon Virtual Private Cloud
AWS VPC (Amazon Virtual Private Cloud) là dịch vụ mạng đám mây do Amazon Web Services (AWS) cung cấp, cho phép bạn tạo mạng riêng ảo được cô lập logic trong môi trường AWS. Giống như bạn xây dựng một khu phố riêng biệt trong thành phố, VPC giúp bạn tạo ra một mạng riêng biệt trên đám mây để chạy các ứng dụng và lưu trữ dữ liệu của mình.
Mô hình triển khai

Trình bày khái quát về các bước thực hiện của mô hình dùng ECS:
Đầu tiên chúng em dùng Terraform là một công cụ Infrastructure as Code (IaC) để tự động hóa việc cài đặt và quản lý các dịch vụ trên cơ sở hạ tầng AWS.
Terraform sử dụng ngôn ngữ HashiCorp Configuration Language (HCL). Đây là một ngôn ngữ đơn giản để cấu hình các dịch vụ của AWS thông qua những câu lệnh một cách tự thay vì sử dụng giao diện của AWS.
Sau khi đã viết xong những câu lệnh để cấu hình các dịch vụ của AWS, các file code này sẽ được push lên Github và nhờ Github Actions để Init và Apply các cấu hình này để thực hiện cài đặt tự động các dịch vụ lên AWS.
Các dịch vụ được dùng trong mô hình này bao gồm:
- ECS: Dùng ECS Fargate để chạy 3 Service của 3 Task chứa 3 container của frontend, backend, admin.
- VPC và các dịch vụ liên quan: Dùng các dịch vụ liên quan đến VPC như aws vpc, aws subnet, aws internet gateway, aws route table, aws route table association, aws security group. Tóm lại, cấu hình này tạo ra một VPC cơ bản với một subnet public có thể truy cập internet.
Security Group cho phép tất cả lưu lượng truy cập đến và đi cho subnet public.
- Route 53:Cung cấp dịch vụ DNS để phân giải tên miền chuyển từ DNS của các container sang Domain Name của chúng em.
- CloudWatch: Dùng để xem log của 3 container đang chạy.
- S3 Bucket: Dùng để lưu lại cấu hình của Terraform lên AWS để sau này có thể tải lại file terraform.tfstate và dùng file này để destroy các dịch vụ đã triển khai.

Kết luận
- Đã triển khai được cơ bản một mô hình tự động hóa đơn giản của một ứng dụng Web thương mại điện tử.
- Rèn luyện được kĩ năng cơ bản của DevOps về các dịch vụ và công nghệ như Docker, Terraform, AWS.
- Hiểu được một quy trình triển khai tự động từ đó có thể phát triển được một mô hình hoàn chỉnh hơn trong tương lai.
Những hạn chế còn gặp phải
- Đã thử qua nhưng chưa thực hiện được việc triển khai ứng dụng bằng công nghệ EKS (chạy được container của images từ nginx, nhưng container chạy images của cá nhân tụi em không thể hoạt động được và trả về kết quả Unhealthy nhưng chúng em chưa biết cách khắc phục).
- Chỉ triển khai được giao thức https trên EC2 và chưa triển khai được giao thức https trên ECS.
- Chưa triển khai được quá trình CI/CD check code của ứng dụng Web thương mại điện tử.
Link Github của các mô hình tự động:
- Link deploy bằng ECS: https://github.com/pokilee10/DACN_Terraform
- Link deploy bằng EC2: https://github.com/shiroizdabezt/DACN_Terraform
- Link tự động build, push images lên Docker Hub và chọn phương thức triển khai tự động: https://github.com/shiroizdabezt/test_react


