Sản phẩm: Kết quả sinh viên đã xây dựng website bán hàng trên nền tảng đám mây AWS, thể hiện được khả năng cơ bản của kỹ sư phát triển hệ thống trên nền đám mây, bao gồm Triển khai websi
Trang 1Xây dựng website bán hàng trên nền tảng đám mây AWS
Sinh Viên: Ngô Mạnh Quỳnh
Giảng viên hướng dẫn: PGS.TS Ngô Hồng Sơn
Hà Nội – Năm 2022
Copies for internal use only in Phenikaa University
Trang 22
TRƯỜNG ĐẠI HỌC PHENIKAA Độc lập – Tự do – Hạnh phúc
NHẬN XÉT ĐỒ ÁN/KHOÁ LUẬN TỐT NGHIỆP
CỦA GIẢNG VIÊN HƯỚNG DẪN
Giảng viên hướng dẫn: Ngô Hồng Sơn, Bộ môn: khoa CNTT
Tên đồ án: Xây dựng website bán hàng trên nền tảng đám mây AWS
Sinh viên thực hiện: Ngô Mạnh Quỳnh, Lớp: KHMT – K12
NỘI DUNG NHẬN XÉT:
I Nội dung báo cáo:
Nội dung đồ án tốt nghiệp đã bao gồm các phần cơ bản: Giới thiệu tổng quan, Cơ
sở lý thuyết về cloud, xây dựng hệ thống, triển khai hệ thống, kết quả thực hiện Kết quả đạt được sinh viên đã triển khai thành công một website bán hàng trên nền tảng cloud aws Tuy nhiên phần mô tả kết quả, sinh viên có thể mô tả kỹ hơn, đầy đủ hơn để nêu bật kết quả công việc của mình
II Sản phẩm:
Kết quả sinh viên đã xây dựng website bán hàng trên nền tảng đám mây AWS, thể hiện được khả năng cơ bản của kỹ sư phát triển hệ thống trên nền đám mây, bao gồm Triển khai website lên Web server trên AWS, Sử dụng thành thạo Docker, Triển khai các dịch vụ trên AWS Sản phẩm hoạt động đúng theo yêu cầu đặt ra ban đầu
III Ưu nhược điểm:
- Ưu điểm: sử dụng các công cụ hiện đại, tiên tiến trong phát triển sản phẩm và triển khai hệ thống
- Nhược điểm: Báo cáo còn mô tả sơ sài các yêu cầu của hệ thống và sản phẩm thu được
IV Kết luận:
Sản phẩm của sinh viên gồm hệ thống và báo cáo tương ứng đã đạt các yêu cầu cơ bản của đồ án tốt nghiệp ngành Khoa học mấy tính, GVHD đồng ý để sinh viên được bảo vệ trước hội đồng
Hà Nội, ngày tháng năm 2022
GIẢNG VIÊN HƯỚNG DẪN (Ký và ghi rõ họ tên)
Ngô Hồng Sơn
Copies for internal use only in Phenikaa University
Trang 33 Copies for internal use only in Phenikaa University
Trang 44
LỜI CẢM ƠN
Qua thời gian học tập và rèn luyện tại trường Đại học Phenikaa, đến nay em đã kết thúc khoá học 4 năm và hoàn thành đồ án tốt nghiệp Để có được kết quả này em xin chân thành cảm ơn:
Ban chủ nhiệm trường Đại học Phenikaa cùng các thầy cô giáo trong khoa đã giảng dạy, quan tâm và tạo điều kiện thuận lợi để chúng em học tập và rèn luyện trong suốt thời gian theo học tại trường
PGS.TS: Ngô Hồng Sơn đã tận tình hướng dẫn, giúp đỡ em trong quá trình học tập và đặc biệt là trong suốt thời gian làm đồ án tốt nghiệp Thầy luôn quan tâm và rất nhiệt tình hướng dẫn em từ việc tìm tài liệu cho đến việc định hướng lựa chọn giải pháp để triển khai đồ án Thầy cũng luôn nhắc nhở, động viên em mỗi khi gặp khó khăn, nhờ vậy mà em đã hoàn thành đồ án tốt nghiệp của mình đúng thời hạn
Em cũng xin gửi lời cảm ơn tới các thành viên trong lớp, bạn bè và những người
đã động viên, giúp đỡ em rất nhiều trong thời gian học tập và làm đồ án tốt nghiệp
Hà Nội, tháng 7 năm 2022 Sinh viên thực hiện
Ngô Mạnh Quỳnh
Copies for internal use only in Phenikaa University
Trang 55
Chương 1: Giới thiệu về đồ án tốt nghiệp 1
1.1 Tên đề tài 1
1.2 Mục tiêu nghiên cứu 1
1.3 Thành viên tham gia thực hiện đồ án 1
1.4 Phương thức thực hiện và kết quả 1
1.4.1 Phương thức thực hiện 1
1.4.2 Kết quả 1
Chương 2: Tổng quan cơ sở lý thuyết và Cloud Computing 2
2.1 Ngôn ngữ lập trình JavaScript 2
2.2 ReactJS 2
2.3 Hệ điều hành Linux 2
2.3.1 Định nghĩa 2
2.3.2 Cấu trúc hệ điều hành Linux 2
2.3.3 Công dụng của hệ điều hành Linux 3
2.3.4 Ưu nhược điểm của hệ điều hành Linux 3
2.4 Cloud Computing 3
2.4.1 Cloud Computing là gì? 3
2.4.2 Lợi ích của Cloud Computing 3
2.5 Tìm hiểu về AWS 4
2.5.1 AWS là gì? 4
2.5.2 Một số dịch vụ trên AWS. 4
2.6 Tìm hiểu về NGINX 5
2.6.1 Nginx là gì? 5
2.6.2 Nginx có tính năng gì? 5
2.7 Tìm hiểu về Docker 5
2.7.1 Docker là gì? 5
2.7.2 Container trong Docker là gì? 6
2.7.3 Các khái niện liên quan. 6
Chương 3: Xây dựng hệ thống trên AWS 7
3.1 Mô hình hệ thống 7 Copies for internal use only in Phenikaa University
Trang 66
3.2 Tạo VPC trên AWS 8
3.3 Tạo Subnet trên AWS 9
3.4 Tạo Route Table trên AWS 10
3.4.1 Tạo Public Route Table trên AWS 10
3.4.2 Tạo Private Route Table trên AWS 13
3.5 Tạo Instance trên AWS 14
Chương 4: Triển khai website lên AWS 18
4.1 Deploy source back-end và front lên server 18
4.1.1 Deploy source back-end 18
4.1.2 Deploy source front-end 19
4.2 Sử dụng Dockerfile để build image 21
4.2.1 Dockerfile cho back-end 21
4.2.2. 21
4.2.3 Dockerfile cho front-end 22
4.3 Sử dụng dịch vụ ALB trên AWS 23
Chương 5: Kết quả 31
5.1 Kết quả thu được 31
5.2 Ưu điểm, nhược điểm 38
5.2.1 Ưu điểm 38
5.2.2 Nhược điểm 39
5.3 Hướng phát triển 39
Copies for internal use only in Phenikaa University
Trang 8Hình 5: Tạo mới subnet
Hình 6: các bước tạo subnet Hình
Hình 7: Các bước tạo Route table
Hình 8: Tạo mới Internet Gateways
Hình 9: Các bước tạo Internet gateways
Hình 10: Chỉnh sửa Routes in Route table
Hình 11: Thêm internet gateways vào route table
Hình 12: Chỉnh Subnet associations
Hình 13: tạo mới NAT gateway
Hình 14: Các bước tạo NAT Gateway
Hình 15: Tìm dịch vụ EC2 trên AWS
Hình 16: Tạo mới Instance
Hình 17: Các bước tạo Instance (1)
Hình 18: Các bước tạo Instance (2)
Hình 19: Các bước tạo Instance (3)
Hình 20: Danh sách Instance và trạng thái
Hình 21: Zip folder Source code Backend
Hình 22: Truyền file code back-end vào trong server
Hình 23: giải nén folder với các thư mục trên server
Hình 24: Sửa config folder để tương thích với môi trường trên AWS
Hình 25: Build Source front-end
Hình 26: Zip folder đã build từ source front-end
Hình 27: Truyền file build front-end vào trong server
Hình 28: Folder front-end sau khi giải nén
Hình 29: dockerfile build image cho back-end
Copies for internal use only in Phenikaa University
Trang 99
Hình 30: dockerfile build image cho front-end
Hình 31: truy cập vào dịch vụ EC2 trên AWS
Hình 32: Tạo mới Load Balancer
Hình 33: Chọn kiểu Load Balancer
Hình 34: Cấu hình cho Application Load Balancer (1)
Hình 35: Cấu hình cho Application Load Balancer (2)
Hình 36: Cấu hình cho Application Load Balancer (2)
Hình 37: Chọn kiểu target cấu hình target group
Hình 38: chọn Instance và chọn port cho instance đó
Hình 39: Config target group trong dịch vụ ALB
Hình 40: Build images front-end
Hình 41: image front end đã được tạo
Hình 42: Sau khi chạy container front-end thành công
Hình 43: kiểm tra trạng thái của website vừa được triển khai
Hình 44: Build image back-end
Hình 45: image Back-end đã được tạo
Hình 46: Sau khi container back-end được chạy thành công
Hình 47: Kiểm tra log của container back-end
Hình 48: giao diện của website
Hình 49: giao diện admin của trang web
Hình 50: Giao diện khi xem sản phẩm của trang web
Hình 51: Giao diện mô tả sản phẩm của trang web
Hình 52: Chứng chỉ được AWS cung cấp miễn phí
Hình 53: công cụ monitor(thông báo qua email hoặc telegram) cho trang web
Copies for internal use only in Phenikaa University
Trang 1010
Danh mục từ viết tắt
3 Application Load Balacing ALB
4 Amazone Elastic Computer Cloud EC2
6 Elastic Container Registry ECR
7 Web Application Firewall WAF
Copies for internal use only in Phenikaa University
Trang 1111
Mở đầu
Ngày nay, đối với các công ty, doanh nghiệp, việc quản lý tốt, hiệu quả dữ liệu của riêng công ty cũng như dữ liệu khách hàng, đối tác là một trong những bài toán được ưu tiên hàng đầu và đang không ngừng gây khó khăn cho họ Để có thể quản lý dược nguồn dữ liệu
đó, ban đầu các doanh nghiệp phải đầu tư, tính toán rất nhiều các loại chi phí như chi phí cho phần cứng, phần mềm, mạng, chi phí cho quản trị viên, chi phí bảo trì, sửa chữa, … Ngoài ra
họ còn phải tính toán khả năng mở rộng, nâng cấp thiết bị, phải kiểm soát việc bảo mật dữ liệu cũng như tính sẵn sàng cao của dữ liệu
Từ một bài toán điển hình như vậy, chúng ta thấy được rằng nếu có một nơi tin cậy giúp các doanh nghiệp quản lý tốt nguồn dữ liệu đó, các doanh nghiệp sẽ không còn quan tâm đến cơ sở hạ tầng, công nghệ mà chỉ tập trung chính vào công việc kinh doanh của họ thì có thể mang lại cho họ hiệu quả và lợi nhuận ngày càng cao hơn
Thuật ngữ “Cloud Computing” ra đời bắt nguồn từ một trong những hoàn cảnh như vậy
Thuật ngữ “Cloud Computing” còn được bắt nguồn từ ý tưởng đưa tất cả mọi thứ như
dữ liệu, phần mềm, tính toán, … lên trên mạng Internet Chúng ta sẽ không còn trông thấy các máy PC, máy chủ của riêng các doanh nghiệp để lưu trữ dữ liệu, phần mềm nữa mà chỉ còn một số các “máy chủ ảo” tập trung trên mạng Các “máy chủ ảo” sẽ cung cấp các dịch vụ giúp cho doanh nghiệp có thể quản lý dữ liệu dễ dàng hơn, họ sẽ chỉ trả phí cho lượng sử dụng dịch vụ của học, mà không cần phải đầu tư nhiều vào cơ sở hạ tầng cũng như quan tâm nhiều đến công nghệ Xu hướng này sẽ giúp nhiều cho các công ty, doanh nghiệp vừa và nhỏ
mà không có cơ sở hạ tầng mạng, máy chủ để lưu trữ, quản lý dữ liệu tốt
Vậy “Cloud Computing” là gì ? Nó có thể giải quyết bài toán trên như thế nào và có những đặc điểm nổi bật gì ? Với vấn đề đã phân tích ở trên nên em sẽ thực hiện “xây dựng một trang bán hàng trên nền tảng đám mây AWS”
Copies for internal use only in Phenikaa University
Trang 121
Chương 1: Giới thiệu về đồ án tốt nghiệp
1.1 Tên đề tài
Xây dựng website bán hàng trên nền tảng đám mây AWS
1.2 Mục tiêu nghiên cứu
Xây dựng một website bán hàng
Triển khai website bán hàng lên nền tảng đám mây AWS
1.3 Thành viên tham gia thực hiện đồ án
1 Ngô Hồng
Sơn
Giảng viên hướng dẫn
uni.edu.vn
Thao tác được trên hệ điều hành linux
Tìm hiểu về các dịch vụ trên AWS
Triển khai các dịch vụ trên AWS
Sử dụng thành thạo Docker
Triển khai website lên Web server trên AWS
1.4.2 Kết quả
Xây dựng website bán hàng trên nền tảng đám mây AWS
Copies for internal use only in Phenikaa University
Trang 13người dùng tương tự máy chủ (Nodejs) để tạo ra những website động
Ngôn ngữ lập trình JavaScript được phát triển bởi Brendan Eich tại Netscape với tiền thân là Mocha Sau đó Mocha đuọc đổi thành LiveScript và cuối cùng mới đổi thành
JavaScript
JavaScript là một chương trình dễ học, những lỗi JavaScript rất dễ để phát hiện, từ đó
giúp người dùng sửa lỗi một cách nhanh chóng hơn
Những trình duyệt web có thể dịch thông qua HTML mà không cần sử dụng đến một
compiler
JavaScript được các chuyên gia đánh giá là một loại ngôn ngữ lập trình nhẹ và nhanh
hơn nhiều so với các ngôn ngữ lập trình khác
Những website có sử dụng JavaScript thì chúng sẽ giúp cho trang web đó có sự tương tác cũng như tăng thêm nhiều trải nghiệm mới cho người dùng Giúp thao tác với
người dùng phía Client và tách biệt giữa các Client với nhau
JavaScript dễ bị các hacker và scammer khai thác hơn, JavaScript cũng không có khả
năng đa luồng hoặc đa dạng xử lý
2.2 ReactJS
ReactJS là một opensource được phát triển bởi Facebook, ra mắt vào năm 2013, bản thân nó là một thư viện JavaScript được dùng để xây dựng và tương tác với các thành phần trên website Một trong những điểm nổi bật nhất của ReactJS đó là việc render
dữ liệu không chỉ thực hiện được trên tầng server mà còn ở dưới Client nữa
ReactJS là một thư viện JavaScript chuyên giúp các nhà phát triển xây dựng giao diện người dùng hay UI Trong lập trình ứng dụng front-end, lập trình viên thường sẽ phải làm việc chính trên 2 thành phần sau: UI và xử lý tương tác của người dùng UI là tập hợp những thành phần mà nhìn thấy được trên bất kỳ một ứng dụng nào, ví dụ có thể
kể đến bao gồm: menu, thanh tìm kiếm, những nút nhấn, card, … Giả sử đang lập trình một website thương mại điện tử, sau khi người dùng chọn được sản phẩm ưng ý rồi và nhấn nút “Thêm vào giỏ hàng”, thì việc tiếp theo mà phải làm đó là thêm sản phẩm được chọn vào giỏ hàng và hiển thị lại sản phẩm đó khi user vào xem => xử lý tương tác
Trước khi có ReactJS, lập trình viên thường gặp rất nhiều khó khăn trong việc sử dụng “vanilla JavaScript”(JavaScript thuần) và Jquery để xây dựng UI Điều đó đồng nghĩa với việc quá trình phát triển của ứng dụng sẽ lâu hơn và xuất hiện nhiều bug, rủi
ro hơn Vì vậy vào năm 2011, Jordan Walke – một nhân viên của Facebook đã khởi tạo ReactJS với mục đích là cải thiện quá trình phát triển UI
2.3.2 Cấu trúc hệ điều hành Linux
Copies for internal use only in Phenikaa University
Trang 143
Kernel: Hay được gọi là phần “Nhân” vì đây là phần quan trọng nhất trong máy
tính bởi chứa đựng các module hay các thư viện để quản lý, giao tiếp giữa phần cứng máy tính và các ứng dụng
Shell: Shell là phần cứng có chức năng thực thi các lệnh (command) từ người
dùng hoặc từ các ứng dụng yêu cầu, chuyển đến cho Kernel xử lý Shell chính là cầu nối để kết nối Kernel và Application, phiên dịch các lệnh từ Application gửi đến kernel để thực thi Có các loại Shell như sau: sh (the Bourne Shell), bash (Bourne-again shell), csh (C shell), ash (Almquist shell), tsh (TENEX C shell), zsh (Z shell)
Application: Đây là phần quen thuộc với chúng ta nhất, phần để cài đặt ứng dụng,
chạy ứng dụng để người dùng có thể phục vụ cho nhu cầu cảu mình
2.3.3 Công dụng của hệ điều hành Linux
Tương tự như các hệ điều hành khác, Linux cung cấp môi trường trung gian để người dùng có thể giao tiếp với phần cứng máy tính, thực hiện các công việc của mình
Bên cạnhd đó, nhờ ứng dụng mã nguồn mở mà Linux đem lại nhiều sự thoải mái hơn cho người dùng, đặc biệt các lập trình viên, nhà phát triển
2.3.4 Ưu nhược điểm của hệ điều hành Linux
2.4.2 Lợi ích của Cloud Computing
Chi phí: Tiết kiệm chi phí chính là lợi ích đầu tiên mà Cloud Computing mang lại
cho người dùng Thay vì bỏ chi phí đầu tư cả một hệ thống máy chỉ để lưu trữ dữ liệu, chịu các chi phí vận hành hay bảo dưỡng hàng năm thì chỉ cần phải dành một khoản tiền nhỏ để duy trì chúng
Tính mở rộng: Lợi ích thứ hai của điện toán đám mây đó là khả năng mở rộng
linh hoạt về quy mô của nó Điều này có nghĩa là sẽ được phân phối đúng lượng tài nguyên cần thiết với nhu cầu sử dụng của mình Có thể bổ sung tài nguyên bất
cứ khi nào phát sinh nhu cầu và tại đúng vị trí địa lý mong muốn
Hiệu năng: Lợi ích thứ ba là vấn đề về hiệu năng Các dịch vụ điện toán đám mây
lớn nhất chạy trên mạng lưới trung tâm dữ liệu an toàn trên thế giới Và đương nhiên chúng được nâng cấp thường xuyên để tăng hiệu quả và mức độ bảo mật So với mô hình trung tâm dữ liệu quy mô nhỏ như một công ty điều này mang lại lợi
Copies for internal use only in Phenikaa University
Trang 154
ích cực lớn như giảm độ trễ mạng và tăng tính kinh tế khi áp dụng theo quy mô lớn hơn
Bảo mật: Lợi ích thứ tư là tính bảo mật Nhiều nhà cung cấp dịch vụ đám mây
cung cấp một loạt các chính sách, công nghê và kiểm soát nhằm củng cố tính bảo mật Qua đó nó giúp bảo vệ dữ liệu, ứng dụng và cơ sở hạ tầng khỏi các mối đe doạ tiềm ẩn hay các cuộc tấn công mạng vẫn thường xuyên xảy ra
Tốc độ: Lợi ích thứ năm là tốc độ Hầu hết các dịch vụ Cloud Computing hiện
nay đều được cung cấp dịch vụ theo yêu cầu Nghĩa là cần bao nhiêu có bấy nhiêu Thậm chí ngay một lượng lớn tài nguyên máy tính cũng có thể được cung cấp chỉ trong vài phút Như vậy sẽ không cần áp lực trong việc lên kế hoạch tính toán công suất cho phù hợp nữa Thay vào đó có thể sử dụng bình thường, khi cần có thể bổ sung ngay lập tức
Độ tin cậy: Lợi ích cuối cùng là tính tin cậy của hệ thống Các đơn vị trung gian
chuyên cung cấp các dịch vụ về Cloud, máy chủ, … như AWS luôn có các biện pháp giúp người dùng sao lưu và bảo vệ dữ liệu Thậm chí họ còn có các trung tâm DC / DR giúp khôi phục dữ liệu khi bị tấn công vào mạng và duy trì hoạt động liên tục của hệ thống Đây là những thứ mà phạm vi nhỏ như một công ty đơn lẻ sẽ khó có thể đáp ứng được
2.5 Tìm hiểu về AWS
2.5.1 AWS là gì?
AWS (Amazon Web Service ) là nền tảng dịch vụ đám mây an toàn, mang đến khả năng tính toán, lưu trữ cơ sở dữ liệu, phân phối nội dung và các chức năng khác nhằm giúp các doanh nghiệp mở rộng và phát triển
2.5.2 Một số dịch vụ trên AWS
Compute
o Amazone Elastic Computer Cloud (EC2): dịch vụ máy chủ ảo
o Elastic Load Balacing (ELB): dịch vụ cân bằng tải
o AWS Lambda: dịch vụ triển khai code không server (serverless)
o AWS Elastic Beantalk : triển khai các ứng dụng web
o VM Import/Export: import/export ảnh các máy ảo
Storage and Content Delivery
o Amazon S3: dịch vụ lưu trữ đối tượng
o Amazon Glacier: dịch vụ lưu trữ dữ liệu ít truy cập
o Amazon Elastic Block Store (EBS): dịch vụ lưu trữ dạng khối, phục vụ
EC2 nhưng độc lập EC2
o Amazon Elastic File System (EFS): dịch vụ lưu trữ và chia sẻ file
o Amazon CloudFront: dịch vụ phân phối nội dung (content delivery)
o Amazon Storage Gateway: dịch vụ cổng lưu trữ dữ liệu
o Amazon AWS Import/Export Snowball: dịch vụ di chuyển dữ liệu trực
tiếp lên đám mây của AWS
Database
o Amazon RDS: dịch vụ cơ sở dữ liệu mô hình quan hệ Amazon Aurora,
Oracle, Microsoft SQL Server, PostgreSQL, MySQL & MariaDB
o Amazon DynamoDB: dịch vụ cơ sở dữ liệu NoSQL của Amazon
o Amazon Redshift: dịch vụ kho dữ liệu của Amazon
o Amazon ElastiCache: dịch vụ cache dữ liệu của Amazon
Networking
o Amazon VPC: dịch vụ mạng riêng ảo
Copies for internal use only in Phenikaa University
Trang 16o Amazon CodeCommit: dịch vụ quản lý code, có thể giao tiếp với git
o Amazon CodeDeploy: dịch vụ triển khai code tự động lên các máy chủ ảo
EC2, Lambda
o Amazon CodePipeline: dịch vụ liên quan đến code như cập nhật, biên
dịch, test, …
Management tools
o Amazon CloudWatch: giám sát các nguồn tài nguyên
o AWS CloudFormation: quản lý các nguồn tài nguyên
o AWS CloudTrail: dịch vụ lưu lại lịch sử hoạt động các dịch vụ
o AWS Config: dịch vụ quản lý cấu hình AWS
o AWS OpsWorks: dịch vụ định nghĩa cấu trúc ứng dụng
o AWS Service Catalog: dịch vụ quản lý danh mục dịch vụ IT trên AWS
o AWS Trusted Advisor: công cụ trực tuyến giám sát giới hạn dịch vụ
Security and Identity
o AWS Identity and Access Management: quản lý người dùng và quyền truy
cập dịch vụ AWS
o AWS Key Management Service (KMS): quản lý khoá mã hoá các dịch vụ
o AWS Directory Service: quản lý và truy cập các tài nguyên dễ dàng
o AWS WAF: Dịch vụ tường lửa cho các ứng dụng web
o AWS CloudHSM: dịch vụ bảo mật các mô đun phần cứng Sinh và quản lý
2.6.2 Nginx có tính năng gì?
Có khả năng xử lý hơn 10000 kết nối cùng lúc với bộ nhớ thấp
Phục vụ tập tin tĩnh (static files) và lập chỉ mục tập tin
Tăng tốc reverse proxy bằng bộ nhớ đệm (cache), cân bằng tải đơn giản và khả năng chịu lỗi
Hỗ trợ mã hoá SSL và TLS
Cấu hình linh hoạt, lưu lại nhật ký truy vấn
Chuyển hướng lỗi 3xx-5xx
Hỗ trợ và tương thích với IPv6
Hỗ trợ truyền tải file FLV và MP4
Hạn chế tỉ lệ đáp ứng truy vấn
Rewrite URL (URL rewriting) dùng regular exporssions
Hỗ trợ tăng tốc với bộ nhớ đệm của FastCGI, uwsgi, SCGI, và các máy chủ
Trang 176
Docker là một nền tảng để cung cấp cách để building, deploying và running ứng dụng
dễ dàng hơn bằng cách sử dụng các containers (trên nền tảng ảo hoá) Ban đầu viết bằng python, hiện tại đã chuyển sang Golang
2.7.2 Container trong Docker là gì?
Các containers cho phép lập trình viên đóng gói một ứng dụng với tắt cả các phần cần thiết, chẳng hạn như thư viện và các phụ thuốc khác, và gói tất cả ra dưới dạng một package
Bằng cách đó, nhờ vào container, ứng dụng sẽ chạy trên mọi máy Linux khác bất
kể mọi cài đặt tuỳ chỉnh mà máy có thể có khách với máy được sử dụng để viết code
Theo một cách nào đó, Docker khá giống Virtual machine Nhưng tại sao Docker lại phát triển, phổ biến nhanh chóng? Đây là những nguyên nhân:
o Tính dễ ứng dụng: Docker rất dễ cho mọi người sử dụng từ lập trình viên,
sys admin … nó tận dụng lợi thế của Container để build, test nhanh chóng
Có thể đóng gói ứng dụng trên laptop của họ và chạy trên public cloud, private cloud … Câu thần chú là “Build once, run anywhere”
o Tốc độ: Docker container rất nhẹ và nhanh, có thể tạo và chạy docker
container trong vài giây
o Môi trường chạy và khả năng mở rộng: Có thể chia nhỏ những chức
năng của ứng dụng thành các container riêng lẻ Ví dụ Redis Cache có thể chạy trên một container khác trong khi ứng dụng Nodejs lại chạy trên một cái khác nữa Với Docker, rất dễ để liên kết các Container với nhau để tạo thành một ứng dụng, làm cho nó dễ dàng scale, update các thành phần độc lập với nhau
Với su hướng dịch chuyển sang microservices của các hệ thống lớn, Docker đang làm một thành phần cực kỳ quan trọng, làm cho nó trở thành một phần của nhiều công cụ DevOps Hiện tại thế giới đang sử dụng một công cụ quản lý container tiên tiến khác là Kubernetes
2.7.3 Các khái niện liên quan
Docker Engine: là thành phần chính của Docker, như một công cụ để đóng gói
ứng dụng
Docker Hub: là một “github for docker images” Trên Docker Hub có hàng ngàn
public images được tạo bởi động đồng cho phép dễ dàng tìm thấy image cần tìm
Và chỉ cần pull về và sử dụng với một số config mong muốn
Images: là một khuôn mẫu để tạo một container Thường thì image sẽ dựa trên 1
image có sẵn với những tuỳ chỉnh thêm Ví dụ build 1 image dựa trên image Centos mẫu có sẵn để chạy Nginx và những tuỳ chỉnh, cấu hình để ứng dụng web
có thể chạy được
Container: là một instance của một image Có thể create, start, stop, move hoặc
delete container dựa trên Docker API hoặc Docker CLI
Docker Client: là một công cụ giúp người dùng giao tiếp với Docker host
Docker Daemon: lắng nghe các yêu cầu từ Docker Client để quản lý đối tượng
như Container, Image, Network và Volumes thông qua REST API Các Docker Daemon cũng giao tiếp với nhau để quản lý Docker Service
Dockerfile: là một tập tin bao gồm các chỉ dẫn để build một images
Docker volumes: là phần dữ liệu được tạo ra khi container được khởi tạo
Copies for internal use only in Phenikaa University
Trang 181 EC2 NMQShop
Monitor
11.11.111.68 54.169.24.219 Amazon Linux 2 c3.xlarge $146.68
2 EC2 NMQShop web 11.11.111.169 Amazon Linux 2 t2.micro free
3 EC2 NMQShop DB 11.11.111.45 Amazon Linux 2 t2.micro free
Trang 198
3.2 Tạo VPC trên AWS
Đầu tiên truy cập vào AWS và chọn vào ô tìm kiếm và tìm VPC Service
Hình 2: Tìm Kiếm các Service trên AWS
Sau khi hiển thị ra trang “VPC dashboard” > “Your VPCs” > “Create VPC”
Hình 3: Tạo VPCs
Tiếp đó tại phần “Create VPC” lần lượt đặt tên cho VPC tại mục “Name tag”,
đặt dải ip cho VPC tại mục “IPv4 CIDR” Sau đó nhấn nút “Create VPC”
Copies for internal use only in Phenikaa University
Trang 209
Hình 4: Các bước tạo VPC
Sau khi tạo xong VPC chúng ta sẽ đến bước tiếp theo để tạo Subnet
3.3 Tạo Subnet trên AWS
Phần Subnet vẫn thuộc trong dịch vụ VPC, nên tại trang VPC đã mở ở phần trước
chúng ta sẽ chọn luôn vào phần “Subnet” ngay dưới phần “Your VPCs” ở bước
trên
Hình 5: Tạo mới subnet
Sau khi vào giao diện tạo subnet thì ở đây lần lượt chúng ta sẽ làm các bước như sau:
o Tại phần “VPC ID” này dùng để chọn VPC mà đã tạo từ phần trước
o Tại phần “Subnet name” Chọn tên cho subnet
o Tại phần “Availability Zone” này để chọn vùng sẽ chứa cái subnet đó
o Tại phần “IPv4 CIDR block” này sẽ gắn subnet nằm trong dải ip đã đặt từ
Trang 2110
Hình 6: các bước tạo subnet
3.4 Tạo Route Table trên AWS
3.4.1 Tạo Public Route Table trên AWS
Tại phần tạo Public Route Table vẫn thuộc trong dịch vụ VPC nên là chúng ta sẽ
chọn vào “Route table” ngay dưới phần “Subnets” như bước trên
Hình 8: Tạo mới Route table
Sau khi vào giao diện tạo Route table thì chúng ta sẽ lần lượt đặt tên cho Route
table, tiếp đến là chọn VPC đã tạo từ trước Cuối cùng chọn vào “Create Route
table”
Copies for internal use only in Phenikaa University
Trang 2211
Hình 7: Các bước tạo Route table
Sau khi tạo xong Route table thì tiếp đến chúng ta phải cấu hình cho Public route
table ra được internet thì chúng ta sẽ tạo “Internet gateways” trước
Internet Gateway cũng thuộc trong dịch vụ của VPC Nên chúng ta sẽ chọn vào
“Internet gateways” ở ngay dưới phần “Route tables”
Trong phần tạo “Internet gateway” thì chúng ta chỉ cần đặt tên cho “Internet
gateway” và click vào “Create internet gateway”
Hình 8: Tạo mới Internet Gateways
Copies for internal use only in Phenikaa University
Trang 2312
Hình 9: Các bước tạo Internet gateways
Sau khi tạo xong “Internet gateways” chúng ta sẽ quay lại Route table vừa tạo và chọn vào “Routes” Tiếp đến là chọn “Edit routes”
Hình 10: Chỉnh sửa Routes in Route table
Sau khi vào trang “Edit routes” thì chúng ta chọn “Add route” Tại cột
“Destination” chọn 0.0.0.0/0 và tiếp đó tại cột “Target” thì chọn “Internet
gateway” rồi chọn id của internet gateway vừa tạo ở trên Cuối cùng thì chọn
“Save changes” để lưu cài đặt
Copies for internal use only in Phenikaa University
Trang 2413
Hình 11: Thêm internet gateways vào route table
Sau khi thêm “Internet gateways” vào trong Route table thành công, thì lúc này
chúng ta tiếp thục gắn những subnet đã tạo vào Public route table để những subnet
này có thể đi ra ngoài internet nhờ vào “Internet gateway”
Tại phần này chúng ta sẽ tiếp tục ở màn hình như ở bước trước và chọn vào tag
“Subnet associations”, tiếp đến chọn vào “Edit subnet associations”
Sau khi hiển thị màn hình “Edit subnet associations” thì chỉ cần chọn subnet muốn ra internet và nhấn nút “Save associations” là chúng ta đã hoàn thành tạo
“Public route table”
Hình 12: Chỉnh Subnet associations
3.4.2 Tạo Private Route Table trên AWS
Tại bước tạo Private Route Table tạo cũng giống như các bước tạo Public Route
Table Tại bước này chúng ta sẽ chỉ tạo “NAT Gateways” và gắn Nat Gateway
vào trong Private Route Table
Đầu tiên chúng ta sẽ chọn vào “NAT Gateways” ở dưới mục “Endpoint
Services” Sau đó chúng ta sẽ chọn “Create NAT gateway” để tạo mới NAT
gateway
Copies for internal use only in Phenikaa University
Trang 2514
Hình 13: tạo mới NAT gateway
Sau khi truy cập vào phần “Create NAT gateway” chúng ta sẽ thực hiện các
bước như sau:
o Tại phần “Name” này chọn tên cho NAT gateway
o Tại phần “Subnet” này chúng ta sẽ chọn Subnet ra được internet
o Tại phần “Elastic IP allocation ID” nếu đã có “Elastic IP” thì sẽ chọn Elastic IP đó còn nếu không thì click vào “Allocate Elastic IP” và cuối cùng chọn vào “Create NAT gateway” để hoàn thành.
Hình 14: Các bước tạo NAT Gateway
Tại phần gắn “NAT gateway” vào trong Route table chúng ta sẽ làm các bước
như khi tạo Public route table ở trên Và gán những subnet không ra internet vào Private Route table
3.5 Tạo Instance trên AWS
Đầu tiên tương tự như tạo VPC chúng ta cũng phải tìm kiếm dịch vụ EC2 trên AWS
Copies for internal use only in Phenikaa University