Spring Boot Serverless 实战系列“部署篇” | Mall 应用
我将通过一系列文章,从架构,部署,监控、性能、安全等 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 工具
1、部署依赖软件
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 验证依赖软件运行状态
sudo docker ps
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-admin,mall/mall-portal,mall/mall-search 的 1.0-SNAPSHOT 版本的镜像。
2.3 将镜像推送到阿里云镜像仓库
quanxi-hryang
的命名空间。根据之前的步骤,我们已经在本地生成了 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 工具的应用定义
s.yaml
文件,这是 Serverless Devs 工具的项目定义文件。这里面定义了函数计算的资源。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 的镜像地址。
2.5 部署 Mall 应用到函数计算平台
s deploy
命令,部署成功后,您将看到对应的访问网址。访问对应的 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 --keyword=abc
查看包含关键词 abc 的日志。
s mall-admin logs -t
进入跟随模式,然后在浏览器中访问 mall-admin
服务的 endpoint,就能看到整个应用的启动和请求处理日志。2.7 部署 Mall 前端项目
git clone https://github.com/hryang/mall-admin-web
git clone https://gitee.com/aliyunfc/mall-admin-web.git
config/prod.env.js
,将其中的 BASE_API 改为之前在函数计算上部署成功的 mall-admin 的 endpoint。npm install
npm run build
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 类似,根据您的配置调整 access
,region
,将 image
改为上一步推送成功的镜像地址。s deploy
,当部署成功后,就能看到 mall-admin-web 服务的网址。通过浏览器访问,将看到登录页面。填入密码 macro123
,就能看到完整的效果。总结
Clone 项目代码
找到一台 VM,运行脚本一键式安装 MySQL,Redis 等依赖软件
修改应用配置中
host
这一项,将值填写为步骤2中的 VM 公网 ip生成应用镜像,并推送到阿里云镜像仓库
部署应用到函数计算平台
文中网址汇总
Spring Boot:https://spring.io/projects/spring-boot
Mall:https://github.com/macrozheng/mall
Serverless Devs 安装文档:http://serverless-devs.com/zh-cn/docs/installed/cliinstall.html