Tích hợp DevSecOps vào việc triển khai Website du lịch trên Cloud với AWS

Integrating DevSecOps into Cloud-Based Travel Website Deployment with AWS

Đề tài “Tích hợp DevSecOps vào việc triển khai Website du lịch” được em lựa chọn với mục đích giải quyết các vấn đề về bảo mật, hiệu suất, và tối ưu hóa quy trình phát triển phần mềm trong môi trường hiện đại. Trong bối cảnh số hóa và sự phát triển mạnh mẽ của ngành du lịch, các doanh nghiệp du lịch ngày càng cần các nền tảng trực tuyến để phục vụ khách hàng, tối ưu hóa các dịch vụ và quản lý dữ liệu một cách hiệu quả. Tuy nhiên, việc triển khai một hệ thống web không chỉ cần đảm bảo các yếu tố về tính năng mà còn phải đặc biệt chú trọng đến bảo mật và khả năng duy trì lâu dài. Chính vì vậy, việc áp dụng phương pháp DevSecOps giúp kết hợp việc phát triển phần mềm, đảm bảo bảo mật và tối ưu hóa quy trình triển khai trở nên vô cùng quan trọng.

Em đã lựa chọn sử dụng NestJS cho backend, NextJS cho frontend, và MongoDB cho cơ sở dữ liệu, với mục tiêu xây dựng một nền tảng mạnh mẽ, có thể mở rộng và dễ dàng bảo trì. NestJS giúp phát triển ứng dụng backend với kiến trúc mô-đun và dễ dàng mở rộng, trong khi đó NextJS hỗ trợ xây dựng các ứng dụng frontend tối ưu hóa hiệu suất, hỗ trợ server-side rendering và tăng cường trải nghiệm người dùng. Việc sử dụng MongoDB giúp quản lý dữ liệu phi cấu trúc hiệu quả, đặc biệt trong môi trường cloud.

Với việc tích hợp DevSecOps vào quy trình phát triển, em đã triển khai Infrastructure as Code (IaC) để tự động hóa việc xây dựng và cấu hình hạ tầng, từ đó giảm thiểu các lỗi do cấu hình thủ công và đảm bảo tính nhất quán trong môi trường triển khai. Cụ thể, em đã sử dụng Jenkins để tự động hóa quy trình Continuous Integration (CI), qua đó giúp kiểm tra mã nguồn, build ứng dụng và triển khai trên môi trường cloud một cách hiệu quả và liên tục.

ArgoCD được sử dụng để triển khai hạ tầng và ứng dụng một cách tự động lên môi trường on-premise, giúp dễ dàng quản lý và triển khai các ứng dụng theo các thay đổi của mã nguồn một cách nhanh chóng và an toàn. Để đảm bảo hệ thống luôn vận hành ổn định và có thể giám sát được hiệu suất, em đã tích hợp Prometheus và Grafana vào hệ thống. Prometheus sẽ thu thập các số liệu về hoạt 2 động của ứng dụng và hệ thống, trong khi Grafana giúp trực quan hóa các số liệu đó thông qua các dashboard, giúp theo dõi các chỉ số quan trọng như tài nguyên hệ thống, độ sẵn sàng của dịch vụ, và các cảnh báo khi có sự cố.

Mục tiêu của đề tài là xây dựng một hệ thống website du lịch có khả năng mở rộng, an toàn và dễ dàng duy trì, đồng thời giảm thiểu thời gian phát triển và triển khai ứng dụng bằng cách áp dụng các phương pháp hiện đại trong DevSecOps, từ đó giúp cải thiện hiệu suất và bảo mật của hệ thống trong suốt quá trình phát triển và vận hành.

TÁC GIẢ

Lê Gia Hoàng Thiện

GIẢNG VIÊN HƯỚNG DẪN

NGÀNH

Năm:

TỔNG QUAN

Trong bối cảnh công nghệ thông tin ngày càng phát triển mạnh mẽ, việc ứng dụng các phương pháp hiện đại như DevSecOps vào quy trình phát triển và triển khai phần mềm đã trở thành xu hướng không thể thiếu trong các dự án phần mềm hiện nay. DevSecOps là sự kết hợp của phát triển phần mềm (Dev), bảo mật (Sec) và vận hành (Ops), nhằm đảm bảo an toàn và hiệu quả trong suốt vòng đời của ứng dụng. Đặc biệt, với sự phát triển mạnh mẽ của ngành du lịch trực tuyến, việc xây dựng một hệ thống website du lịch không chỉ cần đảm bảo tính năng mà còn phải đảm bảo bảo mật, khả năng mở rộng và triển khai nhanh chóng.

Đề tài “Tích hợp DevSecOps vào việc triển khai Website du lịch ” được thực hiện nhằm giải quyết các vấn đề trên, đồng thời tối ưu hóa quy trình phát triển phần mềm, bảo mật và triển khai hạ tầng ứng dụng du lịch trong môi trường cloud. Mục tiêu của đề tài là xây dựng một hệ thống website du lịch có khả năng mở rộng, an toàn và dễ dàng duy trì, với việc sử dụng các công nghệ tiên tiến như NestJS cho backend, NextJS cho frontend, và MongoDB cho cơ sở dữ liệu. Các công cụ DevSecOps như Jenkins, ArgoCD, Prometheus và Grafana cũng được tích hợp để tự động hóa quy trình phát triển, kiểm tra và triển khai ứng dụng, đồng thời giám sát hiệu suất và bảo mật hệ thống. 

Trong quá trình thực hiện đề tài, em đã áp dụng phương pháp Infrastructure as Code (IaC) để tự động hóa việc xây dựng và cấu hình hạ tầng, giảm thiểu lỗi do cấu hình thủ công. Em sử dụng Jenkins để quản lý quy trình CI, đảm bảo mã nguồn luôn được kiểm tra và triển khai liên tục, trong khi ArgoCD giúp triển khai hạ tầng và ứng dụng lên môi trường on-premise một cách tự động và an toàn. Để giám sát và đảm bảo hệ thống hoạt động ổn định, em sử dụng Prometheus để thu thập số liệu và Grafana để trực quan hóa các chỉ số hiệu suất quan trọng. 

Đề tài này không chỉ giúp cải thiện quy trình phát triển phần mềm mà còn đảm bảo an toàn cho hệ thống, đồng thời cung cấp cái nhìn tổng quan về việc áp dụng phương pháp DevSecOps trong các dự án phát triển ứng dụng web hiện đại.

Mục tiêu 

Mục tiêu chính của nghiên cứu này là thiết kế và triển khai một hệ thống Website du lịch dựa trên DevSecOps, nhằm đảm bảo các yêu cầu về bảo mật, hiệu suất và khả năng mở rộng trong suốt quá trình phát triển và vận hành ứng dụng. 

Cụ thể, nghiên cứu này có các mục tiêu sau: 

1. Tích hợp DevSecOps vào quy trình phát triển phần mềm: Xây dựng một quy trình DevSecOps hoàn chỉnh cho hệ thống Website du lịch, giúp tự động hóa kiểm thử, triển khai và giám sát bảo mật. 

2. Tối ưu hóa quy trình CI/CD: Áp dụng các công cụ như Jenkins để tự động hóa quy trình CI/CD , giúp rút ngắn thời gian phát triển và giảm thiểu sai sót trong suốt quá trình phát triển ứng dụng. 6 

3. Triển khai hệ thống hạ tầng tự động: Sử dụng IaC để tự động hóa việc cấu hình và quản lý hạ tầng, giúp tăng tính đồng nhất và dễ dàng mở rộng hệ thống khi cần thiết. 

4. Giám sát và đảm bảo hiệu suất hệ thống: Tích hợp các công cụ giám sát như Prometheus và Grafana để theo dõi hiệu suất của hệ thống và phát hiện sự cố bảo mật ngay khi chúng xảy ra.

Đối tượng 

Đối tượng nghiên cứu trong đề tài này bao gồm các nhóm người sử dụng và các bên liên quan có tác động trực tiếp đến hệ thống Website du lịch, bao gồm: 

1. Người dùng cuối (Khách hàng): Là đối tượng chính sử dụng hệ thống để tìm kiếm thông tin du lịch, đặt tour, thanh toán và sử dụng các dịch vụ liên quan. Việc tối ưu hóa giao diện người dùng, đảm bảo trải nghiệm mượt mà và bảo mật thông tin cá nhân của họ là yếu tố quan trọng trong quá trình phát triển hệ thống. 

2. Quản trị viên hệ thống (System Admin): Nhóm này chịu trách nhiệm quản lý và vận hành hệ thống, theo dõi các cảnh báo bảo mật và hiệu suất, xử lý các sự cố phát sinh trong quá trình vận hành. Họ cần một công cụ giám sát hiệu quả để dễ dàng quản lý hệ thống và triển khai các bản cập nhật bảo mật nhanh chóng. 

3. Nhóm phát triển phần mềm (Developers): Đây là nhóm chịu trách nhiệm xây dựng, phát triển và duy trì ứng dụng. Việc áp dụng quy trình DevSecOps giúp nhóm này phát triển phần mềm nhanh chóng và an toàn hơn thông qua việc tích hợp bảo mật và tự động hóa quy trình CI/CD. 

4. Nhóm bảo mật (Security Team): Nhóm này đảm bảo rằng hệ thống luôn duy trì các biện pháp bảo mật mạnh mẽ, bảo vệ dữ liệu người dùng và ngăn ngừa các mối đe dọa. Các công cụ bảo mật và quy trình kiểm tra bảo mật sẽ giúp họ xác định và khắc phục kịp thời các lỗ hổng bảo mật.

Phạm vi nghiên cứu 

Nghiên cứu này sẽ tập trung vào việc xây dựng hệ thống Website du lịch với các tính năng cơ bản như tìm kiếm thông tin, đặt tour, thanh toán và hỗ trợ khách hàng, sử dụng công nghệ hiện đại như NestJS cho backend, NextJS cho frontend, và MongoDB cho cơ sở dữ liệu. Quy trình DevSecOps sẽ được áp dụng xuyên suốt, từ phát triển, kiểm thử đến triển khai và giám sát hệ thống, đảm bảo bảo mật và hiệu suất trong suốt vòng đời của hệ thống.

Kiến trúc hệ thống

image 229
image 230

Workflow tổng quát 

Hệ thống du lịch được thiết kế kết hợp NextJS cho giao diện người dùng và NestJS cho backend, nhằm mang lại trải nghiệm đặt tour hiệu quả, bảo trì dễ dàng và linh hoạt mở rộng. 

Dưới đây là luồng hoạt động cụ thể, phân tách theo từng nhóm chức năng và service chuyên biệt: 

1. Duyệt và Tìm kiếm Tour Du Lịch 

• Khi người dùng truy cập trang web du lịch, giao diện chính sẽ được render bởi NextJS (frontend service). 

• NextJS gửi request API đến Backend Service (NestJS API Gateway hoặc Backend-for-Frontend) để lấy dữ liệu tour. 

• Backend Service gọi Tour Service (NestJS microservice chuyên quản lý tour) để truy vấn danh sách tour từ database. 

• Tour Service trả về dữ liệu các tour dưới dạng JSON. Backend Service truyền dữ liệu về NextJS để render HTML và trả về cho người dùng. Hình ảnh và tài nguyên tĩnh được phục vụ qua Nginx/CDN. 

• Người dùng có thể tìm kiếm tour theo tên, địa điểm, thời gian…, thao tác này cũng được thực hiện qua API tới Tour Service, đảm bảo tìm kiếm diễn ra nhanh chóng. 

2. Quản lý Đặt tour 

• Khi người dùng nhấn “Đặt tour”, NextJS gửi request đến Backend Service. 

• Backend Service gọi API Tour Service để xác minh tour còn suất, thông tin giá, đảm bảo không có sai lệch dữ liệu hoặc lỗi quá tải. 

• Thông tin tour và số lượng người đăng ký được lưu vào session server (có thể dùng Redis, hoặc lưu state ở client nếu hướng stateless). 

• Người dùng có thể thay đổi số lượng, hủy tour khỏi giỏ hàng, các thao tác này được cập nhật trực tiếp lên session server, giúp phản hồi nhanh mà không cần thao tác DB cho đến khi thanh toán. 

3. Đặt tour và Thanh toán 

• Khi người dùng xác nhận đặt tour, NextJS sẽ hiển thị form nhập thông tin cá nhân (tên, email, số điện thoại, địa chỉ,…). 

• Sau khi xác nhận thông tin, toàn bộ dữ liệu từ giỏ hàng và thông tin người dùng sẽ được NextJS gửi lên Backend Service qua một API duy nhất. 

• Backend Service tổng hợp toàn bộ dữ liệu, gửi request tới Booking Service (NestJS microservice chuyên quản lý đơn đặt tour). 

• Booking Service nhận yêu cầu, kiểm tra tính hợp lệ, tạo mới bản ghi Booking và BookingDetail trong DB (ghi nhận snapshot thông tin tour tại thời điểm đặt hàng). 

• Sau khi lưu thành công, Backend Service trả về trạng thái đặt tour cho frontend để thông báo tới người dùng. 

4. Viết đánh giá (Review) sau khi trải nghiệm 

• Sau khi hoàn thành chuyến du lịch, người dùng có thể để lại đánh giá trên website. 

• NextJS gửi API request tới Backend Service, rồi Backend Service chuyển tiếp tới Review Service (NestJS microservice quản lý review). 

• Review Service kiểm tra quyền người dùng, xác nhận từng booking đã tham gia tour đó, cho phép review và lưu nội dung đánh giá vào DB, liên kết tới user và tour tương ứng. 

• Các review sẽ hiển thị công khai tại trang chi tiết tour. 

5. Blog chia sẻ trải nghiệm 

• Người dùng hoặc admin có thể đăng các bài viết blog du lịch, review địa điểm, chia sẻ mẹo đi chơi. 

• Tương tự các bước trên, NextJS gửi API tới Backend Service, rồi chuyển sang Blog Service (NestJS microservice). 

• Blog Service kiểm tra quyền, lưu bài viết vào DB, cho phép bình luận, tương tác từ cộng đồng.

6. Chat với AI hỗ trợ du lịch (Bonus) 

• Ở mọi bước, người dùng có thể sử dụng tính năng chat AI để hỏi đáp lịch trình, tư vấn chọn tour, giải đáp dịch vụ, v.v. 

• NextJS kết nối tới AI Service (có thể là một NestJS service tích hợp LLM hoặc dịch vụ AI cloud), truyền context hiện tại (giỏ hàng, lịch sử booking, v.v.) để cá nhân hóa trả lời. 

• Lịch sử chat có thể được lưu lại và truy xuất nhanh trên giao diện người dùng. 

7. Quản trị viên (Admin) 

• Người dùng admin đăng nhập qua NextJS, xác thực qua Backend Service (sử dụng JWT hoặc session). 

• Admin được cấp quyền quản lý tour, booking, review, blog, tài khoản,… 

• NextJS gửi các thao tác CRUD lên Backend Service, chuyển tiếp tới các service tương ứng (Tour, Booking, Review, Blog) để thực hiện nghiệp vụ.

image 231

Kết luận và hướng phát triển

Kết quả đạt được 

Hệ thống ứng dụng du lịch được xây dựng và triển khai theo mô hình DevSecOps hiện đại, sử dụng Jenkins làm trung tâm tự động hóa CI/CD và hạ tầng Kubernetes on-premise. Quy trình phát triển đảm bảo tự động kiểm thử, kiểm soát bảo mật, đóng gói, cập nhật và vận hành toàn bộ ứng dụng theo từng bước rõ ràng. Việc phân tách microservices, áp dụng pipeline tự động hóa, quản lý secret an toàn, triển khai trên nền tảng Kubernetes và giám sát vận hành bằng Prometheus/Grafana đã giúp hệ thống đạt được các mục tiêu về hiệu quả, an toàn, mở rộng, tối ưu vận hành và dễ dàng bảo trì trong môi trường nội bộ.

Hạ tầng sử dụng Nginx làm Load Balancer, Ingress Controller cho phép phân giải hostname, cân bằng tải traffic, tăng khả năng mở rộng, đồng thời Rancher cung cấp giao diện GUI giúp đơn giản hóa quản trị và giám sát toàn bộ cụm K8s. Nhìn chung, kiến trúc này đã giải quyết các thách thức lớn về vận hành, tự động hóa, bảo mật và khả năng mở rộng mà các hệ thống web hiện đại đòi hỏi. 

Hướng phát triển 

1. Tích hợp thêm công cụ bảo mật và kiểm thử nâng cao: 

o Bổ sung kiểm thử tấn công tự động (DAST), security scanning runtime, cảnh báo sớm sự cố bảo mật với SIEM hoặc các nền tảng như Wazuh, Falco, Sysdig. 

2. Xây dựng mô hình multi-cluster và hybrid cloud: 

o Mở rộng triển khai sang nhiều cụm Kubernetes hoặc kết hợp onpremises với cloud (AWS EKS, Google GKE…) để tăng độ tin cậy, tính sẵn sàng và hỗ trợ scale linh hoạt. 

3. Tự động hóa rollback & zero downtime deploy: 

o Áp dụng các chiến lược blue-green, canary deployment để cập nhật hệ thống không gián đoạn và rollback tự động khi gặp lỗi. 

4. Cải tiến trải nghiệm người dùng và tích hợp AI: 

o Tích hợp chatbot AI tư vấn du lịch, cá nhân hóa hành trình, đề xuất tour thông minh dựa trên lịch sử người dùng. 

o Phát triển mobile app đồng bộ với backend microservice. 

5. Phát triển nền tảng API Gateway: 

o Thêm API Gateway (Kong, Istio, Nginx API Gateway…) để kiểm soát, bảo mật, giới hạn tốc độ (rate limiting), quản lý authentication/authorization tập trung cho toàn bộ hệ thống. 

6. Triển khai giám sát phân tán và logging nâng cao: 

o Áp dụng các hệ thống centralized logging (ELK/EFK stack), tracing (Jaeger, Zipkin) để quan sát toàn diện và truy vết sự cố liên dịch vụ. 

7. Triển khai với mô hình microservice đồng thời sử dụng nhiều tool khác nhau để tối ưu trong quá trình chạy mô hình