1. 程式人生 > >mono平臺及部署asp.net經驗之談

mono平臺及部署asp.net經驗之談

     幾年前就瞭解MONO平臺了,但一直因為對linux不懂,所以沒敢碰。在最近一個月終於嘗試著使用mono了。花費將近1個月的時間去部署,吃盡無數苦頭,最終還是成功了。在此整理,給朋友們做參考,少吃苦頭。

 一:系統選擇

我選擇的是centos 6.2系統,如果使用ubuntu或opensusu的話,可能會不會這麼麻煩,mono和opensusu是同家公司的,有直接的安裝包可用。

 二:mono版本選擇

筆者採用的是mono2.6.7 ,開始用了2.8,2.10但結果均產生各種問題,當然是因為程式碼

三:編譯程式碼

mono是.net的跨平臺實現,可不修改程式碼或修改部分程式碼來完成平臺的遷移。不修改程式碼的情況是程式碼比較簡單,僅作為測試或演示使用。一般都是需要重新編譯的。您選擇mono2.6.7,那麼你程式碼有擴充套件方法將編譯不通過,同時一些引用也會導致在mono下編譯不通過!

四:IDE選擇

當然首選是monodevelop,也可以使用 eclipse。在centos下不要嘗試去安裝monodevelop,筆者嘗試了7次都未成功,最後選擇了在ubuntu上除錯編譯程式碼,ubuntu 上的mono版本是2.6.7,所以我在伺服器上安裝的也是mono2.6.7。這樣可以保證只要測試編譯通過,無論是什麼linux系統,都能正常執行。

五:比較

在這裡,筆者提供2個站點供朋友們測試一下  www.xmwebs.com (windows iis) 和 www.ssite.info (centos mono)

可以通過輸入一個不存在的地址,在黃頁中檢視編譯器的型別,如:

 

筆者未進行專門的測試,穩定性不考慮的情況下,我是非常希望執行在mono下的,經常看到國外的文章指出,mono效能可能會好於windows上的.net實現

六:選擇資料庫

mono支援除access以外的資料庫,比如mysql,mssql,oracle,posgresql,sqlite等,建議使用mysql

七:對asp.net mvc 的支援怎麼樣?

還算比較完美,上面給出的演示站也是用mvc開發的,最大的問題是路由上,需要花比較多的時間去修復

八:部署

使用nginx+xsp部署,當然也可以用apache+mod_mono 。

安裝所需環境在這裡僅做簡單說明,網上有很多資料。也可以點選這裡檢視.

首先安裝libgdiplus

下載原始碼

tar jxvf libgdiplus-2.8.tar.bz2

cd libgdiplus-2.8

yum install glib2-devel  libpng-devel  libX11-devel  cairo-devel

yum install  libjpeg-devel (支援JPG)     giflib-devel(支援GIF)   其他格式,可以安裝相應元件

然後我們下載mono原始碼(在這裡我們用2.8)

a.安裝mono

tar jxvf mono-2.6.7.tar.bz2
cd mono-2.6.7
./configure –prefix=/opt/mono
make && make install 

安裝完成後/opt/mono/bin/mono -V 測試是否安裝成功,也可以使用下面的命令加到環境變數。

export   PATH=/opt/mono/bin:$PATH 
export PKG_CONFIG_PATH=/opt/mono/lib/pkgconfig:$PKG_CONFIG_PATH

執行/opt/mono/bin/mono-test-install 測試安裝

如果遇到libgdiplus找不到的問題,需要將路徑加入到/etc/ld.so.conf然後再ldconfig載入。

b.安裝xsp

tar jxvf  xsp-2.6.7.tar.bz2
cd xsp-2.6.7.tar.bz2 
./configure –prefix=/opt/mono
make && make install

至此MONO已經安裝完成,然後我們可以使用以下命令來開啟一個fastcgi程序

fastcgi-mono-server4   /applications/:/var/www    /socket=tcp:127.0.0.1:8080

注:fastcgi-mono-server4表示使用asp.net 4.0,對應有fastcgi-mono-server2和fastcgi-mono-server

c.配置nginx

server {
         listen                  80;
         server_name             www.ops.cc;
         access_log              /var/log/xsp.log;
 
         location / { 
                 include         fastcgi_params; 
                 root            /var/www/;
                 index           index.html Default.aspx;
                 fastcgi_pass    127.0.0.1:8080;
         }
 }

ASP.NET和ASP.NET MVC Web應用程式通過FastCGI協議Nginx的執行,需要新增:

fastcgi_param  PATH_INFO          "";
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

或直接將起新增到nginx的fastcgi_params檔案。

d.重啟nginx,測試


 感興趣的朋友趕緊試一試吧。如不明白,歡迎加我QQ:188867734交流