a. Mono是由Novell公司(由Xamarin(已被微軟收購并且將會開源,前途一片光明)發(fā)起,一個致力于開創(chuàng).NET在Linux上使用的開源工程。它包含了一個C#語言的編譯器,一個CLR的運(yùn)行時和一組類庫,并且實現(xiàn)了ADO.NET和ASP.NET,能夠使的開發(fā)人員在Linux下用C#開發(fā)程序。)主持的項目,該項目的目標(biāo)就是創(chuàng)建一系列符合標(biāo)準(zhǔn)的ECMA(Ecma-334和Ecma-335)的.NET工具,包括C #編譯器和共同語言(CL 即 Common Language)執(zhí)行平臺(Platform),與微軟的.Net不同:Mono項目不僅可以運(yùn)行于Windows系統(tǒng)內(nèi),還可以運(yùn)行于Linux、 FreeBSD、Unix、Mac OS X和Solaris,可以說是完完全全的跨平臺。
b. Jexus即Jexus Web Server,簡稱JWS,是再linux平臺上的一款A(yù)SP.NET WEB服務(wù)器,Jexus for linux有如下特點:
b.1 支持多種操作系統(tǒng):Jexus最初的設(shè)計目標(biāo)就是"跨平臺的ASP.NET WEB服務(wù)器",由于在window系統(tǒng)上,IIS已經(jīng)是ASP.NET的優(yōu)秀平臺,所以當(dāng)前的Jexus以支持Linux和FreeBSD等非Windows系統(tǒng)為主要設(shè)計目標(biāo)。
b.2 高性能:“高性能”是Jexus的重要設(shè)計目標(biāo),雖然Jexus基于Mono環(huán)境運(yùn)行,但Jexus并非全部由mono的.NET組件構(gòu)成,對于涉及性能的關(guān)鍵代碼,Jexus非常巧妙的大量采用了Linux/Unix本身的優(yōu)秀特性,從代碼層面保證了Jexus的性能優(yōu)勢,同時Jexus的框架特征也為高性能提供了基礎(chǔ)保證。Jexus不象XSP那樣,純HTML也需要經(jīng)過ASP.NET處理,更不象Apache和Nginx等服務(wù)器,需要通過插件的形式間接地對ASP.NET進(jìn)行支持,Jexus把HMTL靜態(tài)文件處理模塊、ASP.NET處理模塊、靜態(tài)文件高速緩存機(jī)制、epoll/poll數(shù)據(jù)傳輸機(jī)制等進(jìn)行了高度集成,從架構(gòu)本身入手,最大限度地提高WEB服務(wù)器的處理能力和傳輸速度。
b.3 安全性:Jexus內(nèi)核含有安全監(jiān)控機(jī)制,絕大多數(shù)惡意訪問在進(jìn)入網(wǎng)站前就會被Jexus直接Pass掉,這是Jexus有別于其它Web服務(wù)的一大特色。
b.4 穩(wěn)定性:從運(yùn)行機(jī)制而言,Jexus系統(tǒng)中,有專門監(jiān)測工作進(jìn)程執(zhí)行狀態(tài)的管理單元,任何一個進(jìn)程退出或者任何一個ASP.NET網(wǎng)站應(yīng)用程序域退出,就會被管理單元發(fā)現(xiàn)并且重啟,從而保證了Jexus能夠時時刻刻不間斷的工作,舊程序本身而言,Jexus程序的代碼力求簡潔,Bug很少,同時,Jexus的每個版本在正式發(fā)布之前,都要進(jìn)過嚴(yán)格的壓力測試,影響穩(wěn)定性的因素,幾乎在正式發(fā)布之前既已被全部排除。
b.5 功能強(qiáng)大,Jexus支持URL重寫,支持多目標(biāo)服務(wù)器的反向代理,支持PHP,支持GZIP壓縮傳輸并且可以利用不同端口,不同虛擬路徑,不同域名設(shè)置任意數(shù)量的網(wǎng)站。
b.6 安裝、配置、操作即為簡單,服務(wù)社區(qū)化,各種問題都能快速的處理,有良好的后續(xù)服務(wù)支撐能力。
b.7 在官網(wǎng)下還有一些好處請查看:http://www.linuxdot.net/bbsfile-3084
備注:部分內(nèi)容來自網(wǎng)絡(luò),感謝張善友等社區(qū)活躍人物。
c. Mono官網(wǎng):http://www.mono-project.com/
d. Jexus官網(wǎng):http://www.jexus.org/
e. 工欲善其事必先利其器,那么下面我們來進(jìn)行配置mono和Jexus并且部署MVC網(wǎng)站,本次操作需要用到的軟件以及系統(tǒng)如下所示:虛擬機(jī)(Vmware)、虛擬機(jī)中安裝的CentOS系統(tǒng)(64位)(IP:192.168.37.138)、Xshell、Xftp至于如何使用它們我們下面會說到。
a. 通過上面簡單的哦介紹之后,我們開始配置mono和jexus,在配置mono之前,首先來配置Libgdiplus。
b.使用XShell連接Centos,然后輸入更新系統(tǒng)命令:yum -y update將低版本的系統(tǒng)升級(我的從centos6.4升級到6.7),6.4下配置也可以。
c. 執(zhí)行完畢之后,在安裝必要的軟件,命令如下:
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í)行。
d. 執(zhí)行完畢之后跳轉(zhuǎn)到local下面創(chuàng)建屬于自己的文件夾kencery,在此文件夾下面創(chuàng)建libgdiplus文件夾,命令如下:
d.1 (1):cd usr/local/ (2):mkdir kencery (3):cd kencery/ (4):mkdir libgdiplus (5):cd libgdiplus/
e. 使用命令wget下載最新版本的libgdiplus,命令如下,下載完成之后將包解壓(至于安裝包里面是什么內(nèi)容,請自行使用命令ls -l查看),如下圖所示:
e.1 wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-4.2.tar.gz
e.2 tar -zxvf libgdiplus-4.2.tar.gz
備注:可以打開http://download.mono-project.com/sources/libgdiplus/此網(wǎng)站查看所有的文件,選擇想要下載的文件,我這里下載的是最新的libgdiplus。
f. 進(jìn)入libgdiplus-4.2(cd libgdiplus-4.2)文件下,執(zhí)行下面的命令進(jìn)行安裝
f.1 ./configure --prefix=/usr
f.2 make
f.3 make install
a. Mono的安裝在整個 過程中時間比較長,請大家耐心安裝。
b. cd跳轉(zhuǎn)到文件夾kencery,在此文件夾下面創(chuàng)建mono文件夾,命令如下:
b.1 (1):cd /usr/local/kencery (2):mkdir mono (3):cd mono/
c. 使用命令wget下載最新版本的mono,命令如下,下載完成之后將包解壓(至于安裝包里面是什么內(nèi)容,請自行使用命令ls -l查看),如下圖所示:
c.1 wget http://download.mono-project.com/sources/mono/mono-4.4.0.148.tar.bz2
c.2 tar -jxvf mono-4.4.0.148.tar.bz2
備注:可以打開http://download.mono-project.com/sources/mono/此網(wǎng)站查看所有的文件,選擇想要下載的文件,我這里下載的是最新的mono。
d. 進(jìn)入mono-4.4.0(cd mono-4.4.0)文件下,執(zhí)行下面的命令進(jìn)行安裝
d.1 ./configure --prefix=/usr
d.2 make (發(fā)現(xiàn)會出現(xiàn)很多警告,不用擔(dān)心,不會影響到項目部署)
d.3 make install
e. 上述命令執(zhí)行完成之后,輸入mono -V如果含有mono的版本信息,則說明安裝成功,版本信息如圖所示:
a. 當(dāng)mono配置完成并且測試沒有問題的情況下,這時候我們就可以對Jexus進(jìn)行配置了。
b. cd跳轉(zhuǎn)到文件夾kencery,在此文件夾下面創(chuàng)建jexus文件夾,命令如下:
b.1 (1):cd /usr/local/kencery (2):mkdir jexus (3):cd jexus/
c. 使用命令wget下載最新版本的jexus,命令如下,下載完成之后將包解壓(至于安裝包里面是什么內(nèi)容,請自行使用命令ls -l查看),如下圖所示:
c.1 wget http://www.linuxdot.net/down/jexus-5.8.1.tar.gz
c.2 tar -zxvf jexus-5.8.1.tar.gz
d. 進(jìn)入jexus-5.8.1(cd jexus-5.8.1)文件下,執(zhí)行下面的命令進(jìn)行安裝
d.1 sudo ./install
備注:在執(zhí)行install腳本時,jexus默認(rèn)是安裝到/usr/jexus/中,如果您想安裝到自定義的目錄,可以在執(zhí)行該腳本的時候增加一個目錄參數(shù)(sudo ./install /usr/local/kencery/jexus/)
e. 因為Jexus是一個服務(wù),故而可以控制整個服務(wù)的啟動、停止、重啟,命令如下,請自行測試
e.1 啟動 sudo /usr/jexus/jws start
e.2 停止 sudo /usr/jexus/jws stop
e.3 重啟 sudo /usr/jexus/jws restart
f. 當(dāng)然也可以控制指定網(wǎng)站的啟動,停止,重啟,命令如下:請自行測試
f.1 啟動 sudo /usr/jexus/jws start website(網(wǎng)站名稱)
f.2 停止 sudo /usr/jexus/jws stop sizeName(網(wǎng)站名稱)
f.3 重啟 sudo /usr/jexus/jws restart sizeName(網(wǎng)站名稱)
g. 使用命令:sudo /usr/jexus/jws start啟動,如果jexus啟動OK,則說明安裝成功了。
h. 當(dāng)jexus啟動成功,這時候我們想在外面訪問jexus,但是瀏覽器訪問出錯,使用ping 域名是可以ping通,但是瀏覽器訪問就是失敗(提示:無法訪問此網(wǎng)站,192.168.37.138的響應(yīng)時間過長),這是為什么呢?這是因為jexus默認(rèn)是80端口,而系統(tǒng)安裝完成之后80端口是不允許外界訪問的,故而訪問不了,設(shè)置將80端口開放使外界可以訪問。
h.1 cd /etc/sysconfig/
h.2 vim iptables 修改并且保存,如圖所示:
h.3 重啟服務(wù) service iptables restart
i. 當(dāng)h完成之后,重啟jexus,輸入如下網(wǎng)址訪問,如圖所示,則說明jexus安裝完全成功,接下來我們就需要部署ASP.NET MVC項目了。
備注:快捷安裝方法(一對命令將會安裝成功Jexus)
1.安裝:sudo curl jexus.org/release/install | sh
2.更新:sudo curl jexus.org/release/upgrade | sh
說明:使用這種命令的安裝方法將會吧Jexus安裝到/usr/jexus 位置。
-------------------------------------華麗的分割線—>下面將ASP.NET MVC項目部署到Jexus下-------------------------------------------------------
a. 當(dāng)mono配置完成并且測試沒有問題的情況下,這時候我們就需要向其部署MVC項目,那么如何部署項目呢?這塊很重要
b. 那么怎么部署一個新的網(wǎng)站程序呢?
b.1 首先需要建立一個"網(wǎng)站配置文件",jexus安裝的路徑下(我本機(jī)安裝在/usr/jexus)下有一個siteconf文件夾,這里面的每一個文件都是一個網(wǎng)站的配置文件,每一個配置文件就代表一個網(wǎng)站,在(/usr/jexus/siteconf/)中,就已經(jīng)有一個默認(rèn)的網(wǎng)站配置文件,文件名為:"default";你可以修改這個配置文件,也可以將這個配置文件賦值并修改為一個新的站點。
b.2 在配置文件中,有關(guān)鍵的三項是必填項:
port:端口號定義,端口號是一個整數(shù),一般是80,也可以是65535以下的其它整數(shù),但是這個端口號必須沒有其它服務(wù)程序占用。 root:虛擬根路徑和物理根路徑的定義,根路徑由兩部分組成,中間用空格分開,空格前表示這個網(wǎng)站訪問時的虛擬根路徑(一般都是"/",不用修改),空格后是存放這個網(wǎng)站內(nèi)容的文件夾的物理路徑(比如:"/var/www/default/") hosts:域名定義,填寫訪問這個網(wǎng)站的域名,如果有多個域名,域名間用英文逗號分開,同時還可以用"泛域名",比如:"*.mysite.com"。 網(wǎng)站名稱:jexus把網(wǎng)站配置文件的名稱作為網(wǎng)站名。
b.3 首先拷貝一份default文件,拷貝到j(luò)exus安裝的路徑下的siteconf下,然后修改里面的內(nèi)容,命令如下:
(1):cd /usr/jexus/siteconf/ (2):cp default mms (3):vim mms 修改之后保存如圖所示:
b.3 這時候在jexus中我們將網(wǎng)站配置文件已經(jīng)配置完成,但是還沒有上傳網(wǎng)站,這時候我們需要上傳網(wǎng)站,上傳的路徑如上圖所示在/var/www/mms下,如果沒有文件,則創(chuàng)建即可。
c. Visual Studio部署網(wǎng)站
c.1 首先我們將下面的項目遷移到Jexus下,此項目不是Demo,是一個在實際場景中使用的項目,故而結(jié)構(gòu)就不截圖了,只簡單將主項目截圖,項目結(jié)構(gòu)如圖所示:
c.2 然后使用VS的發(fā)布功能,將項目發(fā)布,和一般的項目發(fā)布一模一樣,這里就不做詳細(xì)講解了,請參考: http://blog.sina.com.cn/s/blog_8ce459cd0102v1kx.html,在發(fā)布的時候請注意設(shè)置選項下的配置,如圖所示:(我剛開始配置始終不成功就是因為這里配置的原因)
c.3 項目發(fā)布完成之后,刪除無用的文件信息,如圖所示:
d. 將項目遷移到Jexus
d.1 首先在Linux下跳轉(zhuǎn)到需要放置項目的目錄下(cd /var/www/mms),打開XFtp,將網(wǎng)站文件上傳都此目錄下,如圖所示:
d.2 其次我們需要開放8080端口,在文章上面已經(jīng)說過如何開放端口80,參考開放即可,這里就不在累贅了。
d.3 使用jexus的重啟功能重新啟動Jexus或者啟動網(wǎng)站(./jws start或者./jws start mms(如果這個訪問還是有問題,則使用前面的命令進(jìn)行啟動))
e. 部署完成后訪問項目
e.1 部署完成之后訪問發(fā)現(xiàn)出現(xiàn)了如下圖所示的錯誤,出現(xiàn)了很亂的內(nèi)容,這是因為Linux下是區(qū)分大小寫的,故而我們需要配置jexus,使其大小寫都可以轉(zhuǎn)換,那么會如何配置呢?
e.2 打開jexus的配置文件(vim jws),取消# export MONO_IOMAP="all"這段內(nèi)容的前面的#,保存,然后重新啟動jexus(./jws restart)
e.3 最后我們在瀏覽器中訪問(http://192.168.37.138:8080/),如圖所示:項目已經(jīng)徹底遷移到Jexus下。
備注:我對項目進(jìn)行了簡單的操作,沒有遇到任何問題。
f. 說明:本博客部署的項目是ASP.NET MVC5項目,還可以部署MVC3、4和WebApi,歡迎大家嘗試,如果遇到什么問題解決不了,歡迎聯(lián)系我咨詢,我們共同學(xué)習(xí)。
Jexus的發(fā)展非常迅速,以前在使用Jexus下必須安裝mono,現(xiàn)在已經(jīng)出現(xiàn)了不需要安裝mono就可以使用的Jexus版本了(當(dāng)然還是依賴于mono,只不過是Jexus內(nèi)部內(nèi)置了一個小的mono環(huán)境),學(xué)習(xí)地址:http://www.linuxidc.com/Linux/2016-05/130920.htm
備注:本地已做測試,按照宇內(nèi)大師兄的文章去實現(xiàn),沒有任何問題,詳細(xì)請參考上面的博客。
最后感謝張善友的文章給我的思路和實現(xiàn):http://www.linuxidc.com/Linux/2015-05/117633.htm
本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2016-05/131025.htm