Ubuntu安裝Mono2.10並使用Apache承載Asp.Net mvc3應用程式
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.bz2 tar -xjvf mono-2.10.tar.bz2 cd mono-2.10 ./autogen.sh make sudo make install cd ..
記得make install需要sudo,否則會提示無許可權
參考資料[1]中的./autogen.sh一行有路徑引數,但發現實際輸入路徑引數會提示找不到該引數,故取消,安裝後路徑在/usr/local/bin下
3. 安裝XSP伺服器
wget http://ftp.novell.com/pub/mono/sources/xsp/xsp-2.10.tar.bz2 tar -xjvf xsp-2.10.tar.bz2 cd xsp-2.10 ./configure make sudo make install cd ..
同第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_mono sudo service apache2 restart
預設mod_mono安裝完成後mod_mono.conf會直接出現在/etc/apache2下,ubuntu下的apache2採取分離-包含的配置檔案策略,需將mod_mono.conf複製至mods-available並啟用mod_mono
6. 修改站點配置檔案
<VirtualHost *:80> ServerAdmin [email protected] ServerName mono.me.com DocumentRoot /var/www/mono MonoServerPath mono.me.com "/usr/local/bin/mod-mono-server4" MonoDebug mono.me.com true MonoSetEnv mono.me.com MONO_IOMAP=all MonoApplications mono.me.com "/:/var/www/mono" <Location "/"> Allow from all Order allow,deny MonoSetServerAlias mono.me.com SetHandler mono SetOutputFilter DEFLATE SetEnvIfNoCase 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 debug CustomLog /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也是一個不錯的選擇。
參考資料: