发布于 2026-01-06 5 阅读
0

构建并部署 Node.js 微服务应用程序 DEV's Worldwide Show and Tell Challenge 由 Mux 呈现:展示你的项目!

构建和部署 Node.js 微服务应用程序

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

在现代软件开发领域,微服务是目前最热门的趋势之一。这些小型、独立的软件服务允许开发人员构建和部署更小的代码块,从而可以更频繁地更新并更快地响应用户需求。此外,借助微服务,团队可以根据自身需求按计划更新各个服务,而无需等待整个应用程序的新版本或操作系统升级。每个服务的体积也更小,因此更容易理解、测试、编写文档和维护。而且,微服务还能帮助您应对开发过程中可能出现的各种挑战。

在本教程中,我将解释什么是微服务以及如何使用 Harness CD 部署微服务。Harness 是一个持续交付平台。

什么是微服务?

微服务是指大型应用程序内部的小型、自主的软件服务。传统的单体应用程序由多个模块组成,这些模块在单个代码库中作为一个整体构建。而在基于微服务的架构中,服务被设计成独立且模块化的组件,可以单独部署。每个微服务通常处理一个特定的业务功能,并且独立构建、部署和管理。

先决条件

  • 免费Harness 持续交付帐户
  • 需要访问 Kubernetes 集群。您也可以使用 Minikube 或 Kind。

教程

让我们构建一个基于 Node.js 的微服务来计算两个邮政编码之间的距离。

创建一个应用目录来存储你的应用程序代码,并使用命令npm init -y初始化项目。接下来,让我们把主应用程序代码添加到该server.js文件中。

const express = require('express')
const app = express();
const port = process.env.PORT || 3002;

const routes = require('./api/routes');
routes(app);
app.listen(port, function() {
  console.log('Server started on port: ' + port);
});
Enter fullscreen mode Exit fullscreen mode

接下来我们来定义路由和控制器逻辑。首先,在根目录下创建一个名为 api 的新文件夹,用于存放我们的路由和控制器逻辑。

完整的项目文件夹结构如下:

项目结构

在 api 文件夹内,创建两个文件 -controller.jsroutes.js

将以下代码添加到routes.js文件中:

'use strict';

const controller = require('./controller');

module.exports = function(app) {
  app.route('/about')
      .get(controller.about);
  app.route('/distance/:zipcode1/:zipcode2')
      .get(controller.getDistance);
};
Enter fullscreen mode Exit fullscreen mode

将以下代码添加到controller.js文件中:

'use strict';

var properties = require('../package.json')
var distance = require('../service/distance');

var controllers = {
  about: function(req, res) {
      var aboutInfo = {
          name: properties.name,
          version: properties.version
      }
      res.json(aboutInfo);
  },
  getDistance: function(req, res) {
          distance.find(req, res, function(err, dist) {
              if (err)
                  res.send(err);
              res.json(dist);
          });
      },
};

module.exports = controllers;
Enter fullscreen mode Exit fullscreen mode

现在,我们需要编写一些代码来处理外部 API。我们将使用 zipcodeapi.com 来计算两个地点之间的距离(需要提供邮政编码)。请访问http://www.zipcodeapi.com获取 API 密钥。

API密钥

现在,在根文件夹内创建一个名为service 的新文件夹。在 service 文件夹内,创建一个名为 的新文件distance.js,并添加以下代码:

var request = require('request');

const apiKey = process.env.ZIPCODE_API_KEY || "DemoOnly00xM8GfwlIQE2Jf2FneBr1uZBPGCw3W8DzyZjKoPaVCRGamRCaclrpVR";
const zipCodeURL = 'https://www.zipcodeapi.com/rest/';

var distance = {
  find: function(req, res, next) {
      request(zipCodeURL + apiKey
              + '/distance.json/' + req.params.zipcode1 + '/'
              + req.params.zipcode2 + '/mile',
      function (error, response, body) {
          if (!error && response.statusCode == 200) {
              response = JSON.parse(body);
              res.send(response);
          } else {
              console.log(response.statusCode + response.body);
              res.send({distance: -1});
          }
      });

  }
};

module.exports = distance;
Enter fullscreen mode Exit fullscreen mode

现在,进入应用程序的主文件夹(根目录),然后使用命令启动应用程序npm start
访问http://localhost:3002/about,您应该会看到文件夹名称和版本信息。

应用程序正在运行

接下来,查看我们的下一条路线,即距离。访问http://localhost:3000/distance/pincode1/pincode2

将邮政编码 1 和邮政编码 2 相加,您应该可以看到这两个邮政编码区域之间的距离。

下面举个例子:

两地之间的距离

请再次尝试计算两个邮政编码(35004 和 86556)之间的距离。

新距离

因此,我们已经成功构建了一个简单的微服务,用于计算两个邮政编码之间的距离。

使用 Harness 部署应用程序:

Harness 是一个现代化的软件交付平台,可以帮助企业轻松部署应用程序。接下来,我们将了解如何使用 Harness 将此应用程序部署到 Kubernetes 上。

首先,我们需要使用 Dockerfile 将应用程序容器化。让我们为应用程序编写一个简单的Dockerfile 。

FROM node:14-alpine AS development
ENV NODE_ENV development
# Add a work directory
WORKDIR /app
# Cache and Install dependencies
COPY package.json .
RUN npm install
# Copy app files
COPY . .
# Expose port
EXPOSE 3002
# Start the app
CMD [ "npm", "start" ]
Enter fullscreen mode Exit fullscreen mode

使用以下命令构建 Docker 镜像:
docker build -t microservices-app .

使用以下命令运行 Docker 镜像:
docker run -p 3000:3000 microservices-app

使用 DockerHub 凭据重新构建镜像:
docker build -t DockerHub Username/microservices-app .

现在,使用以下命令将镜像推送到 Docker Hub:
docker push DockerHub Username/microservices-app

Docker Hub 上的微服务应用程序

现在我们已经将应用程序作为镜像推送到 Docker Hub,我们可以使用 Harness CD 模块将应用程序部署到 Kubernetes 上。

但在此之前,我们需要创建 Kubernetes 清单文件 deployment.yaml 和 service.yaml 来部署我们的应用程序。
让我们创建deployment.yaml这些文件。

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
  app: microservice-app
name: app-deployment
spec:
replicas: 2
selector:
  matchLabels:
    app: microservice-app
template:
  metadata:
    labels:
      app: microservice-app
  spec:
    containers:
    - image: pavansa/microservice-app
      name: app-deployment
      ports:
      - containerPort: 3000
Enter fullscreen mode Exit fullscreen mode

将应用程序代码推送到新的 GitHub 仓库。

注册Harness 平台并选择 CD(持续交付)模块。

CD模块
设置所需的连接器,例如 Docker Hub、GitHub 等以及委托。

线束连接器

Harness Delegate是一个工具,您需要在目标集群(在本例中为 Kubernetes 集群)上安装并运行它,以便将您的工件、基础设施、协作、验证和其他提供程序与 Harness Manager 连接起来。首次设置 Harness 时,您需要安装 Harness Delegate。

为您的应用程序配置一个简单的管道。您可以在此处定义服务、基础架构和执行类型。

服务代表你要部署的内容,例如 Kubernetes 清单和微服务的 Docker 镜像。基础设施告诉 Harness 你的应用程序将部署到哪里。执行则是此阶段如何将服务部署到其基础设施。

应用部署

请确保已正确配置所有内容,然后保存并运行管道,将您的应用程序部署到 Kubernetes 上。

应用程序部署管道您应该会看到部署成功的消息。

部署成功恭喜!我们已成功构建了一个 node.js 微服务,并在Harness CD的帮助下将其部署到 Kubernetes 上

最终,使用微服务的优缺点取决于具体情况。不过,一般来说,微服务非常适合需要扩展的大型复杂应用程序。因此,它们通常与容器和服务导向架构结合使用。另一方面,微服务并非总是适用于小型应用程序。然而,微服务既适用于大型应用程序,也适用于小型应用程序,其有效性取决于具体的实现方式。

微服务是现代软件开发的新趋势。它允许开发人员构建和部署更小、更独立的代码块,这些代码块可以更频繁地更新,并更好地响应用户需求。虽然微服务架构有很多种,但我们建议您选择适合自身业务和技术栈的微服务架构。

文章来源:https://dev.to/pavanbelagatti/build-and-deploy-a-nodejs-microservices-application-2966