Tổng quan
Sự phát triển của công nghệ container: Container hóa đã trở thành chuẩn mực không thể thiếu trong việc đóng gói và triển khai ứng dụng nhờ tính linh hoạt và khả năng cô lập cao. Với khả năng quản lý container mạnh mẽ, nhiều tổ chức đang sử dụng các giải pháp container hóa tiên tiến để nâng cao hiệu suất và độ tin cậy của hệ thống.
Yêu cầu về tự động hóa (CI/CD): Trong môi trường phát triển hiện đại, việc tự động hóa các quy trình xây dựng, kiểm thử và triển khai (CI/CD) là hết sức cần thiết để tối ưu hóa tốc độ phát triển và giảm thiểu các lỗi phát sinh do con người. Tích hợp CI/CD đơn giản hóa quy trình triển khai và quản lý ứng dụng, cải thiện đáng kể hiệu quả công việc của các nhóm phát triển.
Xu hướng và nhu cầu thực tế: Ngày nay, nhiều công ty và tổ chức đang chuyển dịch sang sử dụng CI/CD để tối ưu hóa quy trình phát triển và vận hành. Việc nghiên cứu và áp dụng các công nghệ này giúp nắm bắt xu hướng và yêu cầu thực tế của thị trường lao động, chuẩn
bị tốt hơn cho công việc sau này.
Tính ứng dụng cao của đề tài: Đề tài “Xây dựng quy trình CI/CD mẫu cho ứng dụng web dựa trên microservices trên hệ thống cục bộ và AWS” không chỉ có tính lý thuyết mà còn mang tính ứng dụng cao. Nó có thể triển khai thực tế trong các dự án phát triển web với kiến trúc microservices, giúp hiểu sâu hơn về cách thức hoạt động và triển khai của các công nghệ hiện đại như CI/CD.
Đồ án này tập trung vào việc xây dựng quy trình CI/CD giúp tự động triển khai và quản lý ứng dụng microservices bằng cách sử dụng các công cụ và nền tảng được sử dụng cho DevOps phổ biến trên môi trường cục bộ và AWS. Mục tiêu là xây dựng một hệ thống CI/CD hoàn chỉnh để tự động hóa quy trình phát triển, kiểm thử, triển khai và giám sát hệ thống.
Mục tiêu nghiên cứu
Nghiên cứu và áp dụng các công cụ, công nghệ phổ biến trong việc xây dựng ứng dụng theo kiến trúc microservices, cung cấp và cấu hình cơ sở hạ tầng, xây dựng quy trình CI/CD giúp tự động hóa triển khai lên các môi trường.
Các công cụ, công nghệ, kiến trúc sẽ được tìm hiểu và sử dụng cụ thể là:
- Microservices Architecture.
- SCM (Souce Code Management): GitHub
- Automation pipelines: GitHub Actions, Jenkins
- Cloud Provider: AWS (EC2, EKS)
- Infrastructure as Code (IaC): Terraform, Ansible
- Container Technologies: Docker, Kubernetes
- Monitoring: Prometheus
Phạm vi nghiên cứu
Thiết kế và triển khai hạ tầng K8s để triển khai ứng dụng microservices trên nền tảng AWS.
Tích hợp các công cụ tự động hóa để quản lý cấu hình, giám sát và tối ưu hóa hiệu suất hệ thống.
Sử dụng Docker để container hóa ứng dụng và Kubernetes (K8s) để quản lý các container.
Áp dụng các công cụ IaC (Infrastruture as Code) như Ansible và Terraform để quản lý cấu hình và triển khai hạ tầng.
Thiết kế các pipeline scripts để tự động hóa các quy trình và triển khai ứng dụng lên các môi trường.
Giám sát hệ thống bằng Prometheus.
Tổng quan thiết kế


Ứng dụng sau khi hoàn thành một giai đoạn sẽ được đóng gói và triển khai lên môi trường development, đây là môi trường cục bộ dùng để xem xét các dịch vụ được triển khai dưới dạng container có hoạt động được như ý muốn và thực hiện các bước kiểm tra cần thiết trước khi phân phối và triển khai lên các môi trường khác.
Đối với mô hình microservices, mỗi dịch vụ của ứng dụng có thể sẽ sử dụng nhiều công nghệ, ngôn ngữ khác nhau nên việc thiết kế viết Dockerfile sao cho phù hợp để cung cấp đủ thông tin và cấu hình cần thiết cho việc đóng gói và triển khai là rất quan trọng. Đồng thời, Dockerfile phải được định nghĩa rõ ràng nhằm giúp cho việc kiểm tra và cập nhật dễ dàng hơn trong tương lai.
Một thành phần khác và được coi là thành phần rất quan trọng khi làm việc với mô hình microservices đó là docker compose. Docker compose là một công cụ hữu ích trong việc quản lý ứng dụng dựa trên Docker, đặc biệt là khi có nhiều container cần phải chạy cùng nhau và cần thiết lập một môi trường cụ thể cho chúng. Cấu hình của Docker Compose được xác định bằng một tệp YAML duy nhất, dễ đọc và dễ hiểu, định nghĩa các container, port, service, network, volume, và các tham số khác. Việc sử dụng docker compose giúp dễ dàng cho việc đóng gói, phân phối và triển khai hết sức thuận lợi, đôi khi chỉ cần 1 câu lệnh là xong.

Mục tiêu là xây dựng một CI/CD pipeline để tự động hóa quy trình phát triển, kiểm thử và triển khai ứng dụng Microservices lên các môi trường development, staging và production.
Kết luận
Trong đồ án này, nhóm đã thành công trong việc xây dựng và triển khai một ứng dụng web sử dụng kiến trúc microservices trên cả môi trường cục bộ và AWS. Quy trình này được tích hợp với CI/CD, từ đó tự động hóa các công đoạn phát triển, kiểm thử, triển khai và giám sát ứng dụng. Những kết quả đạt được bao gồm:
- Tăng tốc độ phát triển phần mềm: Quy trình CI/CD được thiết kế giúp rút ngắn thời gian từ khi mã nguồn được phát triển đến khi sản phẩm được triển khai. Nhờ vào việc tự động hóa các bước xây dựng và kiểm thử, các thay đổi trong mã nguồn có thể được tích hợp và triển khai nhanh chóng và liên tục. Điều này giúp đội ngũ phát triển giảm thời gian chờ đợi và tăng tốc độ phát hành sản phẩm.
- Giảm thiểu lỗi trong quá trình triển khai: Việc áp dụng CI/CD giúp tự động hóa các bước kiểm thử, từ đó phát hiện sớm các lỗi trong quá trình phát triển. Những lỗi này được phát hiện và khắc phục kịp thời trước khi mã nguồn được triển khai vào môi trường sản xuất. Điều này không chỉ giúp giảm thiểu rủi ro trong quá trình triển khai mà còn đảm bảo rằng các tính năng mới được triển khai một cách an toàn và đáng tin cậy.
- Đảm bảo ứng dụng hoạt động ổn định và đáng tin cậy: Hệ thống giám sát liên tục với Prometheus và Grafana giúp theo dõi tình trạng hoạt động của ứng dụng. Bằng cách này, có thể phát hiện và xử lý kịp thời các sự cố, đảm bảo rằng hệ thống luôn hoạt động ổn định. Các biểu đồ và cảnh báo từ Grafana cũng cung cấp thông tin chi tiết về hiệu suất và trạng thái của hệ thống, giúp nhanh chóng nhận biết và giải quyết các vấn đề phát sinh.
- Nâng cao kiến thức và kỹ năng về DevOps: Thông qua đồ án này, các thành viên trong nhóm đã nắm vững và áp dụng các công nghệ và công cụ liên quan đến DevOps như Docker, Kubernetes, Jenkins, Ansible, Terraform và AWS. Những kỹ năng này không chỉ giúp nhóm hoàn thành đồ án mà còn mở rộng khả năng ứng dụng thực tế trong các dự án tương lai.


