您有這樣的牢騷么?

有一周沒(méi)更新博客了,簡(jiǎn)單說(shuō)下在干什么吧;主要是公司安排對(duì)接某旅游大公司的接口,接口數(shù)量倒也就10個(gè)左右,對(duì)接完后還需要加入到業(yè)務(wù)系統(tǒng)中和App端,因此還是需要花點(diǎn)時(shí)間的;時(shí)間上來(lái)說(shuō)業(yè)務(wù)需求安排在6月最后一周上線(xiàn),整個(gè)3周的時(shí)間,就本人一人負(fù)責(zé),由于在這之前對(duì)接過(guò)另外一個(gè)公司接口,我已經(jīng)搭建好了整體架構(gòu)和提供給app端接口了,因此主要還是對(duì)接某公司接口而已,至于細(xì)節(jié)上的東西改改后臺(tái)系統(tǒng),調(diào)調(diào)數(shù)據(jù)格式應(yīng)該就差不多了;就本人開(kāi)發(fā)的熟練度來(lái)講一周時(shí)間基本能搞定,其他剩余時(shí)間就測(cè)試,喝喝茶,學(xué)習(xí)一下;誰(shuí)知。。。由于接口方說(shuō)明文檔不全,接口幾乎是每位技術(shù)負(fù)責(zé)一兩個(gè)接口(沒(méi)錯(cuò)這就是大公司,分得就這么細(xì)),而且有疑問(wèn)通過(guò)qq咨詢(xún)時(shí)響應(yīng)慢(可能別人大公司的人就是忙),就這樣來(lái)到第一周的星期五,從app測(cè)試結(jié)果和對(duì)接接口幾乎都完成的情況來(lái)看還是不錯(cuò)的(我的方式對(duì)接一個(gè)接口就嵌入到業(yè)務(wù)中,所以可以直接拿app測(cè)試),誰(shuí)知第二周的時(shí)候,也就是本周星期二我在測(cè)試多人下單出現(xiàn)了異常,隨后聯(lián)系對(duì)方,結(jié)果被告知對(duì)接的這個(gè)下單接口不是最新的,但是除此之外其他幾個(gè)接口都是最新的,最新的下單接口我們等一段時(shí)間才上線(xiàn),等上線(xiàn)了在對(duì)接吧;來(lái)到此時(shí)我只能無(wú)語(yǔ)(誰(shuí)叫您們是大公司呢),純屬浪費(fèi)我對(duì)接和咨詢(xún)的“熱情”;

部署前的準(zhǔn)備

來(lái)到這里就開(kāi)始進(jìn)入正題了,首先要準(zhǔn)備ubuntu系統(tǒng)(后面我會(huì)單獨(dú)寫(xiě)一篇怎么在OracleVM中安裝ubuntu和注意事項(xiàng)),這里我是16.04-x64版本,為什么我重點(diǎn)寫(xiě)明版本號(hào)呢,因?yàn)槲以诠倬W(wǎng)直接下載最新的Jexus包后,盡然運(yùn)行不起來(lái),后來(lái)在善友兄文章中找到了個(gè)地址,安裝試運(yùn)行后是可以的也同樣標(biāo)記的是最新版,只不過(guò)后面帶了個(gè)64位的標(biāo)記,這是一個(gè)悲催的天;

我們還需要一個(gè).netcore程序,為了測(cè)試方便我這里創(chuàng)建的是一個(gè)api程序,并且api的action里面這樣修改了下:

1 [HttpGet]2         public IEnumerable<string> Get()3         {4             return new string[] {$"這個(gè)站點(diǎn)是:{Request.Host.Host}:{Request.Host.Port}" };5         }

輸出當(dāng)前應(yīng)用程序?qū)?yīng)的ip和端口,因?yàn)樵诤竺鏋榱烁玫臏y(cè)試以及區(qū)分;這里也簡(jiǎn)單改造了下Program.cs中的代碼,同樣也是為了方便測(cè)試:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

 1  public static void Main(string[] args) 2         { 3             var builder = new WebHostBuilder() 4                 .UseKestrel(); 5             //參數(shù)指定端口 6             builder = args.Length > 0 ? builder.UseUrls(args[0]) : builder; 7             var host = builder.UseContentRoot(Directory.GetCurrentDirectory()) 8                   .UseIISIntegration() 9                   .UseStartup<Startup>()10                   .UseApplicationInsights()11                   .Build();12             host.Run();13         }

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

改完代碼后,需要生成運(yùn)行包,怎么生成這里就不講了,有興趣的朋友可以去看這里Asp.NetCore1.1版本沒(méi)了project.json,這樣來(lái)生成跨平臺(tái)包;然后通過(guò)多種方式把程序包傳到虛擬機(jī)上,這里我通過(guò)共享目錄的方式傳遞的,如果有朋友需要以后有機(jī)會(huì)分享吧;

再來(lái)剩下的就是在ubuntu中使用Jexus web server服務(wù)了,為了我虛擬機(jī)空間著想,這里我是在tmp中操作的,主要以下步驟,打開(kāi)終端:

1. cd /tmp(進(jìn)入臨時(shí)目錄)

2. wget linuxdot.net/down/jexus-5.8.2-x64.tar.gz(下載jexus文件包)

3. tar zxvf jexus-5.8.2-x64.tar.gz(解壓到當(dāng)前目錄,無(wú)需安裝)

4. chmod o+w /tmp/jexus/siteconf(為了方便設(shè)置jexus文件夾中的siteconf配置文件夾可以直接操作)

5. chmod o+w /tmp/jexus/siteconf/default(設(shè)置默認(rèn)配置default文件可直接通過(guò)打開(kāi)文件方式修改 注:本人不喜歡通過(guò)命令來(lái)修改,才有此步驟)

6. cd jexus(進(jìn)入jexus目錄  注:由于如果按照我步驟操作的話(huà)這樣可以直接進(jìn)入jexus目錄,實(shí)際jexus目錄在 cd /tmp/jexus)

7. ./jws start(測(cè)試jexus是否能正常運(yùn)行,就我寫(xiě)本篇博客的時(shí)候第一次執(zhí)行這命令返回的結(jié)果是:Failure,原因是我沒(méi)用root權(quán)限執(zhí)行命令,改成root執(zhí)行命令就行了,怎么root以后有機(jī)會(huì)再講)

 

Jexus web server開(kāi)始部署.NetCore

首先直接通過(guò)點(diǎn)擊文件夾的方式進(jìn)入如下目錄(您也可以通過(guò)終端進(jìn)入,個(gè)人喜好便捷):/tmp/jexus/siteconf;能夠看到名稱(chēng)問(wèn)default的文件,此文件在安裝時(shí)是非root權(quán)限只讀的,由于我們?cè)谏厦媸褂妹睿篶hmod o+w /tmp/jexus/siteconf/default設(shè)置了運(yùn)行其他權(quán)限的用戶(hù)都能修改內(nèi)容,所以這里我直接改,其他信息暫時(shí)不改動(dòng),只需要增加apphost節(jié)點(diǎn):

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

1 port=802 root=/ /var/www/default3 hosts=*    #OR your.com,*.your.com4 #增加apphost節(jié)點(diǎn)5 AppHost={CmdLine=dotnet /home/wangrudong003/netcore/publish01/T_Jexus.dll;AppRoot=/home/wangrudong003/netcore/publish01;Port=5000}

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

增加apphost節(jié)點(diǎn)的幾個(gè)屬性說(shuō)明:

CmdLine:執(zhí)行命令(熟悉一點(diǎn).netcore運(yùn)行的朋友可能知道,.netcore運(yùn)行命令可以這樣:dotnet xxx.dll這樣就能跑起來(lái)程序了,同理可以看成一樣的,但是需要指定應(yīng)用程序具體目錄,這里我的是 /home/wangrudong003/netcore/publish01 )
AppRoot:表示應(yīng)用程序的目錄,這里我的是 /home/wangrudong003/netcore/publish01 
Port:監(jiān)聽(tīng)端口;

 

jexus注意點(diǎn)(大家可以去這里詳細(xì)了解:https://www.linuxdot.net/bbsfile-3084):
port=80:表示通過(guò)jexus來(lái)監(jiān)聽(tīng)80端口,以此來(lái)訪問(wèn)我們的  /home/wangrudong003/netcore/publish01/T_Jexus.dll  程序
root=/ /var/www/default:指定的虛擬目錄

最后root權(quán)限進(jìn)入cd /tmp/jesux目錄,然后開(kāi)啟服務(wù):./jws start  ;如果不出意外的話(huà),您也能夠看到如下截圖信息:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

然后咋們來(lái)通過(guò)80端口訪問(wèn)以下我們部署的接口(這里我ubuntu服務(wù)器的ip是172.16.9.66):http://172.16.9.66/api/values,訪問(wèn)成功的截圖:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

 

分析一下AppHost配置中的Port是否起作用

有上圖測(cè)試我們看到了通過(guò)80端口能正常訪問(wèn)我們的接口站點(diǎn),現(xiàn)在我們通過(guò)linux命令,查看下服務(wù)器上所監(jiān)聽(tīng)的端口,查看tcp監(jiān)聽(tīng)端口命令: sudo netstat -lntp ,能投得到如圖:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

由圖能夠看出來(lái)jexus服務(wù)監(jiān)聽(tīng)的80端口,dotnet命令執(zhí)行的5000端口;為了更好的測(cè)試apphost的port的作用,我們需要把default文件中的port為5000端口改成5001來(lái)測(cè)試,改完之后的配置:

1 AppHost={CmdLine=dotnet /home/wangrudong003/netcore/publish01/T_Jexus.dll;AppRoot=/home/wangrudong003/netcore/publish01;Port=5001}

然后需要重啟jexus服務(wù),通過(guò)如下命令: ./jws restart :

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

重啟完之后,我們又來(lái)訪問(wèn):http://172.16.9.66/api/values,這個(gè)時(shí)候就訪問(wèn)不了接口了:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

盡管我們的jexus服務(wù)器是ok狀態(tài),但是接口已經(jīng)無(wú)法訪問(wèn)了,那么我們?cè)賮?lái)看看監(jiān)聽(tīng)的端口:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

端口圖對(duì)比分析

這張和之前端口截圖對(duì)比,能夠發(fā)現(xiàn)dotnet執(zhí)行的還是5000端口,和我們修改配置文件的port:5001不能對(duì)應(yīng),這有點(diǎn)奇怪,就這點(diǎn)能夠讓我們大膽猜想jexus的這個(gè)port端口設(shè)置沒(méi)有效果;而最后5000端口應(yīng)該還是dotnet自帶的默認(rèn)端口;

疑問(wèn)

然而又讓我們奇怪的是,如果5000端口運(yùn)行沒(méi)問(wèn)題,那么為什么jexus公布出去的80端口無(wú)法訪問(wèn)api接口能,我們又來(lái)大膽猜想,是不是由于我們?cè)O(shè)置的jexus的port:5001端口也真實(shí)監(jiān)聽(tīng)的5000不對(duì)應(yīng)造成的呢?為了測(cè)試我們?cè)僖淮涡薷南翧ppHost的配置信息:

AppHost={CmdLine=dotnet /home/wangrudong003/netcore/publish01/T_Jexus.dll http://127.0.0.1:5001;AppRoot=/home/wangrudong003/netcore/publish01;Port=5001}

這次我們按照netcore的命令格式:dotnet xxx.dll http://127.0.0.1:5001來(lái)設(shè)置下netcore監(jiān)聽(tīng)的端口,這也就是為什么開(kāi)篇部分我修改Program.cs中代碼的原因,一切為了測(cè)試猜想;同樣修改完后,我們執(zhí)行jexus服務(wù)的命令:./jws restart ;命令執(zhí)行ok有,先來(lái)訪問(wèn)下80端口的接口:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

此時(shí)能夠正常訪問(wèn)咋們的接口了,那最好需要驗(yàn)證的就是看看監(jiān)聽(tīng)端口了:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

第二幅與第三幅端口圖大比拼分析

通過(guò)上面第三方圖能夠看到netcore程序此時(shí)綁定的是5001端口,這個(gè)時(shí)候由jexus開(kāi)放出去的80端口也能正常訪問(wèn)咋們的接口了,那說(shuō)明我們?cè)趈exus的defaut文件中的apphost節(jié)點(diǎn)中的port:5001必須要與dotnetcore自身監(jiān)聽(tīng)的端口一致,沒(méi)錯(cuò)一致;假如jexus的端口是8080,那么netcore監(jiān)聽(tīng)的端口也必須是8080,這樣咋們通過(guò)jexus開(kāi)放出來(lái)的地址才能正常的訪問(wèn);好了到這里本篇分享文章就結(jié)束了,希望能給您帶來(lái)好的幫助,也希望大家多多點(diǎn)贊推薦,謝謝!??!

http://www.cnblogs.com/wangrudong003/p/7061064.html