幾年前就瞭解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交流