有些公司內(nèi)部存在一些NET項目,而公司服務(wù)器后期都換成了Linux宦言,若單純?yōu)檫@一個項目占用一臺Windows服務(wù)器顯得極其浪費险绘,因此需要將NET項目嵌入到Linux服務(wù)器中,為了后期方便遷移和運維最好是Docker容器中運行衬潦。?
新的.net core都已經(jīng)支持docker斤蔓,手頭有一些原來開發(fā)的asp.net舊項目,用的asp.net mvc開發(fā)的镀岛,跑在.net formwork 4.6上弦牡。
我們的web項目要想運行,需要有一個像IIS一種的服務(wù)器組件漂羊,在這里有兩層意思:
1.Net接口服務(wù)運行在Linux系統(tǒng)上
2.Net接口服務(wù)打包成鏡像運行在Docker容器中
Net接口服務(wù)運行在Linux系統(tǒng)上
在linux里我們一般使用jexus來實現(xiàn)這個功能驾锰,用docker鏡像的話應(yīng)該有mono還要有jexus的基礎(chǔ)鏡像集成,也可以使用現(xiàn)成的鏡像azraelrabbit/monupw走越。
Mono包含了一個C#語言的編譯器椭豫,一個CLR的運行時和一組類庫,并且實現(xiàn)了ADO.NET和ASP.NET旨指,能夠使的開發(fā)人員在Linux下用C#開發(fā)程序赏酥。
Jexus即Jexus Web Server,簡稱JWS是在linux平臺上的一款A(yù)SP.NET WEB服務(wù)器谆构,Jexus并非全部由mono的.NET組件構(gòu)成裸扶,非常巧妙的大量采用了Linux/Unix本身的優(yōu)秀特性,從代碼層面保證了Jexus的性能優(yōu)勢搬素,同時Jexus的框架特征也為 高性能提供了基礎(chǔ)保證呵晨。
需要注意的是Mono需要配置GDI+兼容API的庫Libgdiplus。
yum?-y?install?gcc?gcc-c++?bison?pkgconfig?glib2-devel?gettext?make?libpng-devel?libjpeg-devel?libtiff-devel?libexif-devel?giflib-devel?libX11-devel?freetype-devel?fontconfig-devel? cairo-devel
備注:可能電腦已經(jīng)安裝了這些文件熬尺,可用rpm?-qa?libexif*命令查看摸屠,但是這里為了確保萬無一失,直接全部執(zhí)行粱哼。
如何安裝Mono和Jexus請參考其他園友寫的比較仔細的教程季二。
部署ASP.NET MVC項目
jexus安裝的路徑下/usr/jexus下有一個siteconf文件夾,這里面的每一個文件都 是一個網(wǎng)站的配置文件揭措,每一個配置文件就代表一個網(wǎng)站戒傻,在(/usr/jexus/siteconf/)中税手,就已經(jīng)有一個默認的網(wǎng)站配置文件,文件名 為:"default"需纳;你可以修改這個配置文件芦倒,也可以將這個配置文件賦值并修改為一個新的站點,更改端口不翩、發(fā)布文件虛擬根路徑兵扬。
將編譯的文件上傳至此目錄。
重新啟動Jexus就可以通過ip端口訪問口蝠,還要注意端口是否被防火墻攔截器钟,需要放開或關(guān)閉防火墻。
注意:
桌面的net程序是無法通過此方式使用的妙蔗,會異常傲霸。
Linux下是區(qū)分大小寫的。
Docker部署asp.net mvc站點
用Docker部署net程序相對容易得多眉反,首先需要Docker環(huán)境昙啄,這個不用說,再拉取已經(jīng)內(nèi)建了mono?和jexus?服務(wù)器的?docker鏡像?
docker?pull?azraelrabbit/monupw
運行一個端點寸五,啟動對應(yīng)的服務(wù)端口22:?sshd,?80:?jexus梳凛,ssh工具連接主機的 2022?端口,即可連接到這個已啟動的容器內(nèi),2080主機端口為映射的站點端口梳杏。
docker?run?--name cmsnet -d?-p 2022:22?-p 2080:80?-v?/mydata:/data?azraelrabbit/monupw
將你的mvc工程或asp.net工程復(fù)制到?/mydata路徑下.?并在ssh到容器里用sudo?重啟一下jws?.?即可訪問這個容器內(nèi)的站點了韧拒,或者重啟下整個容器也可以。