Thứ năm, 05/01/2017 | 00:00 GMT+7

Cách triển khai ứng dụng Node.js và MongoDB với Rancher trên Ubuntu 16.04

Rancher là một nền tảng open-souce , tự lưu trữ và hoàn chỉnh để chạy và dễ dàng quản lý các container trong quá trình production . Bản thân là một Docker image , một server Rancher sẽ hoạt động trên bất kỳ server Linux nào có sẵn Docker.

Một số tính năng chính khiến Rancher trở thành một giải pháp hấp dẫn là:

  • Mạng nhiều server : Tất cả các server được thêm vào Rancher đều được liên kết cho phép liên lạc an toàn giữa các containers .
  • Cân bằng tải : Một dịch vụ cân bằng tải được bao gồm để phân phối dung lượng công việc giữa các containers hoặc thậm chí trên nhiều cloud .
  • Khám phá dịch vụ : Rancher bao gồm một hệ thống DNS nội bộ cho phép các containers và dịch vụ được xác định theo tên để chúng được dùng trong các dịch vụ khác trên mạng.
  • Quản lý cơ sở hạ tầng : Với Rancher, bạn có thể thêm, giám sát và quản lý tài nguyên máy tính từ bất kỳ nhà cung cấp cloud nào.
  • Công cụ điều phối : Rancher là nền tảng quản lý containers duy nhất hỗ trợ các khuôn khổ điều phối containers phổ biến nhất bao gồm Cattle, Swarm, Kubernetes và Mesos. Vì vậy, nếu bạn đã có cơ sở hạ tầng của bạn hoạt động với một trong những khuôn khổ đó thì bạn có thể sử dụng Rancher một cách dễ dàng.
  • Nguồn mở : Rancher miễn phí, công khai và minh bạch. Bạn có quyền kiểm soát tuyệt đối cơ sở hạ tầng của bạn .

Trong hướng dẫn này, bạn sẽ xây dựng một cụm Rancher để triển khai ứng dụng Node.js cân bằng tải, với hỗ trợ lưu trữ dữ liệu bằng MongoDB .

Ở cuối hướng dẫn này, bạn sẽ có bốn version cân bằng tải của một ứng dụng Node.js đơn giản và một server MongoDB với một containers dữ liệu riêng biệt để lưu trữ liên tục.

Yêu cầu

  • Một server Ubuntu 16.04 1GB có cài đặt Rancher. Ta sẽ sử dụng Rancher để tạo sáu server bổ sung, mỗi server có 1GB RAM. Làm theo các bước 1 và 2 của Cách quản lý triển khai nhiều nút của bạn với Rancher và Máy Docker trên Ubuntu 16.04 để cài đặt Server ban đầu của bạn với Rancher.
  • Một ứng dụng Node.js sử dụng MongoDB để lưu trữ dữ liệu. Hướng dẫn này cung cấp một ví dụ đơn giản bằng cách sử dụng thư viện Hapi.js mà bạn có thể sử dụng trong trường hợp bạn chưa có ứng dụng của riêng mình. Bạn có thể tìm thấy ứng dụng ví dụ này trong kho lưu trữ Github này và ta sẽ khám phá nó một cách chi tiết trong Bước 1.
  • Git được cài đặt trên máy local của bạn, vì vậy bạn có thể sao chép ứng dụng mẫu. Làm theo tài liệu cài đặt Git chính thức nếu bạn cần đáp ứng yêu cầu này.
  • Docker được cài đặt trên máy local của bạn, vì vậy bạn có thể xây dựng hình ảnh ứng dụng mà ta sẽ triển khai. Bạn có thể làm theo tài liệu chính thức cho việc này.
  • Một account trên Docker Hub , một nơi đăng ký miễn phí và công khai cho các Docker image . Đây là nơi ta sẽ lưu trữ mã ứng dụng của bạn để ta có thể triển khai nó cho nhiều server bằng cách sử dụng Rancher. Bạn cần tên user Docker Hub của bạn để hoàn thành các bước trong hướng dẫn này.
  • Mã thông báo truy cập DigitalOcean có cả quyền truy cập Đọc và Ghi, bạn có thể tạo mã này bằng cách truy cập trang Ứng dụng & API . Sao chép mã thông báo này, vì bạn cần nhập mã này vào Rancher để tạo thêm server .

Bạn cũng nên có kiến thức cơ bản về các khái niệm Docker như containers , hình ảnh và Dockerfiles.Xem Cách cài đặt và sử dụng Docker trên Ubuntu 16.04 để biết thêm về cách sử dụng Docker.

Bước 1 - Khám phá ứng dụng Node.js

Đối với hướng dẫn này, ta sẽ sử dụng một ứng dụng Node.js đơn giản dựa trên khuôn khổ Hapi.js để nhận thông báo, ghi lại và liệt kê tất cả các thông báo đã gửi trước đó. Hãy cùng khám phá cách ứng dụng hoạt động và cách nó nhận các giá trị cấu hình để ta có thể đặt các giá trị đó bằng Docker khi ta tạo hình ảnh của bạn .

Bạn sẽ chuẩn bị ứng dụng và Docker image trên máy phát triển local của bạn , thay vì server .

Sao chép ứng dụng mẫu vào máy local của bạn bằng lệnh sau:

  • git clone https://github.com/do-community/hapi-example

Sau đó, chuyển vào folder dự án:

  • cd hapi-example

Hãy xem file chính của ứng dụng, server.js . Nó chứa kết nối MongoDB và mã để khởi tạo server . Mở file này trong editor local của bạn và bạn sẽ thấy các nội dung sau:

server.js
const Hapi = require('hapi'); const mongojs = require('mongojs');  // Loads environment variables // Used only in development require('dotenv').config({silent: true});  const server = new Hapi.Server(); server.connection({ port: process.env.PORT || 3000 });  // Connect with the database server.app.db = mongojs(process.env.MONGO_HOST + '/api');  // Add the routes server.register(require('./routes'), (err) => {    if (err) {     console.error('Failed to load plugin:', err);   }    // Start the server   server.start((err) => {     if (err) {       throw err;     }      console.log('Server running at:', server.info.uri);   }); }); 

Mã cho các tuyến được đóng gói dưới dạng một plugin Hapi.js để tiết kiệm dung lượng trong hướng dẫn này, nhưng nếu bạn tò mò, bạn có thể xem trong file routes.js .

Các phần quan trọng của file server.js như sau:

server.js
require('dotenv').config({silent: true}); 

Điều này sử dụng gói dotenv Node.js để tải các biến môi trường của ta từ file .env . Bạn có thể xem lại tài liệu về gói dotenv trong kho lưu trữ Github của nó nếu bạn quan tâm đến cách nó hoạt động. Ta chỉ lưu các biến trong file này cho quá trình phát triển; nó dễ dàng hơn so với việc viết thủ công các biến trong terminal. Trong quá trình production , ta sẽ lấy các biến từ Docker, thông qua Rancher.

Tiếp theo, ta đặt cổng cho server , sử dụng một biến môi trường có tên là PORT , với giá trị dự phòng là 3000 , trong trường hợp biến không được xác định:

server.js
server.connection({ port: process.env.PORT || 3000 }); 

Cổng 3000 là quy ước chung cho các ứng dụng Node.js. Giá trị này có thể được thay đổi nếu cần thiết; yêu cầu duy nhất là nó phảitrên 1023 và dưới 65535 .

Cuối cùng, trước khi tải các tuyến và khởi động server , ta kết nối với server MongoDB, sử dụng một biến môi trường có tên MONGO_HOST :

server.js
server.app.db = mongojs(process.env.MONGO_HOST + '/api'); 

Giá trị môi trường này sẽ được xác định thông qua Rancher với tên server của server MongoDB khi ta tạo containers MongoDB. Giá trị api là tên của database mà ta sẽ kết nối và nó sẽ được cài đặt tự động nếu nó không tồn tại.

Đến đây bạn đã có một số thông tin cơ bản về những gì ứng dụng đang tìm kiếm và cách ta cấu hình cổng và kết nối database của nó, hãy đưa Docker vào bức tranh.

Bước 2 - Xây dựng Docker image

Rancher sử dụng Docker image để triển khai ứng dụng đến server , vì vậy hãy tạo Docker image cho ứng dụng của bạn . Để tạo Docker image cho ứng dụng của bạn , ta cần một file có tên Dockerfile chứa một loạt các bước mà Docker sẽ tuân theo khi xây dựng hình ảnh. Tệp này đã có trong repository ứng dụng mà bạn đã sao chép. Hãy xem nội dung của nó để hiểu nó hoạt động như thế nào. Mở nó trong editor của bạn và bạn sẽ thấy mã sau:

Dockerfile
FROM node:6 MAINTAINER James Kolce <contact@jameskolce.com>  RUN mkdir -p /usr/api COPY . /usr/api WORKDIR /usr/api RUN npm install --production  ENV PORT 3000 EXPOSE  $PORT  CMD ["npm", "start"] 

Hãy xem xét từng bước chi tiết. Đầu tiên, ta thấy dòng này:

Dockerfile
FROM node:6 

Dòng này tuyên bố rằng hình ảnh của ta được xây dựng trên hình ảnh Node.js chính thức từ Docker Hub và ta đang chọn version 6 của Node.js vì ứng dụng của ta sử dụng một số tính năng ES6 chỉ có trong version đó hoặc cao hơn. Bạn nên chọn một version cụ thể thay vì chỉ sử dụng phiên bản mới nhất trong phiên bản production để tránh bất kỳ thay đổi nào có thể làm hỏng ứng dụng của bạn .

Sau dòng đó, ta cài đặt folder làm việc của bạn :

Dockerfile
RUN mkdir -p /usr/api COPY . /usr/api WORKDIR /usr/api 

Đầu tiên, ta chạy mkdir để tạo một folder mới có tên /usr/api , đây là nơi ứng dụng của ta sẽ hoạt động. Cờ -p nghĩa là mkdir sẽ tạo các folder trung gian theo yêu cầu. Sau đó, ta sao chép nội dung của hình ảnh vào folder đó. Sau đó, ta đặt folder mới này làm folder làm việc của ta để các lệnh tiếp theo sẽ được chạy từ folder đó.

Dòng tiếp theo chạy lệnh npm và cài đặt các phụ thuộc production cho ứng dụng của ta .

Dockerfile
RUN npm install --production 

Tiếp theo, ta thấy hai dòng sau:

Dockerfile
ENV PORT 3000 EXPOSE  $PORT 

Dòng đầu tiên xác định một biến môi trường được gọi là PORT mà ứng dụng của ta sẽ sử dụng cho cổng lắng nghe của nó. Chỉ trong trường hợp biến này không được xác định, ta đặt 3000 làm giá trị mặc định. Sau đó, ta để lộ cổng đó để ta có thể truy cập vào nó từ bên ngoài containers . Việc sử dụng một biến môi trường giúp thay đổi điều này dễ dàng hơn mà không cần phải viết lại mã ứng dụng của ta . Và hãy nhớ rằng, ứng dụng của ta được thiết kế để sử dụng các biến môi trường này.

Bước cuối cùng trong Dockerfile của ta chạy server Node.js của ta bằng cách chạy lệnh npm start :

Dockerfile
CMD ["npm", "start"] 

Để tạo Docker image của ứng dụng của ta từ file này, hãy đảm bảo bạn đang ở trong folder hapi-example trong terminal của bạn và thực hiện lệnh sau:

  • docker build -t your_dockerhub_username/hapi-example .

Lệnh này tạo một Docker image bằng Dockerfile của ta . Lưu ý dấu chấm ở cuối lệnh. Điều này chỉ định đường dẫn đến Dockerfile , nằm trong folder hiện tại. Cờ -t đặt một thẻ cho hình ảnh của ta và ta sẽ sử dụng your_dockerhub_username / hapi-example cho thẻ, đây là nhãn mà ta áp dụng cho hình ảnh để ta có thể sử dụng nó để tạo các version containers từ hình ảnh. Ta sử dụng tên user Docker Hub làm tiền tố, vì ta đang chuẩn bị xuất bản hình ảnh này sau khi ta kiểm tra nó và thẻ local của Docker image phải trùng với tên repository trên Docker Hub.

Lưu ý : Nếu bạn nhận được thông báo Cannot connect to the Docker daemon. Is the docker daemon running on this host? khi bạn chạy lệnh này, hãy đảm bảo ứng dụng Docker đang chạy và Docker được khởi động. Sau đó chạy lại lệnh.

Bây giờ ta hãy kiểm tra hình ảnh mà ta vừa tạo để có thể chắc chắn rằng mọi thứ đang hoạt động như mong đợi. Như bạn đã thấy trước đó, ứng dụng của ta dựa trên MongoDB, vì vậy hãy tạo một containers MongoDB mà ứng dụng của ta có thể sử dụng để lưu trữ dữ liệu của nó. Chạy lệnh sau để tạo và khởi động containers MongoDB dựa trên hình ảnh MongoDB Docker chính thức:

  • docker run --name testdb -p 27017:27017 -d mongo:3

Ta gán một tên tạm thời cho containers với tùy chọn --name ; ta sẽ sử dụng tên đó để dừng server khi ta hoàn thành thử nghiệm ứng dụng. Ta cũng liên kết cổng server 27017 với cổng được containers hiển thị để ta có thể kiểm tra xem MongoDB có đang chạy hay không bằng cách sử dụng trình duyệt web local của ta . Cuối cùng, ta chỉ định hình ảnh mà ta muốn sử dụng. Bạn nên sử dụng cùng version MongoDB mà ứng dụng đã được phát triển đảm bảo rằng mọi thứ hoạt động như mong đợi, vì vậy trong trường hợp này ta chỉ định version 3 .

Sau khi thực hiện lệnh đó, hãy truy cập http://localhost:27017 trong trình duyệt của bạn và bạn sẽ thấy thông báo: It looks like you are trying to access MongoDB over HTTP on the native driver port nghĩa là MongoDB đang chạy.

Bây giờ hãy chạy containers ứng dụng của bạn và liên kết nó với containers MongoDB bằng cách chạy lệnh này:

  • docker run --name hapi-app -p 3000:3000 -d -e MONGO_HOST=testdb --link testdb your_dockerhub_username/hapi-example

Lệnh này tương tự như lệnh ta đã sử dụng để khởi động containers MongoDB, nhưng lần này ta sử dụng hình ảnh ứng dụng của bạn ( your_dockerhub_username / hapi-example ) và ánh xạ cổng 3000 của server của ta với cổng được containers hiển thị. Đây cũng là cổng mà ta đã sử dụng khi tạo Dockerfile . Ngoài ra, ta thêm một biến môi trường có tên MONGO_HOST chỉ định tên của containers MongoDB của ta sẽ được ứng dụng của ta sử dụng để kết nối với server database . Tham số --link testdb cho phép ta sử dụng tên của containers database làm server lưu trữ bên trong containers của ứng dụng của ta .

Sau khi chạy lệnh, hãy kiểm tra ứng dụng bằng cách truy cập http://localhost:3000 trong trình duyệt của bạn. Nó sẽ hiển thị một trang trống không có bất kỳ lỗi nào .

Lưu ý : Bạn cũng có thể thấy một mảng trống ( [ ] ) hoặc dạng xem JSON trên Firefox khi bạn truy cập http://localhost:3000 . Một trong hai kết quả này đều ổn.

Bây giờ ta đã chứng minh Docker image hoạt động local , hãy dừng và xóa các containers local của ta . Lưu ý xóa containers không giống như xóa hình ảnh. Hình ảnh của ta sẽ được giữ nguyên để ta có thể tạo lại containers sau này hoặc đẩy hình ảnh vào Rancher, đó là những gì ta sẽ làm sau khi dọn dẹp môi trường local của bạn .

Đầu tiên, dừng containers database bằng cách sử dụng tên của nó mà bạn đã xác định trước đó:

  • docker stop testdb

Bây giờ containers đã dừng, bạn có thể xóa nó khỏi máy của bạn vì bạn sẽ không cần nó nữa:

  • docker rm testdb

Lặp lại các bước tương tự cho containers ứng dụng của bạn. Đầu tiên dừng nó, sau đó loại bỏ nó.

  • docker stop hapi-app && docker rm hapi-app

Bây giờ ta hãy xuất bản hình ảnh làm việc để ta có thể sử dụng nó với Rancher.

Bước 3 - Tải hình ảnh lên Docker Hub

Để triển khai các containers bằng cách sử dụng Rancher, ta cần quyền truy cập vào register Docker , nơi ta có thể tạo một repository để lưu trữ Docker image của bạn . Ta sẽ sử dụng Docker Hub là cơ quan đăng ký chính thức cho Docker. Docker Hub được sử dụng miễn phí cho các repository công khai.

Đăng nhập vào Docker Hub bằng tên user và password của bạn. Sau khi đăng nhập, hãy nhấp vào nút Tạo repository ở phía bên phải của màn hình. Điền vào các trường như sau:

  • Tên (bắt buộc) : Tên repository của bạn, trong trường hợp này, đó là hapi-example .
  • Mô tả : Mô tả ngắn gọn để xác định nhanh hình ảnh của bạn trong tương lai.
  • Mô tả đầy đủ : Bạn có thể thêm tài liệu đánh dấu vào đây làm tài liệu tham khảo cho hình ảnh của bạn nhưng vì ứng dụng của ta khá đơn giản nên bạn có thể để trống trường này.
  • Chế độ hiển thị : Bạn có thể đặt hình ảnh của bạn ở chế độ riêng tư, nơi chỉ bạn mới có quyền truy cập hoặc công khai ở nơi mọi người có thể sử dụng hình ảnh của bạn. Đối với hướng dẫn này, hãy tạo một repository công khai.

Lưu ý : Nếu bạn đặt repository của bạn là riêng tư, bạn sẽ phải thêm thông tin đăng nhập Docker Hub của bạn vào trang Cơ sở hạ tầng -> Register trong giao diện user Rancher.

Sau khi điền tất cả các trường bắt buộc, hãy nhấp vào nút Tạo . Khi hoàn tất , bạn sẽ được chuyển hướng đến trang web lưu trữ mới của bạn .

Để tải lên Docker image của bạn, bạn phải đăng nhập vào Docker Hub thông qua lệnh docker . Quay lại terminal của bạn, thực hiện lệnh sau:

  • docker login

Bạn sẽ được yêu cầu nhập tên user và password của bạn . Giống như hầu hết các công cụ CLI, bạn sẽ không thấy password của bạn khi nhập.

Khi bạn đã đăng nhập, hãy tải hình ảnh lên Docker Hub bằng lệnh sau để tải tất cả các file lên repository :

  • docker push your_dockerhub_username/hapi-example

Việc đẩy một hình ảnh có thể mất vài phút tùy thuộc vào kết nối internet local của bạn. Sau khi hình ảnh được xuất bản thành công, ta có thể cài đặt server của bạn bằng cách sử dụng Rancher.

Bước 4 - Tạo và gắn nhãn các Server Server trong Rancher

Hãy sử dụng Rancher để tạo tất cả các server mà ta cần để triển khai dịch vụ của bạn . Ta cần hai cho ứng dụng Node.js, một cho server MongoDB và một cho bộ cân bằng tải. Ta sẽ thực hiện tất cả những điều này trong giao diện user Rancher bằng cách sử dụng API của DigitalOcean.

Truy cập giao diện Rancher trong trình duyệt của bạn bằng cách truy cập http:// your_rancher_ip_address và làm theo các bước sau để tạo bốn server mà ta cần:

  1. Đi tới Cơ sở hạ tầng> Server và nhấp vào nút Thêm Server ở đầu trang.
  2. Chọn DigitalOcean làm nhà cung cấp server lưu trữ.
  3. Dán Mã thông báo ứng dụng DigitalOcean của bạn mà bạn đã tạo vào trường Mã thông báo truy cập và nhấp vào Tiếp theo: Cấu hình server .
  4. Chỉ định một cái tên. Nhập host , mà sẽ tự động tạo tên từ host1 để host4 .
  5. Di chuyển thanh trượt Số lượng đến 4 server .
  6. Đối với Hình ảnh , hãy sử dụng giá trị mặc định của Ubuntu 16.04.1 x64 .
  7. Đối với Kích thước , sử dụng giá trị mặc định là 1gb RAM, 30gb Disk, 1 vCPU .
  8. Bạn có thể để trường User SSH làm root .
  9. Nhấp vào nút Tạo và đợi vài phút trong khi các server được tạo và thêm vào Rancher.

Sau khi Rancher hoàn thành việc tạo tất cả các server , ta sẽ thêm nhãn cho mỗi server để phân loại loại của chúng để ta có thể sắp xếp nơi ta sẽ đặt từng thành phần của bạn . Việc gắn nhãn server cũng cho phép ta mở rộng quy mô server của bạn tùy thuộc vào loại của chúng. Ví dụ: nếu ta nhận được quá nhiều nhu cầu cho ứng dụng của bạn , ta có thể tăng số lượng server loại đó và Rancher sẽ tự động triển khai các containers Docker thích hợp cho ta . Các nhãn mà ta sẽ tạo ra là: loadbalancer , applicationdatabase .

Hãy tạo nhãn đầu tiên, loadbalancer .

  1. Tới Infrastructure> Hosts và chọn các server đầu tiên, host1 .
  2. Nhấp vào nút Tùy chọn (biểu tượng có ba chấm dọc trên đầu trang) và chọn tùy chọn Chỉnh sửa .
  3. Nhấp vào nút + Add Label và trong đầu vào chính nhập từ type , và sau đó nhập loadbalancer trong đầu vào giá trị gia tăng.
  4. Nhấp vào nút Lưu .

Lưu ý : Server của bạn có thể xuất hiện dưới dạng tên host1.localdomain ; đây là một hành vi bình thường và nó có thể thay đổi tùy thuộc vào môi trường của bạn.

Tiếp theo, gắn nhãn các server ứng dụng. Lặp lại quy trình trước đó với hai server tiếp theo nhưng lần này sử dụng application trong đầu vào Giá trị .

Đối với server lưu trữ cuối cùng, hãy lặp lại quy trình nhưng sử dụng database trong đầu vào Giá trị .

Tất cả bốn server bây giờ phải có nhãn, vì vậy hãy cài đặt các dịch vụ. Ta sẽ bắt đầu với database .

Bước 5 - Triển khai server MongoDB

Ta sẽ sử dụng Docker image MongoDB chính thức trên Docker Hub để triển khai server database của bạn . Vùng chứa MongoDB cũng sẽ có containers sidekick để lưu trữ tất cả dữ liệu của ta . Cả hai containers sẽ được triển khai trên server có nhãn là database .

Để làm điều đó, hãy làm theo các bước sau trong giao diện user Rancher:

  1. Chọn menu Ngăn xếp , chọn tùy chọn User , rồi nhấp vào nút Xác định Dịch vụ .
  2. Trong trang Thêm dịch vụ , đảm bảo thanh trượt Quy mô được đặt thành Chạy 1 containers .
  3. Đối với tên của dịch vụ, hãy sử dụng MongoDB .
  4. Đối với hình ảnh, nhập mongo:3 .
  5. Nhấp vào nút Thêm vùng chứa Sidekick ở phần trên cùng.
  6. Đặt tên cho containers mới này là Data . Vùng chứa này sẽ được sử dụng làm ổ lưu trữ dữ liệu MongoDB.
  7. Vì ta sẽ chỉ sử dụng containers này cho dữ liệu, hãy sử dụng hình ảnh hộp busybox .
  8. Trong tab Command bên dưới, chuyển tùy chọn Autorestart thành Never (Bắt đầu một lần) , vì ta sẽ chỉ sử dụng containers này để lưu trữ.
  9. Chuyển sang tab Âm lượng và thêm một âm lượng mới bằng cách nhấp vào nút Thêm Âm lượng . Nhập /data/db vào trường văn bản xuất hiện. Đây là đường dẫn mặc định nơi MongoDB lưu trữ dữ liệu.
  10. Chuyển sang tab Lập kế hoạch , nhấp vào nút Thêm Luật Lập lịch và nhập các thông số sau: The Host must have a host label of type = database . Sử dụng trình đơn thả xuống để giúp bạn tạo luật này.
  11. Bấm vào tab dịch vụ MongoDB , sau đó cuộn xuống tab Lệnh và đảm bảo tùy chọn Tự động khởi động được đặt thành Luôn luôn .
  12. Chuyển sang tab Tập và chọn Dữ liệu trong tùy chọn Tập từ .
  13. Chuyển sang tab Lập lịch và thêm luật lập lịch mới với các tham số sau: The Host must have a host label of type = database
  14. Cuối cùng, nhấp vào nút Tạo ở dưới cùng và đợi vài phút trong khi dịch vụ được kích hoạt.

Bây giờ hãy cấu hình dịch vụ ứng dụng.

Bước 6 - Triển khai ứng dụng Node.js

Ta sẽ sử dụng một cách tiếp cận tương tự để triển khai ứng dụng Node.js mà ta đã chuẩn bị trước đó. Hình ảnh ta lưu trữ trên Docker Hub sẽ được triển khai trên application có nhãn server và sẽ được liên kết với dịch vụ MongoDB để lưu trữ và truy cập dữ liệu. Vì vậy, hãy làm theo các bước sau trong giao diện user Rancher:

  1. Chọn menu Ngăn xếp , chọn tùy chọn User , sau đó nhấp vào nút Thêm Dịch vụ trong ngăn xếp Mặc định .
  2. Trong phần Quy mô , chọn tùy chọn Luôn chạy một version của containers này trên mọi server .
  3. Tên mà ta sẽ sử dụng cho dịch vụ này là NodeJS .
  4. Đối với hình ảnh, ta sẽ sử dụng hình ảnh mà ta đã triển khai cho Docker Hub. Nhập your_dockerhub_username / hapi-example .
  5. Nhấp vào nút Liên kết dịch vụ , chọn Dịch vụ đích và chọn MongoDB . Sau đó chọn As name và nhập db , để dịch vụ NodeJS của ta có thể truy cập vào dịch vụ MongoDB bằng tên này.
  6. Trong tab Lệnh ở cuối trang, hãy nhấp vào nút Thêm Biến Môi trường và thêm một biến có tên MONGO_HOST với giá trị là db , ánh xạ tới tên dịch vụ đích mà ta đã sử dụng ở bước trước. Lưu ý ứng dụng của ta dựa vào biến môi trường này để định vị server database .
  7. Chuyển sang tab Lập lịch , nhấp vào nút Thêm Luật Lập lịch và sử dụng trình đơn thả xuống để xây dựng luật cho biết The Host must have a host label of type = application .
  8. Cuối cùng, nhấn Create và đợi Rancher cài đặt dịch vụ.

Trong một thời gian ngắn, bạn sẽ thấy rằng dịch vụ NodeJS mới đã ra mắt hai containers . Chọn menu Cơ sở hạ tầng , nhấp vào Server và bạn sẽ thấy rằng cả hai application có nhãn server hiện đang chạy dịch vụ mới này. Vì có nhiều hơn một, hãy cài đặt bộ cân bằng tải để ta có thể sử dụng cả hai server này một cách hiệu quả.

Bước 7 - Triển khai Load Balancer

Bộ cân bằng tải của ta sẽ được liên kết với các dịch vụ NodeJS của ta để cân bằng dung lượng công việc giữa tất cả các containers trên các server ứng dụng.

  1. Để tạo bộ cân bằng tải, hãy chọn menu Ngăn xếp và chọn tùy chọn User . Lần này, hãy nhấp vào mũi tên bên cạnh nút Thêm dịch vụ và chọn Thêm bộ cân bằng tải từ danh sách thả xuống.
  2. Đối với Tên , nhập LoadBalancer .
  3. Trong phần Luật cổng , hãy đặt Cổng server yêu cầu (trường Cổng đầu tiên) thành 80Cổng mục tiêu ( cổng thứ hai) thành 3000 là cổng mà các container NodeJS của ta đang hiển thị.
  4. Trong tùy chọn Target Service, chọn NodeJS , đây là dịch vụ mà ta đã tạo gần đây.
  5. Trong tab Lập lịch ở cuối trang, hãy nhấp vào nút Thêm Luật Lập lịch và tạo một luật cho biết The Host must have a host label of type = loadbalancer .
  6. Cuối cùng, nhấp vào Tạo và đợi trong khi Rancher kích hoạt dịch vụ.

Mỗi khi ta tạo một dịch vụ, ta đã sử dụng các nhãn mà ta đã tạo để xác định cách dịch vụ được triển khai. Điều này giúp dễ dàng quản lý các server bổ sung trong tương lai. Bây giờ hãy đảm bảo mọi thứ hoạt động.

Bước 8 - Kiểm tra ứng dụng

Để kiểm tra ứng dụng của bạn , ta cần lấy địa chỉ của server cân bằng tải. Chọn dịch vụ LoadBalancer và bạn sẽ thấy địa chỉ IP trong tab Cổng .

Để kiểm tra xem ứng dụng của ta có đang hoạt động hay không, hãy thực hiện lệnh sau trong một terminal :

curl your_load_balancer_ip 

Lệnh này sẽ gửi một yêu cầu GET đến server . Bạn sẽ thấy một phản hồi có chứa một mảng trống ( [] ) vì database của ta trống.

Thực thi lệnh sau để thêm thông báo vào database và đảm bảo ứng dụng có thể lưu dữ liệu:

curl -i -X POST -H "Content-Type:application/json" your_load_balancer_ip -d '{"message":"This is a test"}' 

Lệnh này sẽ gửi một yêu cầu POST đến server với một đối tượng JSON chứa một khóa message với giá trị Đây là một bài kiểm tra . Sau khi gửi yêu cầu, bạn sẽ nhận được cùng một thông báo mà bạn đã gửi dưới dạng phản hồi, cùng với _id từ MongoDB. Điều này nghĩa là kết nối với server MongoDB đang hoạt động và ứng dụng đã lưu dữ liệu .

Ứng dụng này sẽ chỉ chấp nhận một khóa message , bất kỳ tên nào khác sẽ bị loại bỏ.

Bây giờ, để kiểm tra lại xem ứng dụng có hoạt động đúng hay không, hãy thực hiện lại lệnh đầu tiên và bạn sẽ nhận được thông báo bạn đã thêm ở bước trước.

curl your_load_balancer_ip 

Đầu ra sẽ như thế này:

HTTP/1.1 200 OK content-type: application/json; charset=utf-8 cache-control: no-cache content-length: 61 Date: Wed, 05 Jan 2017 20:07:02 GMT Connection: keep-alive  {"message":"This is a test","_id":"e64d85579aee7d1000b075a2"} 

Cảnh báo : Ứng dụng mẫu này không an toàn; bất kỳ ai biết địa chỉ và API đều có thể thêm thông báo vào hệ thống. Khi bạn hoàn thành hướng dẫn này, bạn có thể cần tắt ứng dụng này bằng cách xóa dịch vụ trong Rancher.

Đến đây, bạn đã có hai server ứng dụng, một database và một bộ cân bằng tải được cấu hình và sẵn sàng sử dụng. Hãy xem cách mở rộng quy mô dịch vụ của ta để xử lý nhiều lưu lượng truy cập hơn.

Bước 9 - Mở rộng quy mô server Node.js

Khi ứng dụng của bạn bắt đầu nhận được nhiều nhu cầu và server của bạn không thể xử lý tải, bạn có thể tăng số lượng server Node.js và tải sẽ được phân phối tự động giữa các containers trên các server ứng dụng. Làm theo các bước sau để mở rộng ứng dụng của bạn:

  1. Chuyển đến trang Cơ sở hạ tầng> Server và nhấp vào nút Thêm Server .
  2. Thêm Mã thông báo truy cập DigitalOcean của bạn vào trường cùng tên.
  3. Sử dụng host5 làm tên cho server mới đầu tiên, vì server cuối cùng ta tạo là server host4 . Bởi vì ta sẽ tạo hai server mới, Rancher sẽ tự động đặt tên máy tiếp theo thành server host6 .
  4. Chọn số lượng bạn muốn; trong trường hợp này, ta sẽ thêm 2 server nữa.
  5. Đối với Hình ảnh , hãy sử dụng giá trị mặc định của Ubuntu 16.04.1 x64 .
  6. Đối với Kích thước , sử dụng giá trị mặc định là 1gb RAM, 30gb Disk, 1 vCPU .
  7. Bấm vào nút Thêm nhãn và trong type nhập Nhập khóa , sau đó nhập application trong đầu vào Giá trị .
  8. Nhấp vào nút Tạo và đợi trong khi các server mới được kích hoạt và thêm vào Rancher.

Sau khi các server mới trực tuyến, vì chúng được gắn nhãn là server ứng dụng, các version mới của ứng dụng NodeJS sẽ được cấu hình và triển khai tự động, đồng thời bộ cân bằng tải sẽ phân phối dung lượng công việc giữa bốn containers trên bốn server .

Kết luận

Trong hướng dẫn này, bạn đã học cách chuẩn bị, triển khai và mở rộng một ứng dụng Node.js chức năng có hỗ trợ lưu trữ dữ liệu với MongoDB. Như bạn thấy , với Rancher và GUI của nó, quá trình này khá trực quan và dễ dàng mở rộng quy mô một ứng dụng hoàn chỉnh. Và nhờ các tính năng lập lịch của Rancher, khi ứng dụng của bạn đạt được thời gian lớn, bạn có thể xử lý tải một cách dễ dàng.


Tags:

Các tin liên quan

Cách xây dựng Go từ Nguồn trên Ubuntu 16.04
2017-01-04
Cách thiết lập firewall với UFW trên Ubuntu 16.04
2016-12-22
Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 16.04
2016-12-09
Cách cài đặt Puppet 4 trên Ubuntu 16.04
2016-12-09
Cách sử dụng Vault để bảo vệ dữ liệu nhạy cảm có thể xem được trên Ubuntu 16.04
2016-12-09
Cách cài đặt Discourse trên Ubuntu 16.04
2016-12-02
Cách thiết lập giám sát hiệu suất thời gian thực với Netdata trên Ubuntu 16.04
2016-12-01
Cách sắp xếp công việc theo nhóm với ONLYOFFICE trên Ubuntu 14.04
2016-11-22
Cách triển khai CockroachDB trên Cụm ba node trên Ubuntu 16.04
2016-11-18
Cách thu thập các chỉ số cơ sở hạ tầng với Packetbeat và ELK trên Ubuntu 16.04
2016-11-03