Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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 Stack

Nodejs Sample App

Mộ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 Instance

Mộ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 Aurora

Dữ 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.

Docker

Docker 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.

Nginx

Nginx đượ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.

Certbot

Certbot 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.

PostMan

Ta 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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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ền

Triể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:

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

3. Điều kiện tiên quyết

Trướ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:

  1. Có một tài khoản AWS
  2. Có PostMan hoặc các phần mềm thay thế cho machine để kiểm tra APIs
  3. Một tên miền đã đăng ký được khai báo trên tài khoản AWS

4. Tạo Ubuntu 20.04 LTS EC2 Instance trên AWS

Truy 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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

Tại đây, nhấn vào “Launch instance” để cấu hình và tạo một EC2 instance.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

Chọn AMI “Ubuntu Server 20.04 LTS”.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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é.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

5. Tạo RDS Aurora với MySql Instance trên AWS

Mộ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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

Tại trang chủ của RDS, nhấn vào “Create database” để cấu hình và tạo một RDS instance.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

Chọn “Easy create” cho method, “Amazon Aurora” cho engine type, “Dev/Test” cho DB instance size.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

Tại đây, ta cần lưu ý:

  • RDS Amazon Aurora instance sẽ ở trạng thái riêng tư theo mặc định, có nghĩa là ta không thể truy cập nó từ bên ngoài mà chỉ ở bên trong VPC.
  • EC2 instance và RDS instance thuộc về một VPC chung.
  • RDS instance có thể tiếp cận được qua EC2 instance.

6. Cài đặt dependencies trên EC2 Instance

Bây giờ, bạn có thể kết nối tới Instance mà bạn vừa tạo ra. 

MySql Client

Ta 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ừ đó.

  1. sudo apt update
  2. sudo apt install mysql-client

Tạo bảng

Ta 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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

Thực thi các lệnh tiếp theo với giá trị chính xác

  1. mysql -u -p -h

Sau đó, lệnh của bạn sẽ xuất hiện như sau:

  1. mysql -u admin -padmin1234 -h my-Nodejs-database.cluster-cxxjkzcl1hwb.eu-west-3.rds.amazonAWS.com

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:

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

  1. pwd
  2. cd /home/ubuntu/ 
  3. mkdir Nodejs-docker
  4. cd Nodejs-docker

Clone phần code repository trên EC2 instance 

Clone 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.

  1. pwd
  2. cd /home/ubuntu/ 
  3. mkdir Nodejs-docker
  4. cp /home/ubuntu/DevOps/AWS/Nodejs-docker/* /home/ubuntu/Nodejs-docker

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ền

Tạ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

  1. Kiểm tra phiên bản Linux hiện tại

cat /etc/issue

  1. Cập nhật apt package index

sudo apt-get update

  1. Tải các packages cho phép apt sử dụng repository trên HTTPS

sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

  1. Thêm key GPG của Docker

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

  1. Set up cho stable repository

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

  1. Cập nhật apt package index

sudo apt-get update

  1. Tải các packages cho phép apt sử dụng repository trên HTTPS

sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

  1. Thêm key GPG của Docker

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

  1. Set up cho stable repository
    1. 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

Tải về phiên bản mới nhất của Docker Engine và containerd

  1. sudo apt-get install docker-ce docker-ce-cli containerd.io

Kiểm tra phiên bản Docker hiện tại

  1. docker –version

Quản lý Docker với tư cách là non-root user

  1. Tạo nhóm ‘docker’ 
  2. sudo groupadd docker

Thêm user vào nhóm docker

  1. sudo usermod -aG docker

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

  1. Thoát.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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

  1. docker run hello-world
  2. Sau khi chạy các lệnh ở trên, bạn sẽ thấy output như dưới hình.
  3. Dưới đây là màn hình sau khi các lệnh ở trên được chạy.

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

  1. #Copy the app

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

  • Máy chủ: Cấm của tôi
  • Người dùng: Quản trị viên ”
  • Mật khẩu: “admin1234”
  1. 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;

& 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;

  1. & nbsp; & nbsp;

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

  1. & nbsp; & nbsp;

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

  1. & nbsp; & nbsp;

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

& nbsp; & nbsp; & nbsp; & nbsp;

  1. & nbsp; & nbsp;
    1. & nbsp; & nbsp; giấy phép
    2. }

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

  1. CậP NHậT AWS ANCORED GROUP

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

  1. 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.

  1. ThênM

Máy chủ TriM

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

Ta sẽ cùnm tạo một docker hình ảnh từ phần mã

  1. CD/home/ubuntu/nodejs-docker
  • Docker Build -t Nodejs.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

  • Tạo một container sử dụng hình ảnh ta vừa tạo vÀtha nó hát cổng 3000. & nbsp;

http://:3000/insert?username=abc&[email protected]&age=2

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

  • docker chạy —Name nodejs -d -p 3000: 3000 nodejs

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

  1. Bạn Có Thể Thấy Code Đang Chạy.

Docker PS

Bạn thậm Chí ngắn

  1. Docker nhật ký nodejs

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ách

Hoặc bạn Có Thể Sử Dụng lệNh Curl Bênn Trong EC2 Ví dụ

  1. & nbsp; & nbsp; giấy phép
  2. }
  3. CậP NHậT AWS ANCORED GROUP

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

  1. server_name nodejs.devopslee.com www.nodejs.devopslee.com;
  2. ssl_certificate /etc/letsencrypt/live/nodejs.devopslee.com/fullchain.pem;
  3. ssl_certificate_key /etc/letsencrypt/live/nodejs.devopslee.com/privkey.pem;

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 đó

  1. Nginx đó là quy tr là Trong Khich Apache luôn
  2. Nginx đó là phân lượng NH Apache dù Có nhiều tính năng tốt nhưng tương Đối Khó học.

Docker-Compose

Tại bước nào, ta sẽ tải docker-compose.

  1. Tải phần mở rộng mới nh ất của docker sáng tác

sudo curl -l Hồi https://github.com/docker/compose/releases/doad/1.29.2/docker-compose-$ ( Bin/Docker-Compose

  1. Áp dụng các lệnh đó

sudo chmod +x/usr/local/bin/docker-compose

  1. Kiểm Tra xem Ta Đạo tải thong

Docker-compoSversion

  1. Tạo một tệp docker-compose .yaml, hoặc bạn đó là thể Sao Chéph Các nội Dung Bên dưới.

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

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

& 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;

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

& 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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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ỉ SSL

Ta sẽ tạo một key có thể sử dụng trong Nginx.

  1. cd /home/ubuntu/Nodejs-docker
  2. mkdir views
  3. mkdir dhparam
  4. sudo openssl dhparam -out /home/ubuntu/Nodejs-docker/dhparam/dhparam-2048.pem 2048

Triển khai ứng dụng Nodejs trên EC2 instance

Chú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ỉ.

  1. docker-compose  up

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

Bạn cũng có thể thử truy cập vào ứng dụng qua lệnh curl.

  1. Liệt kê các dữ liệu từ ứng dụng

curl https://Nodejs.devopslee.com/list

  1. Thêm một entry vào trong ứng dụng

curl -XPOST “https://Nodejs.devopslee.com/insert?username=abc&[email protected]&age=28“

  1. 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.

curl https://Nodejs.devopslee.com/list

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

  1. Thêm một entry vào trong ứng dụng

https://Nodejs.devopslee.com/status

  1. curl -XPOST “https://Nodejs.devopslee.com/insert?username=abc&[email protected]&age=28“

https://Nodejs.devopslee.com/list

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

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.

  1. Auto-Renewal của chứng chỉ SSL Certificates

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”

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

  1. cd /home/ubuntu/Nodejs-docker/

$COMPOSE run certbot renew –dry-run && $COMPOSE kill -s SIGHUP webserver

  1. $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.sh

  1. Tạo một cronjob

sudo crontab -e

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

  1. */5 * * * * /home/ubuntu/Nodejs-docker/renew-cert.sh >> /var/log/cron.log 2>&1

Liệt kê các cronjobs.

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

sudo crontab -l

  1. Kiểm tra các logs của cronjob sau 5 phút, khi chúng ta đã cài đặt để cronjob sẽ  hoạt động 5 phút một lần.

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”

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

cd /home/ubuntu/Nodejs-docker/

Hướng dẫn deploy nodejs to aws - triển khai nodejs lên aws

$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.sh

Tạ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 Cloud

VTI 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