Spring Boot Serverless 實(shí)戰(zhàn)系列“部署篇” | Mall 應(yīng)用


我將通過一系列文章,從架構(gòu),部署,監(jiān)控、性能、安全等 5 個(gè)方面來分析 Serverless 平臺(tái)運(yùn)行 Spring Boot 應(yīng)用的優(yōu)劣。我們?cè)谏弦黄摹癝pring Boot on FC 架構(gòu)篇”中,對(duì) Mall 應(yīng)用架構(gòu)以及 Serverless 平臺(tái)有了一個(gè)基本的介紹,我會(huì)在本篇中為各位講述如何將 Mall 應(yīng)用部署到函數(shù)計(jì)算平臺(tái)上。為了讓分析更有代表性,我選擇了 Github 上 star 數(shù)超過 50k 的電商應(yīng)用 mall 作為示例。
前置條件
準(zhǔn)備階段:
您需要有一個(gè)阿里云的賬戶 您需要有一臺(tái)能通過公網(wǎng) ip 訪問的機(jī)器,安裝 MySQL,Redis 等 Mall 應(yīng)用依賴的軟件。
您需要在運(yùn)行依賴軟件的機(jī)器上安裝 Git, Docker,Java 和 Maven 軟件 您需要安裝并配置 Serverless Devs 工具

1、部署依賴軟件
1.1?Clone 代碼倉(cāng)庫(kù)
git clone https://github.com/hryang/mall
國(guó)內(nèi)訪問 Github 網(wǎng)絡(luò)不太好,如果 clone 太慢,可使用 Gitee 地址。
git clone https://gitee.com/aliyunfc/mall.git
1.2?構(gòu)建和運(yùn)行 Docker 鏡像
docker 文件夾下,有每個(gè)依賴軟件對(duì)應(yīng)的 Dockerfile。運(yùn)行代碼根目錄下的 run.sh 腳本,會(huì)自動(dòng)構(gòu)建所有依賴軟件的 Docker 鏡像,并在本機(jī)運(yùn)行。sudo bash docker.sh
1.3?驗(yàn)證依賴軟件運(yùn)行狀態(tài)
sudo docker ps
2.1 修改 Mall 應(yīng)用配置
修改下面?3 個(gè) yaml 文件,將其中的?host?字段改成您第 1 步安裝 MySQL 等軟件的節(jié)點(diǎn)公網(wǎng) 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 應(yīng)用容器鏡像
執(zhí)行 maven 打包命令,生成 Docker 鏡像,本地是 Java8 或者 Java11 環(huán)境均可。
sudo -E mvn package
成功后,將顯示如下成功信息。

執(zhí)行 sudo docker images,應(yīng)該能看到 mall/mall-admin,mall/mall-portal,mall/mall-search 的 1.0-SNAPSHOT 版本的鏡像。

2.3 將鏡像推送到阿里云鏡像倉(cāng)庫(kù)

quanxi-hryang 的命名空間。
根據(jù)之前的步驟,我們已經(jīng)在本地生成了 mall/mall-admin, mall/mall-portal, mall/mall-search 的鏡像。
執(zhí)行下面的命令,將 mall-admin 鏡像推送到杭州區(qū)域,quanxi-hryang 命名空間下的鏡像倉(cāng)庫(kù)。
請(qǐng)將下面命令中的 cn-hangzhou 和 quanxi-hryang 修改為您自己的鏡像倉(cāng)庫(kù)地域和命名空間。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-SNAPSHOTsudo docker push registry.cn-hangzhou.aliyuncs.com/quanxi-hryang/mall-admin:1.0-SNAPSHOT
2.4 修改 Serverless Devs 工具的應(yīng)用定義
s.yaml文件,這是 Serverless Devs 工具的項(xiàng)目定義文件。這里面定義了函數(shù)計(jì)算的資源。access是您使用s config配置的身份,默認(rèn)是 default。如果您采用默認(rèn)設(shè)置,那么這里不需要更改。region是您要部署的地域,有 cn-hangzhou,cn-shanghai,cn-beijing,cn-shenzheng 等選項(xiàng)。
函數(shù)使用了 custom-container 運(yùn)行時(shí),需要指定鏡像地址。請(qǐng)將 s.yaml 中的鏡像地址改為您上一步推送的 mall-admin 鏡像地址。同理,也需要在 s.yaml 中更改 mall-portal,mall-search 的鏡像地址。

2.5 部署 Mall 應(yīng)用到函數(shù)計(jì)算平臺(tái)
s deploy 命令,部署成功后,您將看到對(duì)應(yīng)的訪問網(wǎng)址。
訪問對(duì)應(yīng)的 swagger api 調(diào)試頁面 host/swagger-ui.html,就能調(diào)試相關(guān)的后端 API 了。

2.6 查看應(yīng)用日志
s.yaml 中為每個(gè)服務(wù)都設(shè)置了 logConfig:auto,代表 serverless-devs 工具會(huì)自動(dòng)為服務(wù)創(chuàng)建日志庫(kù)(LogStore),所有的服務(wù)都共享一個(gè)日志庫(kù)。應(yīng)用所有的日志都輸出到。您可以使用
s logs命令查看所有服務(wù)某個(gè)時(shí)間點(diǎn)的日志;也可以使用
s mall-admin logs查看 mall-admin 函數(shù)的日志;也可以使用
s mall-admin logs -t以跟隨模式實(shí)時(shí)顯示當(dāng)前時(shí)間點(diǎn)之后的日志;也可以使用
s mall-admin logs --keyword=abc查看包含關(guān)鍵詞 abc 的日志。
s mall-admin logs -t 進(jìn)入跟隨模式,然后在瀏覽器中訪問 mall-admin 服務(wù)的 endpoint,就能看到整個(gè)應(yīng)用的啟動(dòng)和請(qǐng)求處理日志。
2.7 部署 Mall 前端項(xiàng)目
git clone https://github.com/hryang/mall-admin-webgit clone https://gitee.com/aliyunfc/mall-admin-web.gitconfig/prod.env.js,將其中的 BASE_API 改為之前在函數(shù)計(jì)算上部署成功的 mall-admin 的 endpoint。
npm install
npm run build
docker.sh 腳本,生成鏡像。sudo bash docker.sh
docker images 命令,將看到 mall/mall-admin-web 鏡像已經(jīng)成功生成了。將鏡像推送到阿里云鏡像倉(cāng)庫(kù)。cn-hangzhou 和 quanxi-hryang 修改為您自己的鏡像倉(cāng)庫(kù)地域和命名空間。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 類似,根據(jù)您的配置調(diào)整 access,region,將 image 改為上一步推送成功的鏡像地址。
s deploy,當(dāng)部署成功后,就能看到 mall-admin-web 服務(wù)的網(wǎng)址。通過瀏覽器訪問,將看到登錄頁面。填入密碼 macro123,就能看到完整的效果。總結(jié)
Clone 項(xiàng)目代碼
找到一臺(tái) VM,運(yùn)行腳本一鍵式安裝 MySQL,Redis 等依賴軟件
修改應(yīng)用配置中
host這一項(xiàng),將值填寫為步驟2中的 VM 公網(wǎng) ip生成應(yīng)用鏡像,并推送到阿里云鏡像倉(cāng)庫(kù)
部署應(yīng)用到函數(shù)計(jì)算平臺(tái)
文中網(wǎng)址匯總
Spring Boot:https://spring.io/projects/spring-bootMall:https://github.com/macrozheng/mallServerless Devs 安裝文檔:http://serverless-devs.com/zh-cn/docs/installed/cliinstall.html
?點(diǎn)擊原文,即可查看更多函數(shù)計(jì)算信息!