1.開篇說明
a. 首先我在寫這篇博客之前,已經(jīng)在自己本地配置了mono和jexus并且成功部署了asp.net mvc項(xiàng)目,我也是依賴于在網(wǎng)上查找的各種資料來配置環(huán)境并且部署項(xiàng)目的,而其在網(wǎng)上也已有了很多這方面的文章,故而我就想我是寫還是不寫呢,但是想來想去,我還是寫一下吧,因?yàn)榫W(wǎng)上的文章太雜亂,不是最新版本,不是很整齊并且也可能會遇到各種各樣的問題,所以我決定寫一篇從無到部署項(xiàng)目上線的文章并且會友情提示很多內(nèi)容以及解決方案,希望也能夠融入自己的思想。
b. 因?yàn)楝F(xiàn)在跨平臺是一個(gè)趨勢,網(wǎng)上學(xué)習(xí)的人員很多,我可能寫的不好,希望大家見諒,下面開始從無到有的過程吧。
2.Mono和Jexus簡單說明
a. Mono是由Novell公司(由Xamarin(已被微軟收購并且將會開源,前途一片光明)發(fā)起,一個(gè)致力于開創(chuàng).NET在Linux上使用的開源工程。它包含了一個(gè)C#語言的編譯器,一個(gè)CLR的運(yùn)行時(shí)和一組類庫,并且實(shí)現(xiàn)了ADO.NET和ASP.NET,能夠使的開發(fā)人員在Linux下用C#開發(fā)程序。)主持的項(xiàng)目,該項(xiàng)目的目標(biāo)就是創(chuàng)建一系列符合標(biāo)準(zhǔn)的ECMA(Ecma-334和Ecma-335)的.NET工具,包括C #編譯器和共同語言(CL 即 Common Language)執(zhí)行平臺(Platform),與微軟的.Net不同:Mono項(xiàng)目不僅可以運(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有如下特點(diǎn):
b.1 支持多種操作系統(tǒng):Jexus最初的設(shè)計(jì)目標(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è)計(jì)目標(biāo)。
b.2 高性能:“高性能”是Jexus的重要設(shè)計(jì)目標(biāo),雖然Jexus基于Mono環(huán)境運(yùn)行,但Jexus并非全部由mono的.NET組件構(gòu)成,對于涉及性能的關(guān)鍵代碼,Jexus非常巧妙的大量采用了Linux/Unix本身的優(yōu)秀特性,從代碼層面保證了Jexus的性能優(yōu)勢,同時(shí)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)的管理單元,任何一個(gè)進(jìn)程退出或者任何一個(gè)ASP.NET網(wǎng)站應(yīng)用程序域退出,就會被管理單元發(fā)現(xiàn)并且重啟,從而保證了Jexus能夠時(shí)時(shí)刻刻不間斷的工作,舊程序本身而言,Jexus程序的代碼力求簡潔,Bug很少,同時(shí),Jexus的每個(gè)版本在正式發(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至于如何使用它們我們下面會說到。
3. 配置Mono需要的GDI+兼容API的庫Libgdiplus
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
4. 配置Mono
a. Mono的安裝在整個(gè) 過程中時(shí)間比較長,請大家耐心安裝。
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)心,不會影響到項(xiàng)目部署)
d.3 make install
e. 上述命令執(zhí)行完成之后,輸入mono -V如果含有mono的版本信息,則說明安裝成功,版本信息如圖所示:

5. 配置Jexus
a. 當(dāng)mono配置完成并且測試沒有問題的情況下,這時(shí)候我們就可以對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
備注:在官網(wǎng)下找到最新的jexus下載。
d. 進(jìn)入jexus-5.8.1(cd jexus-5.8.1)文件下,執(zhí)行下面的命令進(jìn)行安裝
d.1 sudo ./install
備注:在執(zhí)行install腳本時(shí),jexus默認(rèn)是安裝到/usr/jexus/中,如果您想安裝到自定義的目錄,可以在執(zhí)行該腳本的時(shí)候增加一個(gè)目錄參數(shù)(sudo ./install /usr/local/kencery/jexus/)
e. 因?yàn)镴exus是一個(gè)服務(wù),故而可以控制整個(gè)服務(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啟動成功,這時(shí)候我們想在外面訪問jexus,但是瀏覽器訪問出錯,使用ping 域名是可以ping通,但是瀏覽器訪問就是失敗(提示:無法訪問此網(wǎng)站,192.168.37.138的響應(yīng)時(shí)間過長),這是為什么呢?這是因?yàn)閖exus默認(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項(xiàng)目了。

備注:快捷安裝方法(一對命令將會安裝成功Jexus)
1.安裝:sudo curl jexus.org/release/install | sh
2.更新:sudo curl jexus.org/release/upgrade | sh
說明:使用這種命令的安裝方法將會吧Jexus安裝到/usr/jexus 位置。
-------------------------------------華麗的分割線—>下面將ASP.NET MVC項(xiàng)目部署到Jexus下-------------------------------------------------------
6. 部署ASP.NET MVC項(xiàng)目
a. 當(dāng)mono配置完成并且測試沒有問題的情況下,這時(shí)候我們就需要向其部署MVC項(xiàng)目,那么如何部署項(xiàng)目呢?這塊很重要
b. 那么怎么部署一個(gè)新的網(wǎng)站程序呢?
b.1 首先需要建立一個(gè)"網(wǎng)站配置文件",jexus安裝的路徑下(我本機(jī)安裝在/usr/jexus)下有一個(gè)siteconf文件夾,這里面的每一個(gè)文件都是一個(gè)網(wǎng)站的配置文件,每一個(gè)配置文件就代表一個(gè)網(wǎng)站,在(/usr/jexus/siteconf/)中,就已經(jīng)有一個(gè)默認(rèn)的網(wǎng)站配置文件,文件名為:"default";你可以修改這個(gè)配置文件,也可以將這個(gè)配置文件賦值并修改為一個(gè)新的站點(diǎn)。
b.2 在配置文件中,有關(guān)鍵的三項(xiàng)是必填項(xiàng):
port:端口號定義,端口號是一個(gè)整數(shù),一般是80,也可以是65535以下的其它整數(shù),但是這個(gè)端口號必須沒有其它服務(wù)程序占用。 root:虛擬根路徑和物理根路徑的定義,根路徑由兩部分組成,中間用空格分開,空格前表示這個(gè)網(wǎng)站訪問時(shí)的虛擬根路徑(一般都是"/",不用修改),空格后是存放這個(gè)網(wǎng)站內(nèi)容的文件夾的物理路徑(比如:"/var/www/default/") hosts:域名定義,填寫訪問這個(gè)網(wǎng)站的域名,如果有多個(gè)域名,域名間用英文逗號分開,同時(shí)還可以用"泛域名",比如:"*.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 這時(shí)候在jexus中我們將網(wǎng)站配置文件已經(jīng)配置完成,但是還沒有上傳網(wǎng)站,這時(shí)候我們需要上傳網(wǎng)站,上傳的路徑如上圖所示在/var/www/mms下,如果沒有文件,則創(chuàng)建即可。
c. Visual Studio部署網(wǎng)站
c.1 首先我們將下面的項(xiàng)目遷移到Jexus下,此項(xiàng)目不是Demo,是一個(gè)在實(shí)際場景中使用的項(xiàng)目,故而結(jié)構(gòu)就不截圖了,只簡單將主項(xiàng)目截圖,項(xiàng)目結(jié)構(gòu)如圖所示:

c.2 然后使用VS的發(fā)布功能,將項(xiàng)目發(fā)布,和一般的項(xiàng)目發(fā)布一模一樣,這里就不做詳細(xì)講解了,請參考: http://blog.sina.com.cn/s/blog_8ce459cd0102v1kx.html,在發(fā)布的時(shí)候請注意設(shè)置選項(xiàng)下的配置,如圖所示:(我剛開始配置始終不成功就是因?yàn)檫@里配置的原因)

c.3 項(xiàng)目發(fā)布完成之后,刪除無用的文件信息,如圖所示:

d. 將項(xiàng)目遷移到Jexus
d.1 首先在Linux下跳轉(zhuǎn)到需要放置項(xiàng)目的目錄下(cd /var/www/mms),打開XFtp,將網(wǎng)站文件上傳都此目錄下,如圖所示:

d.2 其次我們需要開放8080端口,在文章上面已經(jīng)說過如何開放端口80,參考開放即可,這里就不在累贅了。
d.3 使用jexus的重啟功能重新啟動Jexus或者啟動網(wǎng)站(./jws start或者./jws start mms(如果這個(gè)訪問還是有問題,則使用前面的命令進(jìn)行啟動))
e. 部署完成后訪問項(xiàng)目
e.1 部署完成之后訪問發(fā)現(xiàn)出現(xiàn)了如下圖所示的錯誤,出現(xiàn)了很亂的內(nèi)容,這是因?yàn)長inux下是區(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/),如圖所示:項(xiàng)目已經(jīng)徹底遷移到Jexus下。

備注:我對項(xiàng)目進(jìn)行了簡單的操作,沒有遇到任何問題。