Spring Boot Serverless 实战系列“部署篇” | Mall 应用

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 本篇中为各位讲述如何将 Mall 应用部署到函数计算平台上。为了让分析更有代表性,我选择了 Github 上 star 数超过 50k 的电商应用 mall 作为示例。

作者:西流


关注【Serverless】公众号,后台回复 “学习” 即可获得 Serverless 技术资源包!


导读: 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 访问的机器,安装 MySQL,Redis 等 Mall 应用依赖的软件;


  • 您需要在运行依赖软件的机器上安装 Git, Docker,Java 和 Maven 软件;


  • 您需要安装并配置 Serverless Devs 工具。


注意,如果您使用了云主机,请先检查主机对应的安全组配置是否允许入方向的网络请求。一般的主机在创建后,对于入方向的网络端口访问做了严格限制。我们需要手动允许访问 MySQL 的 3306 端口,Redis 的 6379 端口等。如下图所示,我手动设置了安全组,允许所有入方向的网络请求。

image.gif

部署依赖软件


Mall 应用依赖 MySQL,Redis,MongoDB,ElasticSearch,RabbitMQ 等软件。这些软件在云上都有对应的云产品。在生产环境,推荐使用云产品获得更好的性能和可用性。在个人开发或者 POC 原型演示场景下,我们选择一台 VM 来容器化部署所有依赖的软件。

1.1 Clone 代码仓库


git clone https://github.com/hryang/mall


国内访问 Github 网络不太好,如果 clone 太慢,可使用 Gitee 地址。


git clone https://gitee.com/aliyunfc/mall.git


1.2 构建和运行 Docker 镜像


在代码根目录的 docker 文件夹下,有每个依赖软件对应的 Dockerfile。运行代码根目录下的 run.sh 脚本,会自动构建所有依赖软件的 Docker 镜像,并在本机运行。


sudo bash docker.sh


1.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 


1.png


2.2 生成 Mall 应用容器镜像


执行 maven 打包命令,生成 Docker 镜像,本地是 Java8 或者 Java11 环境均可。


sudo -E mvn package


成功后,将显示如下成功信息。


2.png


执行 sudo docker images,应该能看到 mall/mall-admin,mall/mall-portal,mall/mall-search 的 1.0-SNAPSHOT 版本的镜像。

image.gif

3.png


2.3 将镜像推送到阿里云镜像仓库


首先登录阿里云镜像仓库控制台,选择个人版实例,根据提示让 docker 登录阿里云镜像仓库。


4.png

image.gif

然后创建命名空间。如下图所示,我们创建了名为 quanxi-hryang 的命名空间。

image.gif

5.png


根据之前的步骤,我们已经在本地生成了 mall/mall-admin, mall/mall-portal, mall/mall-search 的镜像。


执行下面的命令,将 mall-admin 镜像推送到杭州区域,quanxi-hryang 命名空间下的镜像仓库。


请将下面命令中的  cn-hangzhou  quanxi-hryang 修改为您自己的镜像仓库地域和命名空间。mall/mall-portal,mall/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-SNAPSHOT


2.4 修改 Serverless Devs 工具的应用定义


我们使用 Serverless Devs 工具来定义和部署应用。在项目根目录下,有 s.yaml 文件,这是 Serverless Devs 工具的项目定义文件。这里面定义了函数计算的资源。


如下图所示,我们在函数计算上定义了名为 mall-admin 服务及其下的 mall-admin 函数。函数中定义了 port,内存大小,超时时间,运行时等属性。红框中的内容是您需要根据自己的配置修改的。


  • access 是您使用 s config 配置的身份,默认是 default。如果您采用默认设置,那么这里不需要更改。


  • region 是您要部署的地域,有 cn-hangzhou,cn-shanghai,cn-beijing,cn-shenzheng 等选项。


  • 函数使用了 custom-container 运行时,需要指定镜像地址。请将 s.yaml 中的镜像地址改为您上一步推送的 mall-admin 镜像地址。同理,也需要在 s.yaml 中更改 mall-portal,mall-search 的镜像地址。


image.gif6.png


(建议:上面的镜像地址最好使用  registry-vpc.cn-hangzhou.aliyuncs.com/fc-demo/mall-admin:1.0-SNAPSHOT 形式)


2.5 部署 Mall 应用到函数计算平台


执行 s deploy 命令,部署成功后,您将看到对应的访问网址。


7.png


在浏览器中输入生成的网址,如果显示 “暂未登录或 token 已经过期”,说明服务部署成功。


(注意:Serverless 的特点是系统默认在请求到达后才创建实例,所以第一次启动时间比较长,称之为冷启动。Mall 应用启动一般需要 30s 左右。后面我们将在性能调优文章中来回顾这个问题,使用一系列手段优化。)


访问对应的 swagger api 调试页面 host/swagger-ui.html,就能调试相关的后端 API 了。


8.png


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 --keyword=abc 查看包含关键词 abc 的日志。


s logs 对于您了解服务运行情况和问题诊断非常有用。例如我们执行 s mall-admin logs -t 进入跟随模式,然后在浏览器中访问 mall-admin 服务的 endpoint,就能看到整个应用的启动和请求处理日志。


9.png

image.gif

2.7 部署 Mall 前端项目


Mall 也提供了一个前端界面,基于 Vue+Element 实现。主要包括商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等功能。该项目同样可以无缝运行在函数计算上。


首先在所在机器上安装 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。


10.png

image.gif

在项目根目录执行下面的命令,构建前端项目。


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-SNAPSHOT
sudo docker push registry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin-web:1.0-SNAPSHOT


修改项目根目录下的 s.yaml ,和部署 mall-admin 类似,根据您的配置调整 accessregion ,将 image 改为上一步推送成功的镜像地址。


11.png


执行 s deploy,当部署成功后,就能看到 mall-admin-web 服务的网址。通过浏览器访问,将看到登录页面。填入密码 macro123 ,就能看到完整的效果。


(注意:第一次由于冷启动,登录页面可能会报超时错误。重新刷新页面即可。我们将在后面的性能调优文章中优化冷启动性能。)


总结


由于 Serverless 平台内置了网关,负责路由,实例拉起/运行/容错/自动扩缩容等功能,因此开发者上传应用代码包或者镜像后,就已经发布了一个弹性高可用的服务。总结起来,只要完成下面 5 步就在函数计算平台上完整部署了 Mall 应用。后续对应用的更新,只需要重复步骤 4 和 5。由此可见,Serverless 将环境配置和运维等重复性的工作免除了,开发运维效率大幅提升。


  1. Clone 项目代码
  2. 找到一台 VM,运行脚本一键式安装 MySQL,Redis 等依赖软件
  3. 修改应用配置中 host 这一项,将值填写为步骤2中的 VM 公网 ip
  4. 生成应用镜像,并推送到阿里云镜像仓库
  5. 部署应用到函数计算平台


文中网址汇总


1)Spring Boot:

https://spring.io/projects/spring-boot


2)Mall:

https://github.com/macrozheng/mall


3)Serverless Devs 安装文档:

http://serverless-devs.com/zh-cn/docs/installed/cliinstall.html


点击此处,即可查看更多函数计算信息!

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
12天前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
204 12
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
9672 60
|
6月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
558 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
18天前
|
消息中间件 Ubuntu Java
SpringBoot整合MQTT实战:基于EMQX实现双向设备通信
本教程指导在Ubuntu上部署EMQX 5.9.0并集成Spring Boot实现MQTT双向通信,涵盖服务器搭建、客户端配置及生产实践,助您快速构建企业级物联网消息系统。
187 1
|
4月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
222 0
|
7天前
|
人工智能 运维 安全
聚焦 AI 应用基础设施,云栖大会 Serverless AI 全回顾
2025 年 9 月 26 日,为期三天的云栖大会在杭州云栖小镇圆满闭幕。随着大模型技术的飞速发展,我们正从云原生时代迈向一个全新的 AI 原生应用时代。为了解决企业在 AI 应用落地中面临的高成本、高复杂度和高风险等核心挑战,阿里云基于函数计算 FC 发布一系列重磅服务。本文将对云栖大会期间 Serverless+AI 基础设施相关内容进行全面总结。
|
6月前
|
人工智能 开发框架 安全
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力,用户只需提交 npx 命令即可“零改造”将开源 MCP Server 部署到云上,函数计算 FC 会准备好计算资源,并以弹性、可靠的方式运行 MCP 服务,按实际调用时长和次数计费,欢迎你在阿里云百炼和函数计算 FC 上体验 MCP 服务。
525 30
|
18天前
|
人工智能 Kubernetes 安全
重塑云上 AI 应用“运行时”,函数计算进化之路
回顾历史,电网的修建,深刻地改变了世界的经济地理和创新格局。今天,一个 AI 原生的云端运行时的进化,其意义也远不止于技术本身。这是一次设计哲学的升华:从“让应用适应平台”到“让平台主动理解和适应智能应用”的转变。当一个强大、易用、经济且安全的 AI 运行时成为像水电一样的基础设施时,它将极大地降低创新的门槛。一个独立的开发者、一个小型创业团队,将有能力去创造和部署世界级的 AI 应用。这才是技术平权的真谛,是激发全社会创新潜能的关键。
|
25天前
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
119 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
3月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
353 13

相关产品

  • 函数计算