Cách triển khai ứng dụng Node.js và MongoDB với Rancher trên Ubuntu 14.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 14.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. Thực hiện theo các yêu cầu và Bước 1 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 14.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. Ta cung cấp một ví dụ đơn giản bằng cách sử dụng thư viện Hapi.js , bạn có thể sử dụng thư viện này trong trường hợp 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 Github này .
- 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 .
Bước một - 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:
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:
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.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.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:
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:
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 :
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 .
RUN npm install --production Tiếp theo, ta thấy hai dòng sau:
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 :
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.
 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 .
 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 cũng không sao.
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.
 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 -> Đăng ký 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 server lưu trữ
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:
- Đi tới Cơ sở hạ tầng> Server và nhấp vào nút Thêm Server ở đầu trang.
- Chọn DigitalOcean làm nhà cung cấp server lưu trữ.
- Di chuyển thanh trượt Số lượng đến 4 server .
-  Chỉ định một cái tên. Nhập host, mà sẽ tự động tạo tên từhost1đểhost4.
- Dán Mã thông báo ứng dụng DigialOcean của bạn mà bạn đã tạo vào trường Mã thông báo truy cập .
- Đối với Hình ảnh , sử dụng giá trị mặc định của ubuntu-14-04-x64 .
- Đối với Kích thước , sử dụng giá trị mặc định là 1GB .
- 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  thuộc loại đó và Rancher sẽ tự động triển khai containers  Docker thích hợp cho  ta . Các nhãn mà  ta  sẽ tạo ra là: loadbalancer , application và database .
 Hãy tạo nhãn đầu tiên, loadbalancer .
-  Tới Infrastructure> Hosts và chọn các  server  đầu tiên, host1.
- Nhấp vào nút Tùy chọn (biểu tượng có ba dấu chấm) và chọn tùy chọn Chỉnh sửa .
-  Nhấp vào nút Add Label và trong đầu vào chính nhập từ type, và sau đó nhậploadbalancertrong đầu vào giá trị gia tăng.
- Nhấp vào nút Lưu .
 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:
- 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 trang Thêm dịch vụ , đảm bảo thanh trượt Quy mô được đặt thành Chạy 1 containers .
-  Đối với tên của dịch vụ, hãy sử dụng MongoDB.
- Đối với hình ảnh, nhập mongo:3.
- Nhấp vào nút Thêm vùng chứa Sidekick ở phần trên cùng.
-  Đặ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.
-  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.
- 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ữ.
-  Chuyển sang tab Tập và thêm một tập mới bằng cách nhấp vào nút + và nhập /data/dbvà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.
-  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. Sử dụng trình đơn thả xuống để giúp bạn tạo luật này.
- Quay lại và nhấp vào tab dịch vụ MongoDB , sau đó cuộn xuống tab Lệnh và đặt tùy chọn Tự động khởi động thành Luôn luôn .
- Chuyển sang tab Tập và chọn Dữ liệu trong tùy chọn Tập từ .
-  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
- 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 server 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:
- 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 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 .
-  Tên mà  ta  sẽ sử dụng cho dịch vụ này là NodeJS.
-  Đố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.
-  Trong phần 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ụNodeJScủa ta có thể truy cập vào dịch vụ MongoDB.
-  Trong tab Lệnh ở cuối trang, chọn Thêm Biến Môi trường và thêm một biến có tên MONGO_HOSTvới giá trị làdb, ánh xạ đến 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 .
-  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.
- 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 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.
- Để tạo bộ cân bằng tải, hãy chọn menu Ngăn xếp , chọn tùy chọn User , nhưng lần này hãy nhấp vào mũi tên trên nút Thêm Dịch vụ . Chọn Thêm bộ cân bằng tải từ danh sách thả xuống.
-  Đối với Tên , nhập LoadBalancer.
-  Đặt Cổng nguồn thành 80và Cổng mục tiêu mặc định thành3000là cổng mà các containerNodeJScủa ta đang hiển thị.
- Trong tùy chọn Target Service, chọn NodeJS , đây là dịch vụ mà ta đã tạo gần đây.
-  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.
- 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 LoadBalancerIP 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.
Bây giờ hãy thêm thông báo vào database đảm bảo rằng ứng dụng có thể lưu dữ liệu. Thực hiện lệnh sau:
curl -i -X POST -H "Content-Type:application/json" LoadBalancerIP -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 . Ứng dụng này sẽ chỉ chấp nhận một khóa message , vì vậy mọi tên khác sẽ bị loại bỏ. Sau khi gửi yêu cầu, bạn sẽ nhận được cùng một tin nhắn 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 .
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 LoadBalancerIP Đầ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: Tue, 12 Jul 2016 20:07:02 GMT Connection: keep-alive  {"message":"This is a test","_id":"e64d85579aee7d1000b075a2"} Ứng dụng ví dụ 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:
- Chuyển đến trang Cơ sở hạ tầng> Server và nhấp vào nút Thêm Server .
- Chọn số lượng bạn muốn; trong trường hợp này, ta sẽ thêm 2 server nữa.
-  Sử dụng host5làm tên cho server mới đầu tiên, vì server cuối cùng ta tạo là serverhost4. 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 serverhost6.
- Thêm Mã thông báo truy cập DigitalOcean của bạn vào trường cùng tên.
- Đối với Hình ảnh , sử dụng giá trị mặc định của ubuntu-14-04-x64 .
- Đối với Kích thước , sử dụng giá trị mặc định là 1GB .
-  Bấm vào nút Thêm nhãn và trong typenhập Nhập khóa , sau đó nhậpapplicationtrong đầu vào Giá trị .
- 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.
Các tin liên quan
Cách cài đặt và sử dụng BaasBox trên Ubuntu 14.042016-07-13
Cách thiết lập notebook Jupyter để chạy IPython trên Ubuntu 16.04
2016-06-15
Cách cài đặt Go 1.6 trên Ubuntu 16.04
2016-05-19
Cách cài đặt và sử dụng Composer trên Ubuntu 16.04
2016-05-17
Cách tập trung log với Rsyslog, Logstash và Elasticsearch trên Ubuntu 14.04
2016-05-16
Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 16.04
2016-05-04
Cách cài đặt và cấu hình VNC trên Ubuntu 16.04
2016-04-26
Cách cài đặt WordPress với LEMP trên Ubuntu 16.04
2016-04-25
Cách thêm không gian swap trên Ubuntu 16.04
2016-04-25
Cách cài đặt Java với Apt-Get trên Ubuntu 16.04
2016-04-23
 

