日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

使用Jexus实现ASP.NET在Linux平台下的部署

發布時間:2023/12/29 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Jexus实现ASP.NET在Linux平台下的部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

??Hello,大家好,我是Payne,歡迎大家關注我的博客,我的博客地址是https://qinyuanpei.github.io。今天想寫一點關于Linux部署ASP.NET相關的話題,為什么突然想寫這個話題呢?因為就在幾天前,我被我所認識的一位前輩深深地鄙視了一番,原因是我依然在使用一個落后的IoC框架——Unity,在如今已然是公元2018年的今天。我突然想到,距離.NET Core 2.0發布已經有一段時間,而.NET Core 3.0的roadmap已經開始提上日程,可我好像還沒來得及認真地去對待這個現狀。我一直在關注跨平臺和跨語言的技術,就像我在大學里的時候就開始接觸Linux一樣,未來我們要面對的是種類繁多的終端平臺,從PC時代到移動互聯網,再到VR、AR、IoT和AI,有太多太多的事情在悄然發生著變化。偶爾我的內心會泛起焦慮和迷茫,可在時光蹉跎直至褪色以前,我或許只是變回了曾經的自己。既然要如同涅槃一般重新開始,為什么不首先重新拾起曾經關注的領域呢?所以,在這今天這篇文章里,你將看到:如何使用Jexus實現ASP.NET在Linux平臺下的部署

故事背景

??我們項目組在開發這樣一種服務,它可以通過收集招聘網站的簡歷來提取相關信息,而這些信息將作為訓練集供AI算法使用。考慮到Python在AI領域的優勢,我們決定采用Python來開發自然語言處理相關的業務,而簡歷的收集則是通過.NET中的Web Service暴露給前端。整個開發相對順利,可是在部署環節出現了問題。因為項目組以往的的項目都是部署在Linux Server上,所以在部署Web Service的問題上產生了分歧,負責運維的同事不愿意為這一個項目而單獨配置一臺Windows Server。這里需要說明的是,采用.NET來開發Web Service的一個重要原因是,這些簡歷中存在大量Word文檔(.doc/.docx),因此不得不采用Office提供的COM組件來支持文檔的解析,雖然后來證明的確是這些COM組件拖了跨平臺的后腿。所以,在這個時候,我們面臨著兩種選擇,第一種方案是采用Windows Server來部署,我們的運維同事表示不開心;第二種方案是采用Linux Server來部署。我們知道.NET跨平臺的一個關鍵技術是Mono,可Mono的問題是它的基礎類庫不大健全,相信微軟收購Mono以后這個問題能夠得到解決。目前官方主推的跨平臺技術是.NET Core,考慮到遷移到.NET Core版本的成本,我們最終沒有選擇這個方案。事實上,即使采用.NET Core進行開發,最終我們的部署依然需要依賴Jexus。綜合考慮這些因素,我們決定采用Jexus來將ASP.NET項目部署到Linux平臺。

關于Jexus

??Jexus是由宇內流云開發的一款Linux平臺上的高性能Web服務器,它是一個可以免費使用、不開源的項目,最大的特色是可以支持ASP.NET、ASP.NET Core、PHP。通俗地來講,我們可以認為它是Linux平臺上的IIS,這并不為過,因為你可以注意到Jexus Manager這個項目,它可以同時支持Jexus,IIS 和 IIS Express三種服務器的管理,并提供了各個平臺下一致的使用體驗,而Linux平臺則主要是針對Jexus。Jexus提供了不亞于商用服務器的眾多特性,比如多站點支持、使用應用程序池來調度管理工作進程、具有良好的穩定性和容錯能力、支持 HTTPS 和 WebSockets、支持 FastCGI 協議和 OWIN 標準。除此以外,它同時支持 URL 重寫、反向代理、壓縮傳輸、入侵檢測等重要功能。Jexus底層采用Linux中的epoll機制來處理網站請求,所以會比通常使用libuv實現的技術擁有更高的性能。作為一款跨平臺軟件,Jexus支持主流的Linux發行版本。目前,國內外已經有大量的網站采用Jexus作為它的服務器,我們可以在Jexus的官網上找到這些案例。雖然微軟官方正在全力推廣.NET Core,但對于那些需要維護的舊項目而言,遷移到全新的.NET Core平臺著實是個不小的挑戰,而且目前支持.NET Core版本的類庫并不豐富,雖然最終的趨勢一定是.NET Core替代Mono,但對于Mono而言,在.NET宣布開源以后,從.NET Framework中吸收的基礎類庫,極大的改善了Mono基礎類庫不完善的狀況,而Mono針對CLR的實現、C#編譯器的實現、AOT環境等等特性,或許可以為.NET跨平臺提供借鑒,這是一個相互促進的過程。在新時代到來以前,我們暫時需要使用Jexus來過渡。

Hello Linux

??OK,下面我們來體驗一下Jexus在Linux平臺上的效果,這里我們以ASP.NET MVC4為例,我們直接通過Visual Studio創建一個項目即可,這里我們需要的是這個項目發布以后的所有文件。總之,這些文件需要通過某種方式放到Linux平臺上,大家自己去想辦法就好啦,這個不再說多余的話。

安裝Jexus

??Jexus安裝起來是非常簡單的,這里博主使用的是Elementary OS,基于Ubuntu14.0的衍生版本。在終端下執行如下命令:

1 curl https://jexus.org/release/x64/install.sh|sudo sh

?

你沒有看錯,真的只需要一行命令。事實上,Jexus分為兩個版本,即通用版和獨立版。其差別是通用版不含Mono運行時,獨立版含有Mono運行時。官方建議使用獨立版,如果有朋友想嘗試安裝通用版,請在終端下執行如下命令:

1 curl https://jexus.org/release/install|sudo sh

?

無論采用哪一種方式安裝,當你看到終端中顯示:Jexus已經被成功安裝到系統,就表示Jexus安裝成功了。

配置Jexus

??Jexus部署到網站,需要兩個東西,一個是網站內容(廢話),一個是網站配置。假定我們這里將這兩個東西打包在一起,壓縮包的名字為app.tar。為什么這里選擇了.tar格式的壓縮文件呢?因為在Linux平臺下這個格式更好用些,我們熟悉的.zip格式,可能會需要我們安裝相應的擴展。此時,我們可以使用如下腳本來部署網站:

1 2 3 tar -xf app.tar sudo mv -f .aspnetconf usr/jexus/siteconf/aspnetconf sudo mv ./aspnet /var/www

?

OK,現在來解釋下這個腳本,這里我們需要部署一個名為“aspnet”的網站,所以,網站的內容被放置在“aspnet”這個目錄里。該網站對應一個作用于Jexus的配置文件,配置文件的名字為aspnetconf。首先,我們將“aspnetconf”這個配置文件移動到了“usr/jexus/siteconf/”目錄下,這是Jexus指定的配置路徑,即每一個站點都有一個配置文件,且該配置文件被放置在“usr/jexus/siteconf/”目錄下。然后,我們將“aspnet”這個文件夾移動到了“/var/www”目錄下,這是Jexus指定的網站目錄,即每一個站點都有一個文件夾,文件夾的名字可以理解為網站的名字。默認情況下,Jexus會在www目錄里創建一個名為default的文件夾,即默認有一個名為default的站點,不過經過博主核實,最新版(v5.8.3)中是沒有default站點。同理,Jexus會siteconf目錄里創建一個名為default的配置文件。我們通常以這個配置文件為參照來編寫我們自己的配置文件,例如下面是aspnetconf中的內容:

1 2 3 4 5 port=4000 root=/ /var/www/aspnet hosts= indexs= aspnet_exts=

?

其中,

  • port表示Jexus Web服務器監聽的端口(必填)
  • root表示網站虛擬目錄與其對應的物理目錄,中間使用空格分開(必填)
  • hosts表示網站域名(建議填寫),可以使用泛域名如.yourdomain.com或者填寫表示默認網站,一個端口有且只有一個默認網站,選填
  • indexs表示網站首頁文件名,如index.html、index.aspx等,多個文件名使用英文逗號分開,選填
  • aspnet_exts表示ASP.NET擴展名,不建議填寫。如要填寫,多個擴展名(不含.)使用英文逗號分開。

最簡單的配置只需要port和root即可,更多的配置項可以參考官方文檔。

基本使用

??Jexus的常用命令簡單到只有3個,start、restart、stop。命令的基本格式為:

1 2 3 sudo /usr/jexus/jws start [站點名(可選,不指定時表示所有)] sudo /usr/jexus/jws restart [站點名(可選,不指定時表示所有)] sudo /usr/jexus/jws stop [站點名(可選,不指定時表示所有)]

?

在這個例子里,我們執行如下命令來啟動aspnet這個站點:

1 sudo /usr/jexus/jws start aspnet

?

當終端中返回OK時,就表示啟動成功啦,此時,我們打開瀏覽器,輸入http://localhost:4000就可以看到如下畫面(這里的端口號為4000):

運行在Linux上的ASP.NET


你就說,這算不算驚喜。我們還可以輸入http://localhost:4000/info來驗證Jexus是否配置正確,當Jexus被正確配置以后,你就會看到一個顯示著“Welcome?to Jexus”的頁面。嗯嗯,好像是和Nginx挺像的哈!

?

Docker+

??接下來,讓我們考慮將這些Linux上的工作轉移到Docker中來做,因為借助Docker的容器技術,它可以為我們提供一個足以自給自足的環境。通過這個環境編譯測試通過的鏡像可以批量地部署到生產環境中。如果你不想在每一臺Linux Server上都覆蓋本文的流程,那么Docker將是提高你部署效率的不二選擇,而且從認知完整性的角度來看待Docker,你就會發現它和Jekins、TravisCI、VSTS工具一樣,都可以非常完美地被接入到持續集成(CI)的流程里去,譬如我們項目組采用的是Jekins + Gitlib + Docker的方案,所以,如果你想要選擇一個最適合你的持續集成(CI)方案,無論如何,Docker都是需要去了解的一個知識。關于Docker的背景知識大家可以自己去了解,這里我們通過編寫Dockerfile來完成網站鏡像的構建:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 FROM ubuntu:14.04 LABEL vendor="qinyuanpei@163.com"# Prepare Environment RUN sudo apt-get update RUN sudo apt-get install -y RUN sudo apt-get install -y curl RUN sudo apt-get install -y wget RUN sudo curl -sSL https://jexus.org/release/x64/install.sh|sudo sh# Deploy Website ADD dest/ / RUN sudo mv -f aspnetconf /usr/jexus/siteconf/aspnetconf RUN sudo mkdir -p /var/www RUN sudo mv ./aspnet /var/www# Start Jexus EXPOSE 4000 WORKDIR /usr/jexus CMD sudo ./jws start aspnet

?

如果你熟悉Linux下的命令的話,你就會知道apt-get、curl、wget這些命令的含義,真正需要的解釋的是ADD,它表示的是,將Dockerfile同級目錄下的dest目錄添加到Docker環境中,接下來的命令我們同樣非常熟悉,因為這和Linux下操作是完全一樣的。不過,這里的確有些坑需要踩,在博主構建鏡像的過程中,發現容器環境和虛擬機環境還是有本質不同的,這里的mv命令在Docker下有時候會引發“hard link”的問題,從Stackoverflow上好像并沒有找到太有價值的答案,總之,這個問題非常的玄學。接下來,我們會將Docker容器的4000端口暴露出來,為什么是4000端口呢?因為這個網站的配置中指向了4000端口,這一點在上文中我們已經提及。而入口處的命令,顯然是啟動Jexus服務,這個不再解釋。

這里,我們通過如下命令來構建一個鏡像版本:

1 docker build -t jexus-aspnet:v1.0 .

?

假如這個鏡像被成功構建出來,我們就可以使用這個鏡像來啟動網站啦。如下圖所示:

使用Docker創建網站鏡像


具體地,我們可以使用docke image命令來管理所有的docker鏡像。這里我們啟動網站:

1 docker run -p 4050:4000 -t jexus-aspnet:v1.0

?

這里,我們將Docker容器的4000端口映射到主機的4050端口,當我們在瀏覽器中輸入:http://localhost:4050,就可以得到和Linux下一樣的結果。不過,在寫作這篇博客時,博主使用的是Windows下的Docker,如果大家遇到相關問題,歡迎在博客評論區留言。

本文小結

??本文從一個實際工作的場景切入,分析和闡述了如何使用Jexus實現ASP.NET項目在Linux下的部署。為了簡化這篇文章的寫作,我們使用了一個ASP.NET MVC4的示例項目,真實的項目通常會有數據庫,所以情況會比本文所介紹的流程更為復雜,可這讓我們看到了一種可能性不是嗎?通過查閱相關資料,博主發現ASP.NET Core的部署不需要Jexus,它只需要一個dotnet run命令即可。然后,作為一次體驗Docker的過程,我們通過編寫Dockerfile的方式讓Jexus和Docker發生了某種奇妙的關聯。作為本文的一個延伸,我們需要考慮網站服務停止后可以自動重啟,這就是所謂的守護進程機制啦,感興趣的朋友可以繼續深入研究,Jexus提供了大量的優秀特性,這篇文章中所看到的不過是冰山一角。最終,我們的項目還是沒有使用Jexus,這其中有對Jexus性能的不信任,有因為COM組件而做出的妥協,有對Mono非官方方案的鄙夷……可以說,技術選型是一個受到多種因素制約的問題,誰擁有了話語權,就可以左右技術選型的走向,這是否又印證了,人類并非如自己所標榜的那般理性和正義?好了,以上就是這篇文章的全部內容啦,今天是5月20日,如果沒有人對你說“我愛你”,請記得對自己說“我愛你”,謝謝大家!

  • Jexus
  • Linux

總結

以上是生活随笔為你收集整理的使用Jexus实现ASP.NET在Linux平台下的部署的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。