Asp.Net長久以來令大規模部署所詬病的便是其成本的高企,mono的出現為.net應用程式開啟了通往linux的一扇大門,使得.Net應用程式低成本部署成為可能。最近為了嘗試將Asp.Net Mvc3部署在Linux下,查閱了很多資料,但發現大多數都是在OpenSUSE的,介紹如何Ubuntu下使用Apache2的文章比較少,但也終於找到了一些比較有價值的並最終安裝部署成功,把安裝過程總結出來,供廣大.Neter參考。
0. 在安裝之前
Ubuntu10.04為全新安裝,並在安裝的過程中選擇了ssh server, LAMP server, samba三個角色
1. 安裝依賴程式
apt-get install build-essential bison gettext pkg-config autoconf libtool automake
2. 安裝Mono2.10
wget http://ftp.novell.com/pub/mono/sources/mono/mono-2.10.tar.bz2tar -xjvf mono-2.10.tar.bz2cd mono-2.10./autogen.shmakesudo make installcd ..
記得make install需要sudo,否則會提示無許可權
參考資料[1]中的./autogen.sh一行有路徑參數,但發現實際輸入路徑參數會提示找不到該參數,故取消,安裝後路徑在/usr/local/bin下
3. 安裝XSP伺服器
wget http://ftp.novell.com/pub/mono/sources/xsp/xsp-2.10.tar.bz2tar -xjvf xsp-2.10.tar.bz2cd xsp-2.10./configuremakesudo make installcd ..
同第2步,參考資料[1]中的./configure一行有路徑參數,但發現實際輸入路徑參數會提示找不到該參數
4. 安裝apache-dev
apt-get install apache2-dev
5. 修整相關檔案
sudo mv /etc/apache2/mod_mono.conf /etc/apache2/mods-available/sudo a2enmod mod_monosudo service apache2 restart
預設mod_mono安裝完成後mod_mono.conf會直接出現在/etc/apache2下,ubuntu下的apache2採取分離-包含的設定檔策略,需將mod_mono.conf複製至mods-available並啟用mod_mono
6. 修改網站設定檔
<VirtualHost *:80>ServerAdmin webmaster@localhostServerName mono.me.comDocumentRoot /var/www/monoMonoServerPath mono.me.com "/usr/local/bin/mod-mono-server4"MonoDebug mono.me.com trueMonoSetEnv mono.me.com MONO_IOMAP=allMonoApplications mono.me.com "/:/var/www/mono"<Location "/">Allow from allOrder allow,denyMonoSetServerAlias mono.me.comSetHandler monoSetOutputFilter DEFLATESetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-zip dontvary</Location><IfModule mod_deflate.c>AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript</IfModule>ErrorLog /var/log/apache2/error-mono.log# Possible values include: debug, info, notice, warn, error, crit,# alert, emerg.LogLevel debugCustomLog /var/log/apache2/access-mono.log combined</VirtualHost>
除了手動更改, 該設定檔還可使用Mono Config Tool自動產生.
需要注意"MonoServerPath mono.me.com "/usr/local/bin/mod-mono-server4"一行,mono2.10採取上述預設過程安裝完成後並不在很多文章中提到的/usr/bin下,而在/usr/local/bin下
還有DocumentRoot /var/www/mono 此目錄需要有執行許可權,否則apache會報403錯誤
7. 部署網站
建立一個Asp.Net Mvc3應用程式,將該Mvc項目產生部署套件,通過samba複製至第6步中設定的網站根目錄下,並重啟apache2服務,在客戶機設定好Host並在瀏覽器中輸入設定的網域名稱,如果一切正常,恭喜你可以看到一個經典的Asp.Net錯誤頁,將customerError設為Off,將會看到,是因為缺少一個System.Web.Helpers的dll。此時,回到Mvc項目中,你需要
(1). 添加如下引用
System.Web.Razor.dll
System.Web.WebPages.Razor.dll
System.Web.WebPages.Deployment.dll
(2). 將如下引用的dll設定為複製到本地
System.Web.Helpers.dll
System.Web.Mvc.dll
System.Web.WebPages.dll
System.Web.Razor.dll
System.Web.WebPages.Razor.dll
System.Web.WebPages.Deployment.dll
(3). 重建部署套件,覆蓋伺服器上的bin目錄即可。
OK,此時,你已經擺脫了昂貴的Window Server,當然,使用盜版的同學可以偷偷走開,如果你還想擺脫昂貴的Sql Server,那麼你可以使用Mysql、PostgreSql、Mongodb,如果你不需要多麼強大的效能,那麼sqlite也是一個不錯的選擇。
參考資料:
[1] 《How to get ASP.NET MVC 2 working with Mono in 10 Steps》 - buddylindsey
[2] 《ASP.NET MVC 3 with Razor on Mono 2.10.1》 - Robert Jordan
[3] Configure Apache Mod_Mono