网站开发不懂英语,国外网站大全帝国cms模板,食品网站策划,哪家专门做特卖的网站简介#xff1a;本篇中为各位讲述如何将 Mall 应用部署到函数计算平台上。为了让分析更有代表性#xff0c;我选择了 Github 上 star 数超过 50k 的电商应用 mall 作为示例。
作者#xff1a;西流 导读#xff1a;Spring Boot 是基于 Java Spring 框架的套件#xff0c;它…简介本篇中为各位讲述如何将 Mall 应用部署到函数计算平台上。为了让分析更有代表性我选择了 Github 上 star 数超过 50k 的电商应用 mall 作为示例。
作者西流
导读Spring Boot 是基于 Java Spring 框架的套件它预装了 Spring 的一系列组件让开发者只需要很少的配置就可以创建独立运行的应用程序。在云原生的环境中有大量的平台可以运行 Spring Boot 应用例如虚拟机、容器等。但其中最有吸引力的是以 Serverless 的方式运行 Spring Boot 应用。我将通过一系列文章从架构部署监控、性能、安全等 5 个方面来分析 Serverless 平台运行 Spring Boot 应用的优劣。我们在上一篇的“Spring Boot on FC 架构篇”中对 Mall 应用架构以及 Serverless 平台有了一个基本的介绍我会在本篇中为各位讲述如何将 Mall 应用部署到函数计算平台上。为了让分析更有代表性我选择了 Github 上 star 数超过 50k 的电商应用 mall 作为示例。
前置条件
准备阶段
您需要有一个阿里云的账户您需要有一台能通过公网 ip 访问的机器安装 MySQLRedis 等 Mall 应用依赖的软件您需要在运行依赖软件的机器上安装 Git DockerJava 和 Maven 软件您需要安装并配置 Serverless Devs 工具。
注意如果您使用了云主机请先检查主机对应的安全组配置是否允许入方向的网络请求。一般的主机在创建后对于入方向的网络端口访问做了严格限制。我们需要手动允许访问 MySQL 的 3306 端口Redis 的 6379 端口等。如下图所示我手动设置了安全组允许所有入方向的网络请求。
部署依赖软件
Mall 应用依赖 MySQLRedisMongoDBElasticSearchRabbitMQ 等软件。这些软件在云上都有对应的云产品。在生产环境推荐使用云产品获得更好的性能和可用性。在个人开发或者 POC 原型演示场景下我们选择一台 VM 来容器化部署所有依赖的软件。
1.1 Clone 代码仓库
git clone https://github.com/hryang/mall国内访问 Github 网络不太好如果 clone 太慢可使用 Gitee 地址。
git clone https://gitee.com/aliyunfc/mall.git1.2 构建和运行 Docker 镜像
在代码根目录的 docker 文件夹下有每个依赖软件对应的 Dockerfile。运行代码根目录下的 run.sh 脚本会自动构建所有依赖软件的 Docker 镜像并在本机运行。
sudo bash docker.sh1.3 验证依赖软件运行状态
执行 Docker ps 命令检查依赖软件是否正常运行。
sudo docker ps部署 Mall 应用
2.1 修改 Mall 应用配置
修改下面 3 个 yaml 文件将其中的 host 字段改成您第 1 步安装 MySQL 等软件的节点公网 ip如图所示
mall-admin/src/main/resources/application-prod.yml
mall-portal/src/main/resources/application-prod.yml
mall-search/src/main/resources/application-prod.yml 2.2 生成 Mall 应用容器镜像
执行 maven 打包命令生成 Docker 镜像本地是 Java8 或者 Java11 环境均可。
sudo -E mvn package成功后将显示如下成功信息。 执行 sudo docker images应该能看到 mall/mall-adminmall/mall-portalmall/mall-search 的 1.0-SNAPSHOT 版本的镜像。 2.3 将镜像推送到阿里云镜像仓库
首先登录阿里云镜像仓库控制台选择个人版实例根据提示让 docker 登录阿里云镜像仓库。 然后创建命名空间。如下图所示我们创建了名为 quanxi-hryang 的命名空间。 根据之前的步骤我们已经在本地生成了 mall/mall-admin, mall/mall-portal, mall/mall-search 的镜像。
执行下面的命令将 mall-admin 镜像推送到杭州区域quanxi-hryang 命名空间下的镜像仓库。
请将下面命令中的 cn-hangzhou 和 quanxi-hryang 修改为您自己的镜像仓库地域和命名空间。mall/mall-portalmall/mall-search 以此类推。
sudo docker tag mall/mall-admin:1.0-SNAPSHOT registry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin:1.0-SNAPSHOT
sudo docker push registry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin:1.0-SNAPSHOT2.4 修改 Serverless Devs 工具的应用定义
我们使用 Serverless Devs 工具来定义和部署应用。在项目根目录下有 s.yaml 文件这是 Serverless Devs 工具的项目定义文件。这里面定义了函数计算的资源。
如下图所示我们在函数计算上定义了名为 mall-admin 服务及其下的 mall-admin 函数。函数中定义了 port内存大小超时时间运行时等属性。红框中的内容是您需要根据自己的配置修改的。
access 是您使用 s config 配置的身份默认是 default。如果您采用默认设置那么这里不需要更改。region 是您要部署的地域有 cn-hangzhoucn-shanghaicn-beijingcn-shenzheng 等选项。函数使用了 custom-container 运行时需要指定镜像地址。请将 s.yaml 中的镜像地址改为您上一步推送的 mall-admin 镜像地址。同理也需要在 s.yaml 中更改 mall-portalmall-search 的镜像地址。建议上面的镜像地址最好使用 registry-vpc.cn-hangzhou.aliyuncs.com/fc-demo/mall-admin:1.0-SNAPSHOT 形式
2.5 部署 Mall 应用到函数计算平台
执行 s deploy 命令部署成功后您将看到对应的访问网址。 在浏览器中输入生成的网址如果显示 “暂未登录或 token 已经过期”说明服务部署成功。
注意Serverless 的特点是系统默认在请求到达后才创建实例所以第一次启动时间比较长称之为冷启动。Mall 应用启动一般需要 30s 左右。后面我们将在性能调优文章中来回顾这个问题使用一系列手段优化。
访问对应的 swagger api 调试页面 host/swagger-ui.html就能调试相关的后端 API 了。 2.6 查看应用日志
我们在 s.yaml 中为每个服务都设置了 logConfig:auto 代表 serverless-devs 工具会自动为服务创建日志库LogStore所有的服务都共享一个日志库。应用所有的日志都输出到。
您可以使用 s logs 命令查看所有服务某个时间点的日志也可以使用 s mall-admin logs 查看 mall-admin 函数的日志也可以使用 s mall-admin logs -t 以跟随模式实时显示当前时间点之后的日志也可以使用 s mall-admin logs --keywordabc 查看包含关键词 abc 的日志。
s logs 对于您了解服务运行情况和问题诊断非常有用。例如我们执行 s mall-admin logs -t 进入跟随模式然后在浏览器中访问 mall-admin 服务的 endpoint就能看到整个应用的启动和请求处理日志。 2.7 部署 Mall 前端项目
Mall 也提供了一个前端界面基于 VueElement 实现。主要包括商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等功能。该项目同样可以无缝运行在函数计算上。
首先在所在机器上安装 nodejs12 和 npm并下载项目源代码。
git clone https://github.com/hryang/mall-admin-web国内访问 github 网络不太好如果 clone 太慢可使用下面的代理地址。
git clone https://gitee.com/aliyunfc/mall-admin-web.git注意必须是 nodejs 12 或者 14太新的 node 版本会编译失败
修改 config/prod.env.js 将其中的 BASE_API 改为之前在函数计算上部署成功的 mall-admin 的 endpoint。 在项目根目录执行下面的命令构建前端项目。
npm install
npm run build运行成功后会生成 dist 目录。运行项目根目录下的 docker.sh 脚本生成镜像。
sudo bash docker.sh运行 docker images 命令将看到 mall/mall-admin-web 镜像已经成功生成了。将镜像推送到阿里云镜像仓库。
同理请将下面命令中的 cn-hangzhou 和 quanxi-hryang 修改为您自己的镜像仓库地域和命名空间。
sudo docker tag mall/mall-admin-web:1.0-SNAPSHOT registry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin-web:1.0-SNAPSHOTsudo docker push registry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin-web:1.0-SNAPSHOT修改项目根目录下的 s.yaml 和部署 mall-admin 类似根据您的配置调整 access region 将 image 改为上一步推送成功的镜像地址。 执行 s deploy 当部署成功后就能看到 mall-admin-web 服务的网址。通过浏览器访问将看到登录页面。填入密码 macro123 就能看到完整的效果。
(注意第一次由于冷启动登录页面可能会报超时错误。重新刷新页面即可。我们将在后面的性能调优文章中优化冷启动性能。)
总结
由于 Serverless 平台内置了网关负责路由实例拉起/运行/容错/自动扩缩容等功能因此开发者上传应用代码包或者镜像后就已经发布了一个弹性高可用的服务。总结起来只要完成下面 5 步就在函数计算平台上完整部署了 Mall 应用。后续对应用的更新只需要重复步骤 4 和 5。由此可见Serverless 将环境配置和运维等重复性的工作免除了开发运维效率大幅提升。
Clone 项目代码找到一台 VM运行脚本一键式安装 MySQLRedis 等依赖软件修改应用配置中 host 这一项将值填写为步骤2中的 VM 公网 ip生成应用镜像并推送到阿里云镜像仓库部署应用到函数计算平台
原文链接
本文为阿里云原创内容未经允许不得转载。