就在最近一段時間,「Visual Studio 2015 CTP 5」(如下簡稱CTP5)發佈了,CTP5的發佈不只標誌着新一代的VisualStudio正式發佈又向前邁出了一步,還標誌着距離ASP.NET5(vNext)的正式發佈不遠。跟隨者CTP5,KRE也從Kre beta-1.0升級到了Kre beta-2.0。git
與衆多.NET開發者同樣,咱們也一直在密切的關注ASP.NET5的發展,而做爲領先的Linux.NET WebServer服務器更是如此,早在Kre beta-2.0發佈先後,Jexus已經以「內部」的方式發佈了相應的「適配器(Adapter)」,經過這些適配器,咱們能夠比較容易的在Linux上運行ASP.NET5的程序。相信在不久的未來,隨着ASP.NET5的正式發佈,正式版Jexus For ASP.NET5 Adapter也會在第一時間進行發佈。github
言歸正傳,上回咱們發佈了《再探ASP.NET5》,對ASP.NET5的構架進行了初步的探討,在本篇內容中,咱們將正如標題所說的那樣,咱們將介紹如何在Linux.NET中部署ASP.NET5程序,相關的組件,能夠到「OWIN羣(Q羣號:373470340)」或者本文Demo(點擊這裏進行下載)中得到。本文的操做是基於ASP.NET5 Beta1/2進行操做,如若ASP.NET5正式版有巨大改動,請以正式版爲準。本實驗對網絡環境要求較高,請各位讀者確保機器網絡環境通暢且沒有被任何物質阻擋。web
正式進入主題,本節中咱們將介紹:json
一、搭建ASP.NET5運行環境windows
二、如何向Linux.NET部署ASP.NET5程序安全
三、Jexus Host ASP.NET5的技術內幕服務器
本文demo,各位讀者能夠點擊這裏進行下載。網絡
1、搭建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的運行環境。
2、如何部署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便可。
訪問咱們的頁面,頁面被成功的訪問了。
3、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
(若是您以爲這篇文章寫得好或者有用請點個贊)