简介:Spring Boot是一个基于Java Spring框架的套件,预装了Spring的一系列组件,开发者只需要很少的配置就可以创建独立的应用。在云原生环境中,有大量的平台可以运行Spring Boot应用,比如虚拟机、容器等等。但是最吸引人的是以无服务器的方式运行Spring Boot应用程序。
通过一系列文章,我将从架构、部署、监控、性能、安全五个方面分析在无服务器平台上运行Spring Boot应用的优缺点。在上一期《FC架构上的Spring Boot》中,我们对商城应用架构和无服务器平台做了基本介绍。在这篇文章中,我将告诉您如何将Mall应用程序部署到功能计算平台。为了让分析更有代表性,我选择了Github上50k多星的电商应用mall作为例子。
前置条件准备阶段:
注意,如果使用云主机,请先检查主机对应的安全组配置是否允许传入网络请求。创建通用主机后,严格限制入站方向的网络端口访问。我们需要手动允许访问MySQL端口3306、Redis端口6379等等。如下图所示,我手动设置了安全组以允许所有传入的网络请求。
部署依赖软件商城应用依赖于MySQL、Redis、MongoDB、ElasticSearch、RabbitMQ等软件。这些软件在云上都有相应的云产品。在生产环境中,建议使用云产品,以获得更好的性能和可用性。在个人开发或POC原型演示的场景中,我们选择一个虚拟机来封装和部署所有相关软件。
1.1克隆代码仓库
git clone https://github.com/hryang/mall's国内接入github网络不是很好。如果克隆太慢,可以用Gitee地址。
git clone https://gitee.com/aliyunfc/mall.git1.2构建并运行Docker映像
在代码根目录下的docker文件夹下,有一个docker文件对应着每一个依赖的软件。在代码的根目录下运行run.sh脚本将自动构建所有依赖于该软件并在这台机器上运行的Docker映像。
Obashdocker.sh 1.3验证依赖软件的运行状态
执行Docker ps命令,检查依赖软件是否正常运行。
Sudokerps 部署商城应用2.1修改商城应用配置
修改以下三个yaml文件,将host字段改为步骤1中安装MySQL等软件的节点的public ip,如图:
mall-admin/src/main/resources/application-prod . yml
商城-门户/src/main/resources/application-prod . yml
商城-搜索/src/main/资源/应用-产品. yml
2.2生成商城应用程序容器映像
执行maven打包命令生成Docker镜像,镜像可以在本地的Java8或者Java11环境下。
sudo -E mvn包成功后,将显示以下成功消息。
执行sudo docker images,应该能看到1.0快照版的商城/商城-管理、商城/商城-门户、商城/商城-搜索的图片。
2.3将图像推送到阿里云图像仓库
首先登录阿里云镜像仓控制台,选择个人版实例,让docker根据提示登录阿里云镜像仓。
然后创建一个命名的空房间。如下图所示,我们创建了一个命名为空的房间,命名为quanxi-hryang。
根据前面的步骤,我们已经在本地生成了商城/商城-管理、商城/商城-门户和商城/商城-搜索的图像。
执行下面的命令,将mall-admin镜像推送到杭州quanxi-hryang命名为空的房间下的镜像仓库。
请将以下命令中的cn-hangzhou和quanxi-hryang改为自己的镜像仓库区域,并命名为空房间。商城/商城-门户,商城/商城-搜索等等。
sudo docker标签mall/mall-admin:1.0-SNAPSHOT registry . cn-Hangzhou . aliyuncs . com/quanxi-hryang/mall-admin:1.0-SNAPSHOT sudo ker推送Registry.cn-Hangzhou.aliyuncs.com/Quanxi-hryang/mall-admin: 1.0-SNAPSHOT2.4修改无服务器Devs工具的应用定义
我们使用无服务器Devs工具来定义和部署应用程序。项目根目录下有s.yaml文件,是无服务器Devs工具的项目定义文件。这定义了函数计算的资源。
如下图所示,我们已经在函数计算中定义了名为mall-admin的服务及其下的mall-admin函数。该函数定义了端口、内存大小、超时、运行时间和其他属性。红框中的内容需要根据自己的配置进行修改。
(建议:以上镜像地址最好是registry-vpc.cn-Hangzhou.aliyuncs.com/fc-demo/mall-admin: 1.0-快照的形式)
2.5将商城部署到功能计算平台
执行部署命令。成功部署后,您将看到相应的访问地址。
在浏览器中输入生成的网址。如果显示“尚未登录或令牌已过期”,则服务部署成功。
(注:Serverless的特点是,默认情况下,系统在请求到达之前不会创建实例,所以第一次启动需要很长时间,称为冷启动。商城应用一般需要30s左右启动。我们将在后面的性能调优文章中讨论这个问题,并使用一系列方法进行优化。)
可以通过访问相应的swagger api调试页面host/Swagger-ui.html来调试相关的后端api。
2.6查看应用程序日志
我们已经在s.yaml中为每个服务设置了logConfig:auto,这意味着serverless-devs工具将自动为服务创建一个日志存储,所有服务共享一个日志存储。应用程序的所有日志都输出到。
日志对于理解服务操作和诊断问题非常有用。比如我们执行mall-admin logs-t进入后续模式,然后在浏览器中访问mall-admin服务的端点,查看整个应用的启动和请求处理日志。
2.7部署商城前端项目
商城还提供了基于Vue+元素的前端界面。主要包括商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等功能。这个项目在函数计算上也可以无缝运行。
首先,在您的机器上安装nodejs12和npm,并下载项目源代码。
GitClone在https://github.com/hryang/mall-admin-web.访问github网络不是很好如果克隆太慢,可以用下面的代理地址。
git clone https://gitee.com/aliyunfc/mall-admin-web.git(注意:它必须是nodejs 12或14,太新版本的节点将无法编译)
修改config/prod.env.js,将BASE_API改为之前在函数计算中部署成功的mall-admin的端点。
在项目的根目录中执行以下命令来构建前端项目。
n install NPM run build成功运行后,将生成dist目录。运行项目根目录下的docker.sh脚本来生成图像。
Sudbash Docker.sh运行docker images命令,您将看到mall/mall-admin-web映像已经成功生成。将图像推送到阿里云图像仓库。
同样,请将下面命令中的cn-hangzhou和quanxi-hryang改为自己的镜像仓库区域,并命名为空 room。
sudo docker标签mall/mall-admin-web:1.0-SNAPSHOT registry . cn-Hangzhou . aliyuncs . com/quan Xi-hryang/mall-admin-web:1.0-SNAPSHOT sudo ker推送registry . cn-Hangzhou . aliyuncs . com/quan Xi-hryang/mall-admin-web:1.0-SNAPSHOT修改项目根目录下的s.yaml。类似于部署mall-admin,根据自己的配置调整访问和区域,将镜像更改为上一步成功推送的镜像地址。
执行s deploy,部署成功后可以看到商城-管理-web服务的URL。通过浏览器访问,您将看到登录页面。填入密码macro123,就可以看到完整的效果。
(注意:第一次由于冷启动,登录页面可能会报告超时错误。只需再次刷新页面。我们将在下面的性能调优文章中优化冷启动性能。)
总结因为无服务器平台内置了网关,负责路由、实例拉取/运行/容错/自动扩容收缩等。,在上传应用程序代码包或映像后,开发者就已经发布了一个灵活且高可用的服务。综上所述,只要完成以下五个步骤,商城应用就将全面部署在功能计算平台上。对应用程序的后续更新只需要重复步骤4和5。可见,Serverless免去了环境配置、运维等重复性工作,大大提高了开发和运维的效率。
①Spring Boot:
https://spring.io/projects/spring-boot
2)商城:
https://github.com/macrozheng/mall
3)无服务器Devs安装文档:
http://server less-devs . com/zh-cn/docs/installed/CLI install . html
原文链接:http://click . aliyun . com/m/1000318167/
本文为阿里云原创内容,未经允许不得转载。