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 webmaster@localhost
	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也是一个不错的选择。
 

参考资料:

[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

posted @ 2011-07-20 22:14 傲雪啸风 阅读(...) 评论(...) 编辑 收藏