就在最近一段時間,“Visual Studio 2015 CTP 5”(以下簡稱CTP5)發布了,CTP5的發布不僅標志著新一代的VisualStudio正式發布又向前邁出了一步,還標志著距離ASP.NET5(vNext)的正式發布不遠。跟隨者CTP5,KRE也從Kre beta-1.0升級到了Kre beta-2.0。
與眾多.NET開發者一樣,我們也一直在密切的關注ASP.NET5的發展,而作為領先的linux.NET WebServer服務器更是如此,早在Kre beta-2.0發布前后,Jexus已經以“內部”的方式發布了相應的“適配器(Adapter)”,通過這些適配器,我們可以比較容易的在Linux上運行ASP.NET5的程序。相信在不久的將來,隨著ASP.NET5的正式發布,正式版Jexus For ASP.NET5 Adapter也會在第一時間進行發布。
言歸正傳,上回我們發布了《再探ASP.NET5》,對ASP.NET5的構架進行了初步的探討,在本篇內容中,我們將正如標題所說的那樣,我們將介紹如何在Linux.NET中部署ASP.NET5程序,相關的組件,可以到“OWIN群(Q群號:373470340)”或者本文Demo(點擊這里進行下載)中獲得。本文的操作是基于ASP.NET5 Beta1/2進行操作,如若ASP.NET5正式版有巨大改動,請以正式版為準。本實驗對網絡環境要求較高,請各位讀者確保機器網絡環境通暢且沒有被任何物質阻擋。
正式進入主題,本節中我們將介紹:
1、搭建ASP.NET5運行環境
2、如何向Linux.NET部署ASP.NET5程序
3、Jexus Host ASP.NET5的技術內幕
本文demo,各位讀者可以點擊這里進行下載。
一、搭建ASP.NET5運行環境
所謂工欲善其事必先利其器,需要運行ASP.NET5程序,必須先要有ASP.NET5的運行環境。ASP.NET5的運行環境除了要有常規的Linux.NET運行環境外,還額外需要一個KRuntime的環境。關于常規環境這一塊這里就不作細說,不懂的讀者可以翻閱《Linux.NET學習手記(1)》進行搭建,注意:這里的Mono版本需求為3.4.1以上,當前最新版本為3.12,各位讀者可以到官網下載并編譯安裝,也可以更簡便直接的使用JWS.OWIN進行常規環境的快速搭建。
首先,我們要逐條執行以下語句給Linux安裝相關證書:
certmgr -ssl -m https://go.microsoft.com
certmgr -ssl -m https://nugetgallery.blob.core.windows.net
certmgr -ssl -m https://nuget.org
certmgr -ssl -m https://www.myget.org
每條語句執行之后都會詢問是否安裝,輸入幾次的“yes”并回車確認即可。然后再執行以下語句讓證書馬上生效。
mozroots --import --sync
執行以下語句進行KRuntime的安裝:
curl -sSL https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.sh | sh && source ~/.kre/kvm/kvm.sh
安裝完成之后可以執行“kvm llist”列出已經安裝了的KRE版本。
如果顯示的不是beta2版本,而是beta1版本,各位讀者可以通過執行”kvm upgrade“進行升級。
至此,我們就擁有了一個供ASP.NET5的運行環境。
二、如何部署ASP.NET5程序到Linux.NET中
首先,我們需要創建一個ASP.NET5的程序,用VS15PRewView或者CTP5隨你喜歡,并寫上簡單的代碼確保能夠運行。
然后發布到本地目錄。
對ASP.NET5有所了解的讀者對這玩意絕對不陌生,我們等下需要部署里面的東西。鏡頭先轉到Linux中,我們進行Linux的配置。
我們先對Jexus中的SiteConfig進行配置,配置好相關的端口、地址,并添加"OwinMain=Jws.OwinAdapter.Next.dll,Jws.OwinAdapter.Next.Adapter"這行。
把剛才發布的項目中的源碼路徑(/approot/src/Demo1)中的內容全部上傳到Linux.NET的網站根目錄中。
把webroot中的靜態資源也上傳到根目錄中(bin/和web.config就不要了)。
在根目錄創建一個bin文件夾,并把Jexus的ASP.NET5適配器上傳到bin目錄中(“Jws.OwinAdapter.Next.dll”和“k.config”).
得到的效果入下圖所示:
接下來就是重頭戲了,使用vi打開“project.json”:
除了“dependencies”節點其他的全部刪除,“dependencies”里面的內容也清空。
在“dependencies”節點中添加“"Microsoft.AspNet.Mvc": "6.0.0-*"”。
完成后效果如下圖:
保存退出。最后在根目錄執行:
kpm restore
ASP.NET5會自動的到所有的NuGetServer下載并解決相關依賴,類似于Yum(對網絡要求高)。
執行完成之后,啟動Jexus即可。
訪問我們的頁面,頁面被成功的訪問了。
三、Adapter技術內幕
通過上述操作,我們的ASP.NET5已經成功的在Jexus上跑起,相信不少讀者也已經發現,在Jexus上運行ASP.NET5跟在VS中發布的默認方式是有所不同的,使用Jexus的方式與當前的ASP.NET MVC 1-5更接近。
Jexus和ASP.NET5的“通訊”方式正如上圖所示。而事實上,通過一些的項目證實Jexus已經作為成熟的工業級WebServer,它已經和MSOWIN相關框架達至無縫連接的水平,使用Jexus的“OWIN模式”輸出的是標準的OWIN字典,而ASP.NET5雖然與OWIN長得類似,但兩者是截然不同的東西。適配器的作用就是把OWIN Environment中的數據包裝成能直接提供ASP.NET5使用的模式以便于ASP.NET5 application的正常運行。
此外,這里還有一些技術內幕。其一就是在Jexus中使用ASP.NET5是無需使用靜態組件的(StaticFile組件),Jexus充分發揮自身強大的靜態處理能力等優勢(靜態資源的吞吐能力、安全性、并發處理能力、心跳檢測等)將盡量多的靜態請求放入到自身進行處理,一些靜態資源譬如圖片、音頻、小文件之類的Jexus是不會再調用Kre使用ASP.NET5框架進行處理,也無需再走ASP.NET5的Pipe。這大幅度的不僅大幅度的提升了網站的效率,同時也彌補了直接使用ASP.NET5 SelfHost所帶來的眾多短板(不間斷運行、多線程、安全性等)。
還有一點內幕,那就是Jexus對ASP.NET5的激活方式。相信各位讀者也知道,ASP.NET5的類庫采用了獨特的ASP.NET5 Library,目前它是與現有的程序集是互不兼容的,也暫時沒有比較好的方式去處理新舊類庫的關系,而Jexus對ASP.NET5的激活方式或許能夠給出一條解決的道路。Adapter是通過Assembly.Load的方式激活其內嵌的DLL,繼而激活并與ASP.NET5的程序進行通訊,Jexus自身成為了ASP.NET5Library與程序集之間的“中轉站”,因而Jexus既使用了ASP.NET5的類庫又最大限度的保障了普通類庫的兼容,真正做到魚與熊掌兼得。
好的,本節內容就到這里,有疑問或建議的讀者可以到OWIN群里與我或其他大牛取得聯系。需要OWIN/Jws.Mono技術支援的也可以到此群。感謝宇內大大對本篇進行技術校對,以及群里朋友借來的國外服務器。謝謝~!
此文在個人博客對應地址:http://jhonge.net/Home/Single2/1700
(如果您覺得這篇文章寫得好或者有用請點個贊)
新聞熱點
疑難解答