作者:趙兵,騰訊云云開(kāi)發(fā)團(tuán)隊(duì)高級(jí)前端開(kāi)發(fā)工程師
背景和介紹
云開(kāi)發(fā)(CloudBase)是云端一體化的云服務(wù)平臺(tái),是國(guó)內(nèi) Serverless 理念的領(lǐng)先實(shí)踐,使用云開(kāi)發(fā),開(kāi)發(fā)者無(wú)須關(guān)心服務(wù)器搭建和管理,只需編寫(xiě)業(yè)務(wù)代碼和調(diào)用原生提供的云能力,就可以快速搭建完整的小程序/小游戲、H5、Web、移動(dòng) App 等應(yīng)用,目前,云開(kāi)發(fā)已服務(wù)超過(guò) 50 萬(wàn)開(kāi)發(fā)者。
在開(kāi)發(fā)者使用云開(kāi)發(fā)的過(guò)程中,我們收集到如下場(chǎng)景的反饋和需求:
- 存量業(yè)務(wù)如網(wǎng)站、后端服務(wù)希望能托管在云開(kāi)發(fā)平臺(tái),但存在不小的改造成本;
- 無(wú)法覆蓋各種開(kāi)發(fā)語(yǔ)言、框架和現(xiàn)有的應(yīng)用交付方式;
- 應(yīng)用中存在前后端使用多種云開(kāi)發(fā)資源時(shí),希望能降低發(fā)布成本,同時(shí)實(shí)現(xiàn)持續(xù)交付;
- 應(yīng)用中添加其他云能力需要手動(dòng)在控制臺(tái)配置。
基于以上的場(chǎng)景,我們希望設(shè)計(jì)一個(gè)工具來(lái)解決上述問(wèn)題,工具擬具備以下特性:
- 支持應(yīng)用的無(wú)縫托管:用戶不需要改變開(kāi)發(fā)習(xí)慣,不需要修改代碼適配云函數(shù)等云資源,而是可以直接將應(yīng)用托管在云開(kāi)發(fā)平臺(tái)上;
- 引入支持自定義的底層資源層:引入容器化的部署方案來(lái)承載各種開(kāi)發(fā)語(yǔ)言、框架和現(xiàn)有的應(yīng)用交付方式;
- 支持聲明式描述云資源:將應(yīng)用內(nèi)各個(gè)部分最終都能描述成統(tǒng)一的描述語(yǔ)言,支持前后端的統(tǒng)一部署;
- 使用簡(jiǎn)單:使用者無(wú)須關(guān)心底層資源和底層聲明文件等細(xì)節(jié),只需要有限的業(yè)務(wù)參數(shù),即可將應(yīng)用一鍵托管到云開(kāi)發(fā)平臺(tái)。
上述特性的核心思想即讓開(kāi)發(fā)者能夠使用一體化的方式來(lái)開(kāi)發(fā)和部署應(yīng)用。
由此,CloudBase Framework 應(yīng)運(yùn)而生!CloudBase Framework 是云開(kāi)發(fā)基于上述一體化的思想開(kāi)發(fā)的前后端一體化部署工具,支持前后端一鍵托管部署在云開(kāi)發(fā)平臺(tái),開(kāi)發(fā)者無(wú)需改動(dòng)業(yè)務(wù)代碼,即可享受加速訪問(wèn)和彈性免運(yùn)維的優(yōu)勢(shì),具有以下特點(diǎn):
1. 云開(kāi)發(fā)出品
由云開(kāi)發(fā)推出,核心代碼已在 Github 開(kāi)源:
https://github.com/TencentCloudBase/cloudbase-framework
(歡迎給我們的項(xiàng)目點(diǎn)個(gè) Star,支持我們做得更好~)
2. 云原生,一體化
前后端一體化部署在 Serverless 架構(gòu)的云環(huán)境上,彈性可擴(kuò)展
3. 降低成本
資源按使用自動(dòng)彈性擴(kuò)縮容,按照使用計(jì)費(fèi),極大節(jié)約資源成本
4. 高效快速
簡(jiǎn)單易用,并內(nèi)置大量強(qiáng)大后端能力,只需要開(kāi)發(fā)業(yè)務(wù)邏輯即可
亮點(diǎn) 1: 一鍵部署
CloudBase Framework 的第一個(gè)核心亮點(diǎn)是可以實(shí)現(xiàn)一鍵部署,常見(jiàn)的應(yīng)用,不需要改動(dòng)業(yè)務(wù)代碼,即可“零配置”部署到云開(kāi)發(fā)上。
例如,圖中所示的基于 Vue CLI 工具創(chuàng)建的項(xiàng)目,在執(zhí)行 CloudBase Framework 的部署命令時(shí),會(huì)自動(dòng)檢測(cè)項(xiàng)目框架和語(yǔ)言,交互式確認(rèn)并保存項(xiàng)目配置,實(shí)現(xiàn)應(yīng)用的一鍵發(fā)布。一條命令實(shí)現(xiàn)了應(yīng)用部署,自動(dòng)配置 COS 對(duì)象存儲(chǔ)和 DNS、域名等,自帶 HTTPS 安全訪問(wèn)、CDN 訪問(wèn)加速等能力。
支持常見(jiàn)框架和語(yǔ)言
CloudBase Framework 目前支持了 Vue、React 等前端框架,也支持 Nuxt 等 SSR 框架,基于 Node 開(kāi)發(fā)的應(yīng)用如 Express、Koa 等也可以一鍵托管。除此之外,借助底層 Serverless 云應(yīng)用的能力,也可以部署其他后端的應(yīng)用(php、JAVA、Go 等),值得一提的是可以部署 Dart Server,可以配合 Flutter 實(shí)現(xiàn) Dart 語(yǔ)言的云端一體化,這也是國(guó)內(nèi)云廠商對(duì) Dart 語(yǔ)言和生態(tài)的一大補(bǔ)充。
自動(dòng)檢測(cè)框架
在降低用戶使用門檻方面,我們實(shí)現(xiàn)了自動(dòng)檢測(cè)的功能,針對(duì)常見(jiàn)前端框架無(wú)需編寫(xiě)配置,可以實(shí)現(xiàn)自動(dòng)識(shí)別項(xiàng)目的構(gòu)建和發(fā)布默認(rèn)配置
無(wú)需復(fù)雜適配
不需要學(xué)習(xí)復(fù)雜的服務(wù)器配置和更改代碼,只需要輸入業(yè)務(wù)參數(shù)即可部署
可配合 CI/CD
可以與您的現(xiàn)有工作流完美配合,可搭配 CI/ CD 工具實(shí)現(xiàn)持續(xù)部署,例如只需要幾行代碼就可以實(shí)現(xiàn) Github 自動(dòng)推送時(shí)自動(dòng)部署應(yīng)用前后端,同時(shí)也可以在 CI/CD 過(guò)程中增加手動(dòng)確認(rèn)步驟來(lái) Review 發(fā)布過(guò)程。
- name: Deploy to CloudBase
run: |
npm i @cloudbase/cli
cloudbase login --apiKeyId ${{secrets.SECRETID}} --apiKey ${{secrets.SECRETKEY}}
cloudbase framework:deploy
亮點(diǎn) 2: 一體化,易擴(kuò)展
平臺(tái)一體化
云開(kāi)發(fā)(CloudBase)是云端一體化的云服務(wù)平臺(tái),采用 serverless 架構(gòu),開(kāi)發(fā)者無(wú)須關(guān)心服務(wù)器搭建和管理,原生提供了很多開(kāi)箱即用的云能力
項(xiàng)目一體化
使用 CloudBase Framework 開(kāi)發(fā)的項(xiàng)目前端、后端等都可以在同一個(gè)項(xiàng)目?jī)?nèi)開(kāi)發(fā)和維護(hù),這一點(diǎn)和小程序開(kāi)發(fā)非常類似,可以在 IDE 內(nèi)通過(guò)一體化的方式開(kāi)發(fā)和發(fā)布。
前后端一體化部署
如上面的例子所示,一個(gè)具備前端代碼、云函數(shù)和服務(wù)端代碼的一體化應(yīng)用,只需要調(diào)用 CloudBase Framework 的一條命令,即可將完整應(yīng)用部署在云端,統(tǒng)一管理和維護(hù)。
開(kāi)箱即用的原生云能力
云開(kāi)發(fā)一體化平臺(tái)提供了開(kāi)箱即用的原生的云能力,無(wú)需學(xué)習(xí)底層資源配置,無(wú)需運(yùn)維和管理。
例如,在云開(kāi)發(fā)平臺(tái)上,我們需要部署靜態(tài)網(wǎng)站,無(wú)須關(guān)心對(duì)象存儲(chǔ)和 CDN 的管理;需要部署 HTTP 服務(wù),無(wú)須關(guān)心網(wǎng)關(guān)層和計(jì)算資源的配置;需要使用云數(shù)據(jù)庫(kù)時(shí),我們也不用擔(dān)心數(shù)據(jù)庫(kù)實(shí)例的容災(zāi)。
輕松添加更多后端能力
可輕松引入更多開(kāi)箱即用的后端能力
- 登錄鑒權(quán):通過(guò) SDK 實(shí)現(xiàn)登錄鑒權(quán)
- 云數(shù)據(jù)庫(kù):內(nèi)置的 NoSQL 數(shù)據(jù)庫(kù),可通過(guò)聲明式的方式來(lái)創(chuàng)建集合和索引
- 云接入:引入 HTTP 訪問(wèn)的支持
- 云調(diào)用:幾行代碼實(shí)現(xiàn)微信開(kāi)放能力的調(diào)用
- 云函數(shù):輕量級(jí)的計(jì)算能力
- 云存儲(chǔ):實(shí)現(xiàn)文件的存儲(chǔ)和下載
- Serverless 云應(yīng)用:極簡(jiǎn)方式使用 Kubenetes 容器
- 擴(kuò)展能力:可以免開(kāi)發(fā)安裝 CMS 內(nèi)容管理系統(tǒng)等擴(kuò)展能力
CloudBase Framework 降本增效
CloudBase Framework 通過(guò)提供一體化的開(kāi)發(fā)和部署功能,將應(yīng)用輕松遷移到一體化的云開(kāi)發(fā)平臺(tái)上來(lái)。企業(yè)和個(gè)人開(kāi)發(fā)者可以借助這套方案,提升業(yè)務(wù)效率,節(jié)省業(yè)務(wù)成本。
開(kāi)發(fā)更快
- 集成云開(kāi)發(fā)多端 SDK
- 開(kāi)箱即用的后端能力
部署更快
- 一鍵部署,聲明式創(chuàng)建云資源
- 自動(dòng)、快速?gòu)椥詳U(kuò)縮容
訪問(wèn)更快
- 更多節(jié)點(diǎn)覆蓋
- 高性能,高可用
在 50 萬(wàn)開(kāi)發(fā)者,每日調(diào)用量 7 億的規(guī)模下,可用性保障可以做到 99.90%
省心更省錢
云開(kāi)發(fā)平臺(tái)具備了免運(yùn)維,全托管,按量付費(fèi)的特點(diǎn),通過(guò) CloudBase 部署應(yīng)用的成本相比傳統(tǒng)方式部署應(yīng)用的成本,節(jié)省了運(yùn)維成本、閑置租用成本以及多角色溝通的成本。
例如微信讀書(shū)團(tuán)隊(duì)借助“小程序·云開(kāi)發(fā)”帶來(lái)了很大的效能提升,微信讀書(shū)小程序上線 10 個(gè)月累計(jì)發(fā)布 349 次版本,開(kāi)發(fā)效率分別是對(duì)應(yīng)的 APP 和 H5 的 4 倍與 2 倍。
云開(kāi)發(fā)還讓其團(tuán)隊(duì)的分工和成員能力發(fā)生了顯著變化。以前其團(tuán)隊(duì)按照前端開(kāi)發(fā)、Node.js 開(kāi)發(fā)和運(yùn)維人員進(jìn)行分工,現(xiàn)在前端負(fù)責(zé)全棧開(kāi)發(fā)。
生態(tài)和插件
CloudBase Framework 具有開(kāi)放性的特點(diǎn),通過(guò)微內(nèi)核、插件化的方式來(lái)設(shè)計(jì)這套方案。內(nèi)核層面解決插件化、構(gòu)建生命周期等問(wèn)題,針對(duì)具體的場(chǎng)景則通過(guò)插件的方式來(lái)實(shí)現(xiàn)。
例如,針對(duì)不同技術(shù)棧的網(wǎng)站的托管,設(shè)計(jì)了 website 插件來(lái)處理這一類問(wèn)題,可以解決前端頁(yè)面構(gòu)建、靜態(tài)資源的部署以及域名的處理。
開(kāi)發(fā)者也可以根據(jù)插件的規(guī)范來(lái)開(kāi)發(fā)不同的插件發(fā)布到 NPM 上,使用時(shí)只需要指定其 npm 包名即可。
目前 CloudBase Framework 官方提供的插件有:
快速開(kāi)始
- 安裝 CloudBase CLI
首先需要安裝 CloudBase 最新版命令行工具
npm install -g @cloudbase/cli@latest
- 登錄命令行工具
然后調(diào)用命令行進(jìn)行登錄,會(huì)跳轉(zhuǎn)到騰訊云控制臺(tái)進(jìn)行賬號(hào)的授權(quán),如果沒(méi)有賬號(hào),可以在控制臺(tái)進(jìn)行開(kāi)通
cloudbase login
- 初始化一個(gè)應(yīng)用
通過(guò) CloudBase 命令行工具我們可以非常方便地創(chuàng)建一個(gè)應(yīng)用,如果在現(xiàn)有應(yīng)用中使用,可以執(zhí)行 cloudbase init --without-template
cloudbase init
通過(guò)交互式地創(chuàng)建環(huán)境和選擇模板來(lái)初始化應(yīng)用
也可以直接指定模板 id 創(chuàng)建對(duì)應(yīng)的項(xiàng)目,例如
cloudbase init --template nuxt-ssr
目前支持的一體化應(yīng)用模板如下:
- 部署應(yīng)用
接下來(lái),只需要進(jìn)入到項(xiàng)目目錄中調(diào)用命令進(jìn)行部署
cloudbase framework:deploy
部署成功后,就可以通過(guò)命令行提示的地址進(jìn)行訪問(wèn)了:
https://framework.service.tcloudbase.com/express-starter/
愿景
CloudBase Framework 致力于打造一體化框架,目前已實(shí)現(xiàn)了一體化的部署工具,未來(lái)會(huì)引入一體化運(yùn)行時(shí)庫(kù)和一體化 CI/CD 工作流,幫助業(yè)務(wù)更快更簡(jiǎn)單地將業(yè)務(wù)部署在面向未來(lái)的云開(kāi)發(fā)平臺(tái)上,提高效率,節(jié)省成本。
- 一體化思想
- 一體化平臺(tái)
- 一體化部署工具
- 一體化運(yùn)行時(shí)庫(kù):通過(guò)運(yùn)行時(shí)框架簡(jiǎn)化開(kāi)發(fā)流程,以更少的代碼實(shí)現(xiàn)強(qiáng)大的功能
- 一體化 CI/CD 工作流:結(jié)合代碼倉(cāng)庫(kù)推送,實(shí)現(xiàn)內(nèi)置的自動(dòng)化云端構(gòu)建和部署
開(kāi)源貢獻(xiàn)
我們非常歡迎各位開(kāi)發(fā)者為 CloudBase Framework 貢獻(xiàn)一份力量,讓這個(gè)項(xiàng)目能夠更好地幫助開(kāi)發(fā)者提升效率。
Github 地址:
https://github.com/TencentCloudBase/cloudbase-framework
參與貢獻(xiàn)
- 積極參與 Issue 的討論,如答疑解惑、提供想法或報(bào)告無(wú)法解決的錯(cuò)誤
- 撰寫(xiě)和改進(jìn)項(xiàng)目的文檔
- 提交補(bǔ)丁優(yōu)化代碼
- 認(rèn)領(lǐng)待辦任務(wù)中的事項(xiàng)






