使用Node.js, Pm2和Docker构建Rest Api
大家好,这是一个初学者级的动手教程,但强烈建议您已经接触过javascript或一些带有动态类型的解释语言。
我能学到什么?
如何使用Express创建一个Node.js Rest API应用程序。
如何运行一个Node.js Rest API应用程序的多个实例,并使用PM2平衡它们之间的负载。
-如何构建应用程序的映像并在Docker容器中运行。
需求
-基本了解javascript。
- Node.js版本10及以上-https://nodejs.org/en/download/
- npm版本6或更高版本- Node.js安装已经解决了npm依赖。
—Docker 2.0及以上版本-https://www.docker.com/get-started
构建项目的文件夹结构并安装项目的依赖项
警告:
本教程使用MacOs构建。在其他操作系统中,有些事情可能会出现分歧。
首先,你需要为项目和npm项目创建一个目录。在终端中,我们会创建一个文件夹并在里面导航。
现在我们要启动一个新的npm项目,输入以下命令,并按enter键让输入为空:
如果我们看一下目录,我们可以看到一个名为' package.json '的新文件。这个文件将负责管理我们项目的依赖项。
下一步是创建项目的文件夹结构:
我们可以通过复制和粘贴以下命令轻松地做到这一点:
现在我们已经构建了项目结构,是时候用节点包管理器(npm)安装项目的一些未来依赖项了。每个依赖项都是应用程序执行中需要的模块,并且必须在本地机器中可用。我们需要使用以下命令安装以下依赖项:
“-g”选项表示将全局安装依赖项,“@”后面的数字是依赖项的版本。
请打开您最喜欢的编辑器,因为是时候编写代码了!
首先,我们将创建记录器模块,以记录应用程序的行为。
rest api /共享/日志/ index.js
在使用动态类型语言时,模型可以帮助您识别对象的结构,因此让我们创建一个名为User的模型。
rest api /模型/ user / index.js
现在让我们创建一个伪存储库,它将负责我们的用户。
rest api /仓库/ user-mock-repository / index.js
现在是时候用它的方法构建我们的服务模块了!
rest api /服务/ user / index.js
让我们创建请求处理程序。
rest api / user / index.js /处理程序
现在,我们要设置HTTP路由。
rest api /线路/ index.js
最后,是时候构建应用程序层了。
rest api / rest-api.js
运行应用程序
在' rest-api/ '目录中输入以下代码来运行我们的应用程序:
您应该在终端窗口中看到如下消息:
{"message":"API监听端口:3000","level":"info"}
上面的消息意味着我们的Rest API正在运行,所以让我们打开另一个终端,使用curl进行一些测试调用:
配置和运行PM2
既然一切正常,现在可以在应用程序中配置PM2服务了。要做到这一点,我们需要转到本教程开始时创建的rest-api/process文件。并实现如下配置结构:
现在,我们将打开我们的PM2服务,在执行以下命令之前确保我们的Rest API没有在任何地方运行,因为我们需要开放端口3000。
你应该看到一个表显示一些实例与'应用程序名称= rest-api '和'状态=在线',如果是这样,是时候测试我们的负载平衡。为了进行这个测试,我们将输入以下命令并打开第二个终端来发出一些请求:
终端1
终端2
在“Terminal 1”中,你应该注意到你的请求是通过我们应用程序的多个实例来平衡的,每行开始的数字是实例id:
由于我们已经测试了PM2服务,让我们删除正在运行的实例来释放端口3000:
使用码头工人
首先,我们需要实现应用程序的Dockerfile:
rest api / rest-api.js
最后,让我们构建应用程序的镜像并在docker中运行它,我们还需要将应用程序的端口映射到本地机器的端口并测试它:
终端1
终端2
正如前面所发生的,在“Terminal 1”中,您应该注意到您的请求正在通过应用程序的多个实例进行平衡,但这次这些实例在docker容器中运行。
结论
Node.js和PM2是一个强大的工具,这种组合可以在许多情况下作为工作者、api和其他类型的应用程序使用。将docker容器添加到等式中,它可以极大地降低成本并提高堆栈的性能。
这就是所有的朋友们!我希望你喜欢这个教程,如果你有任何疑问,请告诉我。
你可以从以下链接获得本教程的源代码:
https://github.com/ds-oliveira/rest-api
见到你!
©2019 Danilo Oliveira