使用OpenShift的现代应用程序,第1部分:仅需两个命令的Web应用程序

我们将展开一系列文章,其中将向您展示如何使用新的S2I(源到图像)构建器映像诸如React或Angular的现代Web应用程序部署到Red Hat OpenShift







本系列文章中的内容:



  • 1: - ;
  • 2: S2I HTTP-, NGINX, OpenShift -;
  • 3: OpenShift .




首先,我们需要安装OpenShift。我们将使用minishift,它允许您在Windows,Mac或Linux计算机上的虚拟机中运行OpenShift。要开始使用minishift,请下载Red Hat Container Development Kit(CDK),然后按照以下说明进行安装和运行。可以在CDK文档和OKD.io网站上的文档中找到更多信息



启动minishift后,您需要登录并配置项目,只需执行以下两个命令即可:



$ oc login

$ oc new-project web-apps


假设您已经安装了Node.js 8+和npm 5.2+。



如果打开本文只是为了找出这两个魔术命令是什么,请跳至最后一部分。否则,请沿着文本走下去!



什么是现代Web应用程序?



首先,我们需要确定“现代Web应用程序”的含义以及它与所谓的“纯” Node.js应用程序的区别。



对我们来说,现代的Web应用程序类似于React,Angular或Ember,其构建步骤可生成静态HTML,JavaScript和CSS。在构建阶段,通常执行一些任务,例如串联,翻译(Babel或Typescript)和文件缩小。每个主要框架都有自己的构建过程和管道,但是诸如Webpack,Grunt和Gulp之类的工具也属于此类。所有这些工具都使用Node.js运行构建过程。



但是,在此阶段生成(编译)的静态内容不一定需要节点进程来为其提供服务。是的,您可以在此处使用serve模块之类的东西,这对开发非常有用,因为它使您可以快速查看网站的外观。但是对于生产部署,通常建议使用NGINX或Apache HTTP Server之类的东西。



另一方面,“纯”节点应用程序将使用Node.js进程启动,并且可能类似于Express.js应用程序(即REST API服务器)-它通常没有构建步骤(是是的,我们知道Typescript)。通常不安装开发依赖项,因为我们仅需要用于运行应用程序的依赖项。



您可以在此处阅读有关如何使用我们的Node.js S2I映像在OpenShift上部署“纯”节点应用程序的信息



在OpenShift上部署Web应用程序



现在,我们已经概述了现代Web应用程序和Node.js应用程序之间的区别,让我们向您展示如何将Web应用程序实际部署到OpenShift。



在这里,我们将部署React应用程序和现代Angular应用程序。使用适当的CLI工具,可以相当快地创建这两个项目:create-react-app和角度的/ cli。这将是本文标题中出现的两个命令之一。



反应应用



如果已经在全球范围内安装了create-react-app,那就太好了。如果没有,只需使用npx运行适当的命令,如下所示:



$ npx create-react-app react-web-app


注意:npx是npm 5.2+附带的一次性命令运行程序,有关详细信息,请参见此处



此命令将创建一个新的React应用程序,并且您应该在屏幕上看到以下内容:







假设您位于新创建的项目目录中,则可以运行第二条命令将我们的应用程序部署到OpenShift:



$ npx nodeshift --strictSSL=false --dockerImage=nodeshift/ubi8-s2i-web-app --imageTag=10.x --build.env YARN_ENABLED=true --expose


现在,OpenShift控制台将如下所示:







这是启动应用程序后的Web控制台:







在继续使用Angular应用程序之前,让我们看一下最后一个命令的功能。



它以npx nodeshift开头-在这里我们使用npx运行nodeshift模块,这使得将节点应用程序部署到OpenShift变得容易。



现在让我们看一下传递给nodeshift的选项。第一个是--strictSSL = false。



由于我们拥有minishift,并且它使用了自签名证书,因此我们需要告知nodeshift以便没有安全错误(实际上,我们对隐藏在后台的请求库说了这一点)。



接下来是长选项--dockerImage = nodeshift / ubi8-s2i-web-app --imageTag =10.x。她告诉nodeshift使用带有10.x标签的新Web App Builder图像



现在,我们告诉S2I映像要使用yarn:--build.env YARN_ENABLED = true。最后,--expose标志告诉nodeshift为我们创建一个OpenShift路由,以便我们可以从Web访问URL到我们的应用程序。



由于这是OpenShift快速通道系列中的文章,此处的S2I映像使用serve模块提供生成的静态文件。在下一篇文章中,我们将展示如何在NGINX中使用相同的S2I图像。



角度应用



现在让我们创建一个Angular应用程序。第一步是使用Angular CLI创建我们的新应用程序。同样,如果您没有全局安装它,则可以使用npx来启动它:



$ npx @angular/cli new angular-web-app


该命令将创建一个新的Angular项目,就像React应用程序一样,我们只需运行另一个命令来部署它即可:



$ npx nodeshift --strictSSL=false --dockerImage=nodeshift/ubi8-s2i-web-app --imageTag=10.x --build.env OUTPUT_DIR=dist/angular-web-app --expose


与React情况类似,OpenShift Web控制台将如下所示:







这分别是启动应用程序时的Web控制台:







现在,让我们看一下Deployment命令。它与React非常相似,但是有重要的区别。



区别在于build.env标志:对于Angular,我们编写--build.env OUTPUT_DIR = dist / angular-web-app,这里有两点。



首先,我们删除了YARN_ENABLED变量,因为我们没有在Angular项目中使用yarn。



其次,我们添加了OUTPUT_DIR = dist / angular-web-app变量。因此,默认情况下,S2I映像将在构建目录中查找您的已编译代码。默认情况下,React使用build,因此在上一个示例中我们没有配置此参数。但是Angular将其他内容用于其编译输出。因此,我们写的是ist / <PROJECT_NAME>参数在我们的例子中等于dist / angular-web-app。



结论



对于那些跳过以上示例的解析而从本文开始就来到这里的人,我们展示了执行部署的两个命令:



React:



$ npx create-react-app react-web-app

$ npx nodeshift --strictSSL=false --dockerImage=nodeshift/ubi8-s2i-web-app --imageTag=10.x --build.env YARN_ENABLED=true --expose


角度:



$ npx @angular/cli new angular-web-app

$ npx nodeshift --strictSSL=false --dockerImage=nodeshift/ubi8-s2i-web-app --imageTag=10.x --build.env OUTPUT_DIR=dist/angular-web-app --expose


其他资源



今天,您了解了如何使用新的S2I Web App Builder映像在OpenShift上快速轻松地部署现代Web应用程序。我们的示例使用此映像的社区版本,但是Red Hat已经发布了Red Hat Openshift Application Runtime(RHOAR),因此请小心。



在下一篇文章中,我们将向您展示如何使用OpenShift构建链将新的S2I映像与现有的HTTP服务器映像(如NGINX)一起使用,以组织生产部署。



本系列的第三部分将重点介绍如何为OpenShift平台上的应用程序组织开发工作流。



我们还建议下载并查看免费的电子书Deploying to OpenShift



All Articles