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