1. 程式人生 > >Ubuntu安裝Mono2.10並使用Apache承載Asp.Net mvc3應用程式

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也是一個不錯的選擇。
 

參考資料: