Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws
Show
Trong dự án này, bạn sẽ tìm hiểu cách triển khai một ứng dụng web Node.js có độ sẵn sàng cao bằng AWS Elastic Beanstalk và Amazon DynamoDB. Ứng dụng mẫu mà bạn triển khai có sử dụng Node.js, Express và một cơ sở dữ liệu NoSQL. Với Elastic Beanstalk, bạn có thể dễ dàng tải mã lên và Elastic Beanstalk sẽ tự động xử lý việc triển khai, từ cung cấp công suất, cân bằng tải, tự động thay đổi quy mô đến giám sát trạng thái ứng dụng. Elastic Beanstalk tự động tăng và giảm quy mô ứng dụng của bạn dựa vào nhu cầu cụ thể của ứng dụng bằng cách sử dụng các cài đặt Auto Scaling có thể dễ dàng điều chỉnh. Amazon DynamoDB là dịch vụ cơ sở dữ liệu NoSQL nhanh và linh hoạt cho tất cả các ứng dụng cần độ trễ ổn định ở mức vài mili giây trên mọi quy mô. Đây là cơ sở dữ liệu đám mây được quản lý toàn phần và hỗ trợ cả mô hình lưu trữ theo tài liệu và cặp khóa-giá trị. Nếu dùng ứng dụng mẫu, bạn cũng sẽ sử dụng Amazon Simple Notification Service (SNS) để định cấu hình thông báo đẩy cho ứng dụng.
Những điều bạn sẽ đạt được: Khởi chạy một môi trường ứng dụng web Node.js bằng AWS Elastic Beanstalk và Amazon DynamoDB. Elastic Beanstalk cung cấp và quản lý cơ sở hạ tầng nền (ví dụ: các phiên bản Amazon EC2) và các thành phần ngăn xếp (ví dụ: hệ điều hành, máy chủ web, ngôn ngữ/khung) cho bạn. DynamoDB cung cấp cơ sở dữ liệu NoSQL. bằng AWS Elastic Beanstalk và Amazon DynamoDB. Elastic Beanstalk cung cấp và quản lý cơ sở hạ tầng nền (ví dụ: các phiên bản Amazon EC2) và các thành phần ngăn xếp (ví dụ: hệ điều hành, máy chủ web, ngôn ngữ/khung) cho bạn. DynamoDB cung cấp cơ sở dữ liệu NoSQL. Triển khai ứng dụng web của bạn bằng AWS Elastic Beanstalk. Bạn sẽ tải mã lên Elastic Beanstalk, nơi xử lý tất cả các chi tiết triển khai cho bạn. bằng AWS Elastic Beanstalk. Bạn sẽ tải mã lên Elastic Beanstalk, nơi xử lý tất cả các chi tiết triển khai cho bạn. Nhận thông báo qua email bằng Amazon Simple Notification Service (SNS). Nếu dùng ứng dụng mẫu, bạn sẽ nhận được thông báo từ SNS mỗi khi có người nào đó ghi một bản ghi vào bảng DynamoDB của bạn. bằng Amazon Simple Notification Service (SNS). Nếu dùng ứng dụng mẫu, bạn sẽ nhận được thông báo từ SNS mỗi khi có người nào đó ghi một bản ghi
vào bảng DynamoDB của bạn. Những gì bạn cần trước khi bắt đầu: Một tài khoản AWS: Bạn cần có tài khoản AWS để bắt đầu cung cấp tài nguyên để lưu trữ trang web của mình. Đăng ký AWS. Bạn cần có tài khoản AWS để bắt đầu cung cấp tài nguyên để lưu trữ trang web của mình. Đăng ký AWS. Kinh nghiệm về CNTT: Để hoàn thành dự án này, bạn nên (nhưng không bắt buộc) có hiểu biết cơ bản về các công nghệ web và Node.js. Để hoàn thành dự án này, bạn nên (nhưng không bắt buộc) có hiểu biết cơ bản về các công nghệ web và Node.js. Kinh nghiệm sử dụng AWS: Không cần kinh nghiệm trước đây với AWS để hoàn thành dự án này.: Không cần kinh nghiệm trước đây với AWS để hoàn thành dự án này. Mã (không bắt buộc): Nếu có mã cho ứng dụng, bạn có thể triển khai mã dựa vào hướng dẫn này. Bạn cũng có thể dùng mã ứng dụng mẫu được cung cấp trong dự án này.: Nếu có mã cho ứng dụng, bạn có thể triển khai mã dựa vào hướng dẫn này. Bạn cũng có thể dùng mã ứng dụng mẫu được cung cấp trong dự án này. Chi phí để hoàn thành dự án: Chi phí ước tính để hoàn thành dự án này là 0.04 USD. Chi phí này giả định rằng bạn sử dụng trong giới hạn Bậc miễn phí của AWS, tuân thủ các cấu hình được đề xuất và chấm dứt mọi tài nguyên trong vòng 1 giờ sau khi hoàn thành dự án. Trường hợp sử dụng của bạn có thể cần đến các cấu hình khác nhau và điều đó có thể tác động đến hóa đơn của bạn. Sử dụng Bộ tính toán giá để ước tính các chi phí theo nhu cầu của bạn: Chi phí ước tính để hoàn thành dự án này là 0.04 USD. Chi phí này giả định rằng bạn sử dụng trong giới hạn Bậc miễn phí của AWS, tuân thủ các cấu hình được đề xuất và chấm dứt mọi tài nguyên trong vòng 1 giờ sau khi hoàn thành dự án. Trường hợp sử dụng của bạn có thể cần đến các cấu hình khác nhau và điều đó có thể tác động đến hóa đơn của bạn. Sử dụng Bộ tính toán giá để ước tính các chi phí theo nhu cầu của bạn Ước tính hóa đơn hàng tháng: Tổng chi phí cho việc khởi chạy một ứng dụng web Node.js sẽ thay đổi tùy thuộc vào mức sử dụng và cài đặt cấu hình của bạn. Thông thường, cấu hình mặc định được đề xuất trong hướng dẫn này sẽ tốn khoảng 28 USD/tháng nếu bạn sử dụng trong giới hạn Bậc miễn phí của AWS. Để tìm hiểu chi tiết các dịch vụ được sử dụng và chi phí liên quan, hãy xem Dịch vụ được sử dụng và chi phí.: Tổng chi phí cho việc khởi chạy một ứng dụng web Node.js sẽ thay đổi tùy thuộc vào mức sử dụng
và cài đặt cấu hình của bạn. Thông thường, cấu hình mặc định được đề xuất trong hướng dẫn này sẽ tốn khoảng 28 USD/tháng nếu bạn sử dụng trong giới hạn Bậc miễn phí của AWS. Để tìm hiểu chi tiết các dịch vụ được sử dụng và chi phí liên quan, hãy xem Dịch vụ được sử dụng và chi phí. Tìm hiểu thêm về AWS Elastic Beanstalk, một dịch vụ dễ sử dụng để triển khai và thay đổi quy mô các ứng dụng web và dịch vụ được phát triển bằng Java, .NET, PHP, Node.js, Python, Ruby, Go và Docker trên những máy chủ quen thuộc như Apache, Nginx, Passenger và IIS. Tìm và khởi chạy các hình ảnh được định cấu hình sẵn bằng cách chạy ngăn xếp Node.js từ AWS Marketplace. Tăng tốc cho ứng dụng Node.js bằng Lightsail. Bạn sẽ có mọi thứ cần thiết để khởi động ứng dụng của mình trên AWS - điện toán, lưu trữ và kết nối mạng - với mức giá thấp, có thể ước lượng trước. Bạn cần thêm tài nguyên để bắt đầu sử dụng AWS? Truy cập Trung tâm tài nguyên về Bắt đầu để tìm hiểu thêm. AWS sẽ ngừng hỗ trợ cho Internet Explorer vào 07/31/2022. Các trình duyệt được hỗ trợ là Chrome, Firefox, Edge và Safari. Tìm hiểu thêm » Có rất nhiều cách để triển khai ứng dụng Nodejs, dù trên Cloud hay hạ tầng vật lý (on-premise). Tuy nhiên, phát triển ứng dụng ở đâu và như thế nào là điều chúng ta quan tâm. Ngoài ra, bảo mật cũng là một khía cạnh quan trọng mà nếu bỏ qua, ứng dụng của bạn sẽ không tồn tại dài lâu được, và sẽ luôn có khả năng cao các thông tin quan trọng sẽ bị tiết lộ cho người ngoài. Do đó, bài viết này sẽ hướng dẫn bạn từng bước để triển khai một ứng dụng Nodejs trên AWS một cách đầy đủ nhất, đưa ứng dụng lên server sử dụng Docker container, RDS Amazon Aurora, Nginx với HTTPS, và truy cập vào ứng dụng bằng tên miền (domain name). 1. Tool StackNodejs Sample AppMột sample app Nodejs với 3 API viz, status, insert và list. Các API này sẽ được sử dụng để kiểm tra trạng thái của ứng dụng, đưa dữ liệu vào cơ sở dữ liệu, và cho phép gửi và hiển thị dữ liệu từ cơ sở dữ liệu. AWS EC2 InstanceMột AWS EC2 instance được chạy trên hệ điều hành Ubuntu 20.04 LTS được sử dụng để triển khai ứng dụng Nodejs được đóng gói (containerized). Ta sẽ tải Docker trong instance này, đặt bên trên các containers sẽ được tạo ra về sau. Chúng ta cũng sẽ tải MySQL Client vào trong instance. MySQL Client yêu cầu kết nối với Aurora Instance để tạo một table bắt buộc. AWS RDS Amazon AuroraDữ liệu của bạn sẽ được lưu trữ tại AWS RDS Amazon Aurora. Ta sẽ lưu trữ các trường cơ bản như tên người dùng (username), email-id và tuổi. Amazon Aurora là một hệ cơ sở dữ liệu liên kết dạng MySQL và PostgreSQL trên AWS. DockerDocker là một nền tảng được đóng gói (containerization) để xây các Docker Images, triển khai chúng qua containers. Ta sẽ triển khai ứng dụng Nodejs trên server, Nginx, và Certbot là Docker Containers. Docker-ComposeĐể code các containers Nodejs, Nginx hay Certbot, ta sử dụng Docker-Compose. Docker Compose giúp giảm thời gian triển khai container và quản lý thời gian tốt hơn. NginxNginx được sử dụng để kích hoạt HTTPS cho sample app Nodejs, điều hướng mọi request từ user tới ứng dụng Nodejs. Nó hoạt động như một reverse proxy dùng để điều hướng user request tới ứng dụng, đồng thời hỗ trợ bảo mật trong việc kết nối bằng việc cung cấp cấu hình để kích hoạt SSL/HTTPS. CertbotCertbot cho phép chúng ta tự động sử dụng Let’s Encrypt cho Domain Validation (xác thực miền – DV) và đạt được chứng chỉ SSL. DomainỞ cuối phần doc, bạn sẽ được truy cập vào sample app Nodejs, sử dụng tên miền của bạn trên HTTPS, ví dụ, sample app Nodejs của bạn sẽ được bảo mật trên Internet. PostManTa sẽ sử dụng Postman để kiểm tra các API như là kiểm tra trạng thái, chèn dữ liệu, liệt kê dữ liệu từ cơ sở dữ liệu. Như đã nói phía trên, ta sẽ “triển khai một ứng dụng Nodejs trên AWS … đưa ứng dụng lên server sử dụng Docker container, RDS Amazon Aurora, Nginx với HTTPS, và truy cập vào ứng dụng bằng tên miền (domain name).” Đầu tiên, ta sẽ cùng tìm hiểu về hạ tầng kiến trúc trước khi bắt tay thực hiện. 2. Kiến trúc: Triển khai ứng dụng Nodejs lên server qua Docker container, RDS Amazon Aurora, Nginx với HTTPS, truy cập qua tên miềnTriển khai ứng dụng Nodejs lên EC2 instance bằng Docker sẽ khả dụng trên cổng 3000. Sample app Nodejs này sẽ truy xuất dữ liệu từ instance RDS Amazon Aurora được tạo ra từ các VPC tương tự như trên EC2 instance. Một instance Amazon Aurora DB sẽ được bảo mật và được truy cập trong cùng một VPC. Ứng dụng Nodejs được triển khai trên EC2 instance có thể được truy cập bằng cách sử dụng public IP trên cổng 3000, tuy nhiên chúng ta sẽ không làm vậy. Truy cập vào các ứng dụng trên cổng non-standard là điều không khuyến khích, do đó chúng ta sẽ có Nginx được vận hành như một reserve proxy, kích hoạt cổng SSL. Người dùng sẽ cố gắng truy cập vào ứng dụng bằng cách sử dụng tên miền, và các yêu cầu này sẽ được chuyển tiếp sang cho Nginx. Nginx sẽ kiểm tra yêu cầu dựa trên API, rồi chuyển yêu cầu đó cho ứng dụng Nodejs. Việc yêu cầu này sẽ dừng lại với SSL, đánh dấu cho kết quả làm việc giữa client và server khi đã được bảo mật hoàn toàn. Dưới đây là một sơ đồ kiến trúc hạ tầng giúp ta hình dung về cách triển khai ứng dụng Nodejs trên AWS: 3. Điều kiện tiên quyếtTrước khi ta bắt tay vào triển khai ứng dụng Nodejs trên AWS, hãy chắc chắn rằng ta đã hoàn thành xong các điều kiện tiên quyết dưới đây:
4. Tạo Ubuntu 20.04 LTS EC2 Instance trên AWSTruy cập vào trang web https://AWS.amazon.com/console/ và đăng nhập vào tài khoản của bạn. Sau khi đã đăng nhập thành công, nhấn vào thanh tìm kiếm và gõ EC2. Nhấn vào kết quả để tới dashboard của EC2 và bắt đầu tạo một EC2 instance. Tại đây, nhấn vào “Launch instance” để cấu hình và tạo một EC2 instance. Chọn AMI “Ubuntu Server 20.04 LTS”. Chúng tôi khuyên bạn nên chọn t3.small cho riêng việc kiểm thử, nó sẽ tốn khoảng 2 CPUs và 2GB RAM. Bạn có thể chọn loại instance tùy theo nhu cầu. Bạn có thể giữ các cài đặt có sẵn và tiếp tục triển khai. Tại đây, tôi đã chọn VPC mặc định, nếu bạn muốn bạn có thể chọn VPC khác. Ghi nhớ rằng, ở đây chúng ta sẽ tạo một instance trên Public Subnet. Tốt nhất, bạn nên chọn dung lượng lớn hơn khoảng 30GB. Các phần khác có thể để mặc định. Chọn các tag như “Name” “Environment” tùy theo lựa chọn của bạn. Bạn cũng có thể bỏ qua phần này. Cho phép kết nối tới cổng 22 chỉ qua IP của bạn. Nếu bạn cho phép kết nối từ 0.0.0.0/0., instance của bạn sẽ được truy cập bởi bất kỳ ai qua cổng 22. Kiểm tra lại cấu hình, sau đó nhấn vào “Launch” nếu bạn thấy mọi thứ đã sẵn sàng để tạo một instance. Trước khi một instance được tạo ra, nó cần một key-pair. Bạn có thể tạo ra một key-pair mới hoặc sử dụng một key-pair có sẵn. Nhấn vào “Launch instances” để bắt đầu bước khởi tạo một instance. Vào bảng điều khiển và kiểm tra instance của bạn. Nhấn vào nút “View instances”. Tại đây, bạn có thể thấy instance đã được tạo và đang trong giai đoạn “Initiating”. Trong khoảng 1-2 phút, bạn sẽ thấy instance bắt đầu chạy. Trong thời gian đó, ta sẽ cùng tạo một RDS instance nhé. 5. Tạo RDS Aurora với MySql Instance trên AWSMột lần nữa, nhấn vào thanh tìm kiếm ở đầu trang, và lần này ta sẽ tìm “RDS”. Nhấn vào kết quả để truy cập vào dashboard của RDS. Tại trang chủ của RDS, nhấn vào “Create database” để cấu hình và tạo một RDS instance. Chọn “Easy create” cho method, “Amazon Aurora” cho engine type, “Dev/Test” cho DB instance size. Kéo xuống một chút và chọn “DB cluster identifier” như “my-Nodejs-database”. Bạn có thể đặt một tên khác tùy ý, khi nó chỉ là cái tên gán cho RDS instance. Tuy nhiên, ta nên sử dụng cái tên trùng nhau để không lẫn lộn trong các bước sau đó. Đồng thời, đặt master username là “admin”, cài đặt mật khẩu, rồi nhấn vào “Create database”. Đây là các bước tiên quyết để tạo ra một RDS Amazon Aurora instance. Lưu ý rằng trên môi trường production và live thì bạn không được đặt username và mật khẩu đơn giản. Tại đây, bạn có thể thấy instance đang trong quá trình “khởi tạo”. Trong vòng 5-10 phút tới, instance sẽ chạy. Tại đây, ta cần lưu ý:
6. Cài đặt dependencies trên EC2 InstanceBây giờ, bạn có thể kết nối tới Instance mà bạn vừa tạo ra. MySql ClientTa sẽ cần một MySQL client để kết nối với RDS Amazon Aurora instance và tạo một cơ sở dữ liệu bên trong nó. Kết nối với EC2 instance và thực thi các lệnh từ đó.
Tạo bảngTa sẽ cần một bảng trong RDS Amazon Aurora instance để lưu trữ dữ liệu từ các ứng dụng. Để tạo bảng, kết nối tới RDS Amazon Aurora instance bằng cách sử dụng MySQL server bạn vừa tải trên EC2 instance ở bước đầu tiên. Sao chép Database Endpoint từ Amazon Aurora instance. Thực thi các lệnh tiếp theo với giá trị chính xác
Sau đó, lệnh của bạn sẽ xuất hiện như sau:
Một khi bạn đã kết nối tới Amazon RDS Aurora instance, thực thi tiếp các lệnh sao để tạo một bảng có tên “users”. show databases; use main; CREATE TABLE IF NOT EXISTS users(id int NOT NULL AUTO_INCREMENT, username varchar(30), email varchar(255), age int, PRIMARY KEY(id)); select * from users; Bạn có thể nhìn vào ảnh chụp màn hình bên dưới để xem các lệnh trên đã chạy thế nào: Tạo đường dẫn thư mục ứng dụng (Application Directory)Bây giờ chúng ta sẽ tạo một đường dẫn có thể giúp ta lưu trữ codebase và các tệp cấu hình.
Clone phần code repository trên EC2 instanceClone phần Github Repository đang chứa toàn bộ code của bạn. Đây là một bước không bắt buộc. Nếu bạn đã sao chép toàn bộ tệp từ repository sang application directory, bạn không cần phải tạo thêm tệp trong các bước sau nữa. Tuy nhiên, bạn vẫn cần tạo một số thay đổi nhất định.
7. Triển khai ứng dụng Deploy Nodejs trên AWS EC2 instance sử dụng Docker container, RDS Amazon Aurora, Nginx với HTTPS, và truy cập ứng dụng qua tên miềnTại sao cần sử dụng Docker trên EC2 instance?Docker là một công cụ được đóng gói (containerization) để đóng gói các phần mềm trở thành các “image” có thể sử dụng để tạo các containers Docker. Docker giúp ta tạo lập, chia sẻ và triển khai các ứng dụng một cách dễ dàng. Bước đầu tiên để “Docker hóa” chính là tải Docker. Tải Docker
cat /etc/issue
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo “deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Tải về phiên bản mới nhất của Docker Engine và containerd
Kiểm tra phiên bản Docker hiện tại
Quản lý Docker với tư cách là non-root user
Thêm user vào nhóm docker
exitĐăng nhập lại vào terminal Xác thực việc bạn có thể chạy các lệnh docker mà không cần sudo
Docker hóa ứng dụng Nodejs trên EC2 instance Sau khi tải về Docker, bước tiếp theo bạn cần “docker hóa” ứng dụng của bạn. Docker hóa một ứng dụng Nodejs có thể hiểu là viết một Dockerfile theo hướng dẫn để tạo một Docker Image. Ta sẽ cùng tạo một Dockerfile và một sample cho ứng dụng Nodejs. pwd cd /home/ubuntu/Nodejs-docker Create Dockerfile and paste the following in it, alternatively, you can copy the content from here as well. vim Dockerfile #Base Image node:12.18.4-alpine FROM node:12.18.4-alpine #Set working directory to /app WORKDIR /app #Set PATH /app/node_modules/.bin ENV PATH /app/node_modules/.bin:$PATH #Copy package.json in the image COPY package.json ./ #Install Packages RUN npm install express –save RUN npm install mysql –save
COPY . ./ #Expose application port EXPOSE 3000 #Start the app CMD [“node”, “index.js”] Tạo index.js và dán vào phần sau, hoặc bạn có thể copy đoạn code bên dưới. Đây sẽ là sample cho ứng dụng Nodejs của bạn. host: vim index.js const express = require(‘express’); const app = express(); const port = 3000; const mysql = require(‘mysql’); const con = mysql.createConnection({ “my-Nodejs-database.cluster-cxxjkzcl1hwb.eu-west3.rds.amazonAWS.com”, user: “admin”, password: “admin1234” }); app.get(‘/status’, (req, res) => res.send({status: “I’m up and running”})); app.listen(port, () => console.log(`Dockerized Nodejs Applications is listening on port ${port}!`)); app.post(‘/insert’, (req, res) => { if (req.query.username && req.query.email && req.query.age) { }); }); console.log(‘Received an insert call’); con.connect(function(err) { } const port = 3000; const mysql = require(‘mysql’); & NBSP; & nbsp; & nbsp; & nbsp; & nbsp; con.connect (function (err) { & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; { & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; }); }); }); Ở File Phía Trán, HÃy Thay
gói vim.json { & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; }); Ở File Phía Trán, HÃy Thay Máy chủ: Cấm của tôi Người dùng: Quản trị viên ” }, Mật khẩu: “admin1234” Gói tạo.json Và Dán Vào Phần Sau, Hoặc Bạn Có Thể Sao Chéph Phần Code Phía Dưới. gói vim.json & nbsp; & nbsp;& nbsp; & nbsp;
& nbsp; & nbsp; & nbsp; & nbsp;
Um um cập vào ứng dụng, nhóm bảo mật nhóm Khuyến Khích. Bạn Có Thể ĐọC Tiếp Để HiểU
Chọn Tab, quy tắc trong nước, Và Vào Vào N bạn, chỉnh sửa quy tắc trong nước.
Máy chủ TriM Ta sẽ cùnm tạo một docker hình ảnh từ phần mã
http://:3000/insert?username=abc&[email protected]&age=2
Docker PS Bạn thậm Chí ngắn
Giờ ta ue Ứng dụng nodejs docker container Đang Khang Khởi chạy. & Nbsp; Bạn Có Thể Truy Cập VÀO Kiểm tra trạng tháia của kết nối trên /status api sử dụng trình Duyệt. http: //: 3000/trạng thái Bạn Có Thể Thcem Một Vào Dữ Liệu Trong ứng Dụng Qua /Chèn API Sử Dụng ứng Bạn Có Thể Liệt Kê Các Dữ liệu http: //: 3000/danh sáchHoặc bạn Có Thể Sử Dụng lệNh Curl Bênn Trong EC2 Ví dụ
Um um cập vào ứng dụng, nhóm bảo mật nhóm Khuyến Khích. Bạn Có Thể ĐọC Tiếp Để HiểU Bảng điều khiển Truy Cập VOO EC2, Chọn, Chuyển Sang Lab Security Security, Sau đó Chọn Tab, quy tắc trong nước, Và Vào Vào N bạn, chỉnh sửa quy tắc trong nước. ThênM Máy chủ TriM Ta sẽ cùnm tạo một docker hình ảnh từ phần mã } CD/home/ubuntu/nodejs-docker Docker Build -t Nodejs. } gói vim.json Um um cập vào ứng dụng, nhóm bảo mật nhóm Khuyến Khích. Bạn Có Thể ĐọC Tiếp Để HiểU Bảng điều khiển Truy Cập VOO EC2, Chọn, Chuyển Sang Lab Security Security, Sau đó & nbsp; & nbsp; listen [::]:443 ssl http2; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; } & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; chế độ = khối luôn luôn; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 'Không an toàn' dòng 'luôn luôn; } } & nbsp; & nbsp; } Trong tệp ở trênn, bạn gó thể họ Đổi ở 3 dầmg bên dưới. Thay Thay Phần Submain.Domain, Ví dụ NH
Tại Sao Ta Cần nginx ở Trước dịch vụ của nodejs?Ứng dụng nodejs sẽ chạy trên cổng 3000 không chuẩn. Nodejs cung cấp một lối đi cho phép ta dùng https; TUy Nhiênn, Việc cấu hÌnh Protocol Và quản Lý Chứng Chỉ Ssl - Một Cuy sẽ Hết Để GIảI QUYếT VấN Nginx là một loại máy chủ Đặc Biệt Mà Có Thể Hoạt Động NH Tại đNy, ta sẽ dùng nginx như một proxy ngược Để chuyển hướng các yêu cầu vềng d Tại Sao Ta Không Dùng Apache?Apache cũng là một Web Server Và nhập thể hoạt Động NHưt Một Reverse Proxy. Nó cũng hỗ trợ ssl chấm dứt. Tuy Nhiên, Có Một Vài Điểm Khác Biệt Giữa Nginx Và Apache. Làm một vào lý làm, phần lớn mọi người sẽ lựa chọn nginx thay vì apache. Chúnt ta nhập đó
Docker-ComposeTại bước nào, ta sẽ tải docker-compose.
sudo curl -l Hồi https://github.com/docker/compose/releases/doad/1.29.2/docker-compose-$ ( Bin/Docker-Compose
sudo chmod +x/usr/local/bin/docker-compose
Docker-compoSversion
CD/home/ubuntu/nodejs-docker vim docker-compose.yml Phiên bản: 3 3 services: Nodejs: build: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bối cảnh:. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; dockerfile: dockerfile & nbsp; & nbsp; & nbsp; & nbsp; hình ảnh: nodejs & nbsp; & nbsp; & nbsp; & nbsp; container_name: nodejs & nbsp; & nbsp; & nbsp; & nbsp; khởi động lại: trừ khi dừng lại networks: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;-mạng ứng dụng webserver: & nbsp; & nbsp; & nbsp; & nbsp; hình ảnh: nginx: chính-alpine & nbsp; & nbsp; & nbsp; & nbsp; container_name: WebServer & nbsp; & nbsp; & nbsp; & nbsp; khởi động lại: trừ khi dừng lại ports: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;-mạng ứng dụng & nbsp; & nbsp; & nbsp; & nbsp; hình ảnh: nginx: chính-alpine volumes: & nbsp; & nbsp; & nbsp; & nbsp; container_name: WebServer & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;-root web & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;-. depends_on: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;-certbot-etc:/etc networks: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;-mạng ứng dụng certbot: & nbsp; & nbsp; & nbsp; & nbsp; hình ảnh: nginx: chính-alpine & nbsp; & nbsp; & nbsp; & nbsp; container_name: WebServer volumes: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;-root web & nbsp; & nbsp; & nbsp; & nbsp; container_name: WebServer depends_on: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;-root web volumes: certbot-etc: certbot-var: web-root: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;-. driver_opts: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;-certbot-etc:/etc & nbsp; & nbsp; & nbsp; & nbsp; device: /home/ubuntu/Nodejs-docker/views/ & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - dhparam:/etc/ssl/certs dhparam: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;-. driver_opts: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;-certbot-etc:/etc & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - dhparam:/etc/ssl/certs networks: app-network: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - nodejs & nbsp; & nbsp; & nbsp; & nbsp; hình ảnh: certbot/certbot & nbsp; & nbsp; & nbsp; & nbsp; container_name: certbot & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - máy chủ web & nbsp; & nbsp; & nbsp; & nbsp; lệnh: certonly ; -D www.nodejs.devopslee.com& nbsp; & nbsp; & nbsp; & nbsp; #Command: certonly devopslee.com & nbsp; -D www.nodejs.devopslee.com & nbsp; & nbsp; & nbsp; & nbsp; trình điều khiển: địa phương& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; gõ: không có & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; o: bind & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;www.Nodejs.devopslee.com, cả hai đều trỏ về Public IP của EC2 instance. & nbsp; & nbsp; & nbsp; & nbsp; trình điều khiển: cầu Bây giờ, ta sẽ sao chép giá trị của “Type NS Recordset”, thứ mà ta sẽ cần trong các bước tiếp theo. Vào hosted zone của tên miền, tạo một “record” mới với subdomain.domain.com, thêm các giá trị NS bạn vừa sao chép ở bước trên. Bây giờ bạn đã có một sub-domain có thể truy cập vào ứng dụng của bạn. Trong trường hợp của tôi, tôi có thể dùng Nodejs.devopslee.com để truy cập vào ứng dụng Nodejs. Bước tiếp theo, ta sẽ làm bảo mật cho ứng dụng web Nodejs. Bao gồm chứng chỉ SSLTa sẽ tạo một key có thể sử dụng trong Nginx.
Triển khai ứng dụng Nodejs trên EC2 instanceChúng ta đã sẵn sàng để khởi chạy ứng dụng Nodejs sử dụng docker-compose. Docker-compose sẽ khởi chạy ứng dụng Nodejs trên cổng 3000, Nginx với SSL trên cổng 80 và 443. Nginx sẽ điều hướng các requests về ứng dụng Nodejs khi được truy cập với tên miền. Nó cũng sẽ có một certbox client cho phép ta sở hữu chứng chỉ.
Sau khi bạn nhập lệnh phía trên, bạn sẽ thấy các output như dưới. Bạn sẽ thấy một dòng tin nhắn với nội dung “Successfully received certificates”. Lưu ý: lệnh docker-compose phía trên sẽ làm các containers chạy và gắn kết với terminal. Ta sẽ không dùng lựa chọn -d để tách chúng ta khỏi terminal. Giờ đây, bạn đã sẵn sàng. Hãy nhấn vào URL trên trình duyệt và bạn đã có ứng dụng Nodejs có sẵn trên HTTPS. Bạn cũng có thể thử truy cập vào ứng dụng qua lệnh curl.
curl https://Nodejs.devopslee.com/list
curl -XPOST “https://Nodejs.devopslee.com/insert?username=abc&[email protected]&age=28“
curl https://Nodejs.devopslee.com/list
https://Nodejs.devopslee.com/status
https://Nodejs.devopslee.com/list Một lần nữa, liệt kê các dữ liệu để xác thực xem dữ liệu tại bước (2) đã được thêm vào hay chưa.Kiểm tra trạng thái của ứng dụng Nhấn vào URL trên trình duyệt để có một danh sách các entries trong cơ sở dữ liệu.
Với chứng chỉ mà ta đã tạo, sử dụng Let’s Encrypt, sẽ có giá trị trong 90 ngày. Do đó, ta cần có phương án để cập nhật chứng chỉ tự động, giúp ta tránh khỏi việc giữ chứng chỉ hết hiệu lực. #!/bin/bash Để tự động hóa quy trình này, ta sẽ tạo một script giúp ta cập nhật chứng chỉ, và một cronjob để lên lịch chạy script. Tạo một script với -dry-run để kiểm tra script vim renew-cert.sh COMPOSE=”/usr/local/bin/docker-compose –no-ansi” DOCKER=”/usr/bin/docker”
$COMPOSE run certbot renew –dry-run && $COMPOSE kill -s SIGHUP webserver
Thay quyền truy cập của script sang cho phép nó khởi chạy chmod 774 renew-cert.sh
sudo crontab -e
Liệt kê các cronjobs. sudo crontab -l
Với chứng chỉ mà ta đã tạo, sử dụng Let’s Encrypt, sẽ có giá trị trong 90 ngày. Do đó, ta cần có phương án để cập nhật chứng chỉ tự động, giúp ta tránh khỏi việc giữ chứng chỉ hết hiệu lực. #!/bin/bash Để tự động hóa quy trình này, ta sẽ tạo một script giúp ta cập nhật chứng chỉ, và một cronjob để lên lịch chạy script. Tạo một script với -dry-run để kiểm tra script vim renew-cert.sh COMPOSE=”/usr/local/bin/docker-compose –no-ansi” DOCKER=”/usr/bin/docker” cd /home/ubuntu/Nodejs-docker/ $COMPOSE run certbot renew –dry-run && $COMPOSE kill -s SIGHUP webserver$DOCKER system prune -af Thay quyền truy cập của script sang cho phép nó khởi chạy chmod 774 renew-cert.shTạo một cronjob Trong bài viết này, ta đã cùng dạo qua các bước để “docker hóa” một ứng dụng sample Nodejs, sử dụng AWS RDS Amazon Aurora và triển khai ứng dụng Nodejs trên EC2 instance bằng Docker và Docker-compose. Ta kích hoạt SSL Termination tới sub-domain để truy cập vào ứng dụng Nodejs. Ta cũng đi qua các bước để tự động hóa việc cấp phép cho tên miền và gia hạn chứng chỉ SSL sử dụng Certbox. Đây là các bước cơ bản để bắt đầu với một ứng dụng Nodejs sample. Tuy nhiên, khi ta cần ứng dụng thực tế, 100 giây của vi dịch vụ, 1000 giây của containers, volumes, networking, secrets, egress-ingress, bạn sẽ cần công cụ container orchestration. Có rất nhiều công cụ như Kubernetes, AWS ECS, AWS EKS giúp bạn nâng cấp việc quản lý vòng đời của container trong ứng dụng thực tiễn. Về VTI CloudVTI Cloud là Đối tác cấp cao (Advanced Consulting Partner) của AWS, với đội ngũ hơn 50+ kỹ sư về giải pháp được chứng nhận bởi AWS. Với mong muốn hỗ trợ khách hàng trong hành trình chuyển đổi số và dịch chuyển lên đám mây AWS, VTI Cloud tự hào là đơn vị tiên phong trong việc tư vấn giải pháp, phát triển phần mềm và triển khai hạ tầng AWS cho khách hàng tại Việt Nam và Nhật Bản. Xây dựng các kiến trúc an toàn, hiệu suất cao, linh hoạt, và tối ưu chi phí cho khách hàng là nhiệm vụ hàng đầu của VTI Cloud trong sứ mệnh công nghệ hóa doanh nghiệp. Liên hệ với chúng tôi: Tại đây Nguồn: Rahul Shivalkar — từ clickittech.com |