溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

百度應(yīng)用部署秘籍

發(fā)布時(shí)間:2020-08-05 01:10:35 來源:網(wǎng)絡(luò) 閱讀:515 作者:百度MTC 欄目:開發(fā)技術(shù)

【背景介紹】

傳統(tǒng)PaaS采用sandbox實(shí)現(xiàn)app間的資源安全隔離,sandbox需要對運(yùn)行環(huán)境和編程語言進(jìn)行底層的功能限制,例如:禁止創(chuàng)建進(jìn)程和線程,禁止部分系統(tǒng)調(diào)用,禁止對某些系統(tǒng)路徑的讀寫,禁止加載C語言模塊,禁止某些網(wǎng)絡(luò)功能等,這大大增加了開發(fā)者的開發(fā)成本,也使得應(yīng)用開發(fā)和跨平臺遷移難度叫交接和學(xué)習(xí)成本變大,不利于平臺的推廣。另外困擾開發(fā)者的一個(gè)主要問題就是應(yīng)用的云端運(yùn)行環(huán)境與開發(fā)者的本地開發(fā)環(huán)境不一致,很多功能受到限制。開發(fā)者在本地開發(fā)調(diào)試好的應(yīng)用,發(fā)布到云端就遇到沙盒限制問題無法運(yùn)行,不得不針對云端環(huán)境進(jìn)行修改。BAE采用輕量虛擬機(jī)技術(shù)進(jìn)行資源隔離,在運(yùn)行環(huán)境和編程語言層面,不做任何限制;應(yīng)用在云端的運(yùn)行環(huán)境與開發(fā)者本地的開發(fā)環(huán)境保持一致,從而使得學(xué)習(xí)成本、開發(fā)和遷移成本降到最低,開發(fā)者的生產(chǎn)力得到最大限度的解放。下圖顯示沙盒技術(shù)實(shí)現(xiàn)資源隔離(左)與輕量虛擬機(jī)技術(shù)實(shí)現(xiàn)資源隔離(右)的區(qū)別:

百度應(yīng)用部署秘籍


一、服務(wù)器部署評估

應(yīng)用部署計(jì)算流量可能存在一個(gè)逐漸優(yōu)化的過程,為了防止流量突增引起雪崩效益,針對php執(zhí)行環(huán)境(代碼為hello world),對單個(gè)執(zhí)行單元并發(fā)20時(shí)候,qps達(dá)到530最高閾值,并發(fā)再次提高qps會下降,單個(gè)執(zhí)行單元配置:單核,內(nèi)存 512,帶寬10M 。部分壓測數(shù)據(jù)如下:

百度應(yīng)用部署秘籍

注:當(dāng)前壓測數(shù)據(jù)是對執(zhí)行單元最簡單的吞吐校驗(yàn)。是線上和線下的一個(gè)輔助校驗(yàn),當(dāng)有后端服務(wù)的時(shí)候此數(shù)據(jù)會有量級減少


二、特性

執(zhí)行單元由運(yùn)行在輕量虛擬機(jī)內(nèi)的一組進(jìn)程構(gòu)成;每個(gè)執(zhí)行單元對應(yīng)一個(gè)輕量虛擬機(jī)。開發(fā)者無需關(guān)心輕量虛擬機(jī)的存在,只需關(guān)注部署的執(zhí)行單元即可。


假設(shè)有一個(gè)BAE部署分配了兩個(gè)執(zhí)行單元,每個(gè)執(zhí)行單元對應(yīng)一個(gè)輕量虛擬機(jī),執(zhí)行單元啟動后,對應(yīng)著輕量虛擬機(jī)里面的一組進(jìn)程,包括lighttpd 和php-fpm 進(jìn)程等。若其中一個(gè)輕量虛擬機(jī)出現(xiàn)故障,BAE平臺自動為其重新分配一個(gè)輕量虛擬機(jī),并將執(zhí)行單元部署到新的輕量虛擬機(jī)上,這就是執(zhí)行單元的遷移。這種技術(shù)保證了應(yīng)用的高可靠性。


運(yùn)行環(huán)境和與編程語言無任何限制:對運(yùn)行環(huán)境和編程語言,包括創(chuàng)建進(jìn)程、創(chuàng)建線程、系統(tǒng)調(diào)用、執(zhí)行C擴(kuò)展模塊、文件系統(tǒng)訪問不做任何限制。


多種編程語言支持:目前支持PHP、Python、Java、Node.js,以后會陸續(xù)增加對主流開發(fā)語言的支持。目前的bae4.0開發(fā)者還可以自定義運(yùn)行環(huán)境


編程框架的支持:編程語言層面沒有任何限制,相應(yīng)地支持特定編程語言的所有編程框架。無論是主流還是小眾框架,只要能在開發(fā)者本地的環(huán)境中運(yùn)行起來,則云端也能運(yùn)行無阻。


自動安裝依賴包:通過配置依賴包文件,云端環(huán)境可以自動安裝用戶指定的依賴包。例如,package.json是nodejs-web部署類型的NPM配置文件,用于配置node.js編譯時(shí)的依賴包及啟動時(shí)的入口文件,從package.json配置的依賴包在編譯時(shí)安裝在應(yīng)用根目錄的.bae/node_modules目錄下。相似地,requirements.txt是python-web/python-worker部署類型的用戶自定義依賴配置文件,用于配置編譯時(shí)的依賴包。開發(fā)者部署代碼時(shí)添加requirements.txt文件,其中指定的依賴包會下載安裝到應(yīng)用根目錄的deps目錄下。


豐富的服務(wù)支持:提供多樣性的擴(kuò)展服務(wù),包括MySQLMongoDB、Redis、Log、Port等。

自由的網(wǎng)絡(luò)訪問:多數(shù)PaaS對外的網(wǎng)絡(luò)訪問需要通過HTTP Proxy或Socket Proxy代理出去,而BAE對外的網(wǎng)絡(luò)訪問無需代理層的轉(zhuǎn)發(fā)。此外,BAE提供擴(kuò)展服務(wù)Port,允許開發(fā)者自定義對外提供服務(wù)的TCP端口,從而實(shí)現(xiàn)更復(fù)雜的業(yè)務(wù)邏輯。


新增worker類型:多數(shù)PaaS只提供web部署類型,BAE在此基礎(chǔ)上提供worker類型,主要用于后臺任務(wù),例如爬蟲,長期運(yùn)行于后臺,不停的去爬取各種網(wǎng)絡(luò)資源。


本地開發(fā)環(huán)境:BAE提供基于跨平臺虛擬化工具VirtualBox和虛擬機(jī)創(chuàng)建工具Vagrant的本地開發(fā)環(huán)境,通過模擬與BAE云端執(zhí)行單元完全一致的虛擬環(huán)境,確保本地調(diào)試通過的代碼部署到云端后可順利發(fā)布,節(jié)省了因本地與云端環(huán)境不一致導(dǎo)致的調(diào)試成本,在一定程度上提高了開發(fā)效率。

環(huán)境部署:本地開發(fā)環(huán)境是BAE為方便開發(fā)者使用BAE CLI工具進(jìn)行本地調(diào)試提供的Ubuntu虛擬機(jī)(12.04.2 LTS, 64bit)。


依賴于跨平臺虛擬化工具VirtualBox和虛擬機(jī)創(chuàng)建工具Vagrant,本地開發(fā)環(huán)境通過模擬與BAE遠(yuǎn)端執(zhí)行單元完全一致的虛擬環(huán)境,確保本地調(diào)試通過的代碼部署到BAE后可順利發(fā)布,節(jié)省了因本地與遠(yuǎn)端環(huán)境不一致導(dǎo)致的調(diào)試成本,在一定程度上提高了開發(fā)效率。


注意: 搭建并使用本地開發(fā)環(huán)境可以幫助開發(fā)者繞開本地與遠(yuǎn)端環(huán)境不一致引起的潛在問題,屬于可選(optional)范疇,不是使用BAE部署Web應(yīng)用的必須操作


Windows下安裝依賴包

A.  下載localenv壓縮包并解壓。

B.  從解壓包內(nèi)的localenv/SOFTWARE目錄安裝Vagrant和Virtual Box

C.  將依賴包的安裝路徑加入可執(zhí)行路徑PATH。


1) 單擊“開始”,在彈出菜單中右擊“計(jì)算機(jī)”,在下拉菜單中選擇“屬性”打開系統(tǒng)屬性對話框。

2) 單擊右側(cè)面板中的“高級系統(tǒng)設(shè)置”,打開高級系統(tǒng)設(shè)置對話框。

3) 單擊“高級”視圖右下方的“環(huán)境變量”,打開環(huán)境變量對話框。

百度應(yīng)用部署秘籍

4) 編輯用戶可執(zhí)行路徑或系統(tǒng)可執(zhí)行路徑,添加依賴包的安裝路徑并保存。路徑之間需用分號(;)隔開,以默認(rèn)方式安裝依賴包為例,需添加的路徑如下所示:

D:\HashiCorp\Vagrant\bin; C:\Program Files\Oracle\VirtualBox\


注意:

修改用戶可執(zhí)行路徑僅影響當(dāng)前用戶,修改系統(tǒng)可執(zhí)行路徑將影響所用用戶。

 

Linux下安裝依賴包

A.  下載依賴包。Vagrant (版本高于1.2.2) VirtualBox

1.  安裝依賴包。

以debian-based系統(tǒng)(Ubuntu, Debian)安裝Vagrant 1.3.5和Virtual Box

4.2.4為例,執(zhí)行如下命令:

$ sudo dpkg -i ~/Downloads/vagrant_1.3.5_x86_64.deb

$ sudo dpkg -i ~/Downloads/virtualbox-4.2_4.2.16-86992~Ubuntu~precise_amd64.deb

使用本地開發(fā)環(huán)境的常用開發(fā)調(diào)試命令如下:

   使用BAE CLI工具本地發(fā)布

   $ bae app publish --local

更多BAE CLI工具的使用方法,參見CLI入門指南。

   查看本地發(fā)布的部署

   PHP/Python/Node.js/Static:$ curl 127.0.0.1:8080 -H "Host: $app_domain"

   Java:$ curl 127.0.0.1:8080/$war_name/

   單一語言虛擬機(jī)環(huán)境中添加對其他語言的支持:$ bae_install <Programming_Language>

如當(dāng)前虛擬機(jī)環(huán)境僅支持PHP語言,執(zhí)行`bae_install,java,后可以在本地同時(shí)調(diào)試PHP和Java語言的應(yīng)用。

 

三、本機(jī)環(huán)境搭建

如果用戶想搭建本地的真實(shí)運(yùn)行環(huán)境,在此以linux環(huán)境搭建為例,整理步驟如此:確定自己要使用什么域名訪問應(yīng)用,以下例子用phpoffline.duapp.com.

/home/bae(應(yīng)該已存在,bae用戶主目錄,運(yùn)行入口目錄)

/home/bae/bae(php目錄,php環(huán)境)

/home/bae/lighttpd(lighttpd目錄, lighttpd-1.5.0)

/home/bae/wwwdata

/home/bae/wwwdata/htdocs(lighttpd訪問根目錄)

/home/bae/wwwdata/htdocs/phpoffline.duapp.com(bae平臺的應(yīng)用目錄,就是你定義的域名)


使用bae用戶部署lighttpd

到我的網(wǎng)盤下載tar包:

http://pan.baidu.com/share/link?shareid=78893&uk=1846015233

解包后,包內(nèi)的lighttpd目錄對應(yīng)/home/bae/lighttpd目錄,(按此目錄結(jié)構(gòu)將會節(jié)省大量配置工作,自己衡量:)

接下來修改lighttpd的配置文件:


Lighttpd白名單:使用白名單內(nèi)的域名訪問所在機(jī)器,才會被lighttpd允許。

[root@test.baidu.com home]# vi /home/bae/lighttpd/conf/domain_whitelist(白名單配置文件)

加入自己要用的域名phpoffline.duapp.com,保存退出


Lighttpd配置:配置lighttpd的各種參數(shù)和路徑

[root@test.baidu.com home]# vi /home/bae/lighttpd/conf/lighttpd.conf

var.rundir = “/home/bae/lighttpd”

var.wwwdir = “/home/bae/wwwdata/htdocs”

var.netpath = “10.40.72.110(此處是你機(jī)器IP):9898/log”

添加使用lua轉(zhuǎn)發(fā):

$HTTP["host"] =~ "^(.*)$" {

    vhost-magnet.path-pattern = var.wwwdir + "/%_"

    vhost-magnet.attract-raw-url-to = ( "/bae_app_conf.lua" )

}


hosts 和軟鏈

Root賬戶登錄虛擬機(jī),修改hosts文件

[root@test.baidu.com home]# vi /etc/hosts

添加這樣一行:

10.**.**.**.**  phpoffline.duapp.com,保存退出

Bae用戶在/home/bae/wwwdata/htdocs下創(chuàng)建軟鏈,指向應(yīng)用的目錄/home/bae/wwwdata/phpoffline.duapp.com

如果在windows下訪問,請?jiān)趆osts中配置域名和應(yīng)用部署ip的映射關(guān)系,如:10.**.**.**.**  phpoffline.duapp.com(linux sebserver服務(wù)器地址)

 

部署PHP

首先還是到我的網(wǎng)盤下載PHP部署用的tar包:http://pan.baidu.com/share/link?shareid=78968&uk=1846015233

下載后,里面有三個(gè)目錄,放到/home/bae/bae下面去

修改PHP相應(yīng)的配置文件:

首先檢查/home/bae/bae/php/etc/php-fpm.conf,這2處配置與下圖路徑一致

百度應(yīng)用部署秘籍

 

然后檢查/home/bae/bae/php/sbin/php-fpm,這3處與下圖一致

 百度應(yīng)用部署秘籍

最后,vi /home/bae/bae/phplib/php.ini

找到open_basedir項(xiàng),把/home/bae/wwwdata/htdocs/*******.com替換為:/home/bae/wwwdata/htdocs/phpoffline.duapp.com

找到error_log項(xiàng),確認(rèn)是這個(gè):/home/bae/lighttpd/log/php.log.wf


啟動服務(wù)

Php啟動/停止:

[bae@dbl-wise-tt-newrd07.vm.baidu.com home]#/home/bae/bae/php/sbin/php-fpm start(stop)

Lighttpd啟動/停止:

[bae@dbl-wise-tt-newrd07.vm.baidu.com home]#/home/bae/lighttpd/bin/lighttpd_control start(stop)


部署應(yīng)用

首先從svn上co自己需要的版本(待開發(fā)的4位版本或者最新基線,等等)

進(jìn)入虛擬機(jī)的/home/bae/wwwdata/htdocs/phpoffline.duapp.com下,通過svn co命令把代碼拿到該目錄下下(拿下來應(yīng)該是個(gè)appid****目錄,目錄結(jié)構(gòu)應(yīng)該是:app.conf,index.php)。在次場景對于的url是https://svn.duapp.com/appid0d9c295kd8。/home/bae/wwwdata/htdocs/目錄下面建立域名 phpoffline.duapp.com 到ci 目錄的appid0d9c295kd8的軟鏈接。通過windows或是linux都能訪問對于的應(yīng)用。                                                   Ln –s appid0d9c295kd8   /home/bae/htdocs/phpoffline.duapp.com

 

四、app.conf 和bae_app_conf.lua 轉(zhuǎn)換關(guān)系

上傳代碼的時(shí)候使用時(shí)app.conf,但是轉(zhuǎn)發(fā)的時(shí)候再lighttpd使用時(shí)lua轉(zhuǎn)發(fā)。這是因?yàn)樵诖a發(fā)布的時(shí)候平臺對app.conf做了轉(zhuǎn)發(fā)切換,app.conf介紹請參考:https://bce.baidu.com/doc/BAE/GUIGettingStarted.html#.E9.85.8D.E7.BD.AEapp.conf

這里以一個(gè)基準(zhǔn)app.conf和bae_app_conf.lua生成轉(zhuǎn)化:

百度應(yīng)用部署秘籍   


其他轉(zhuǎn)換請參考:http://pan.baidu.com/s/1bnTUijP


更多干貨分享請關(guān)注”百度MTC學(xué)院“http://mtc.baidu.com/academy/article


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI