CentOS Mono Nginx 部署 MVC4+WebApihtml
通过几天的折磨,终于在CentOS上成功部署了MVC4+WebApi。Mono上的服务器推荐两种:Jexus(国产高人写的一款很牛的服务器)和Nginx(Fastcgi方式)。本文介绍Nginx如何部署MVC4+WebApi。linux
环境:nginx
CentOS 6.4(3二、64位)c++
Mono-3.2.1git
Nginx 1.5.4github
ASP.NET MVC 4web
WebApi 1.0windows
1、首先安装一些须要的软件包centos
一、 首先更新CentOS上的软件包:yum –y update。服务器
二、 安装一些须要的库:
yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-devel libtiff-devel libexif-devel giflib-devel libX11-devel freetype-devel fontconfig-devel cairo-devel yum –y install build-essential automake autoconf libtool bison libglib2.0-dev libfreetype6-dev libfontconfig-dev gettext libgif-dev libtiff4-dev libpng12-dev libexif-dev libx11-dev libxft-dev libjpeg-dev
以上的包挺多的,可是为了保险起见,仍是所有安装吧,有可能还会有缺乏包的状况,就使用yum本身安装吧。
2、下载所须要的软件包
我把全部的软件包都下载在/usr/local/src中了,你也能够选择其余的位置。
首先在命令行执行:cd /usr/local/src,而后开始下载如下软件包。
一、 Mono:因为从Mono3.0以后编译源代码须要原来有一个老的Mono环境,因此必需要下载两个版本的Mono:Mono-2.11.4和Mono-3.2.1。
Mono-2.11.4: wget http://origin-download.mono-project.com/sources/mono/mono-2.11.4.tar.bz2 Mono-3.2.1: wget http://origin-download.mono-project.com/sources/mono/mono-3.2.1.tar.bz2
二、 Libgdiplus:
wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.9.tar.bz2
三、 xsp:xsp是Mono提供的一个测试版本的服务器,可是也提供Nginx运行asp.net的fastcgi。
官网上的xsp是2.x的,这个版本的fastcgi-mono-server4不能用;因此须要从github上下载最新的3.0版本。(git以前,要使用yum –y intall git安装git包。)
Yum –y install git。 Git clone https://github.com/mono/xsp.git
四、 pcre:
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.bz2
五、 Nginx:
wget http://nginx.org/download/nginx-1.5.4.tar.gz
关于Nginx这个下载的是最新版本,须要本身安装,也可使用配置yum源头的方式安装,这个安装的好处是:执行yum命令后就自动安装完了,最后还会帮你生成一个nginx的帮助命令文件,帮助你执行nginx的启动、重启和关闭等等。本文先介绍本身编译安装的状况(我的喜爱这种方式,由于新版的Nginx已经添加了一些辅助命令了,之后介绍。)
3、安装软件包
一、 安装Mono:
(1) 首先安装Mono 2.11.4:执行如下命令,
转到存放目录:Cd /usr/local/src 解压:tar –jxvf mono.2.11.4.tar.bz2 转到解压后的目录:Cd mono-2.11.4 Configure:我把mono安装在usr目录下,因此执行如下命令: ./configure --prefix=/usr 编译安装:make && make install(这个过程比较漫长,去干点别的吧。)
(2) Mono2.11.4安装完成以后,开始安装Mono3.2.1:执行如下命令:
cd /usr/local/src tar –jvxf mono-3.2.1.tar.bz2 cd mono-3.2.1 ./autogen.sh –prefix=/usr make (这个过程也很漫长)
(3) mono-3.2.1编译完成以后,须要先卸载掉Mono-2.11.4:
cd /usr/local/src/mono-2.11.4 make uninstall
(4) 卸载完mono-2.11.4以后开始安装mono-3.2.1:
cd /usr/local/src/mono-3.2.1 make install
(5)安装完成以后,执行一下ldconfig命令,确保新安装的动态库能够被找到。
ldconfig
二、 安装libgdiplus:
cd /usr/local/src tar –jxvf libgdiplus-2.10.9.tar.bz2 cd libgdiplus-2.10.9 ./configure –prefix=/usr Make && make install ldconfig
三、 安装xsp:
cd /usr/local/src/xsp ./autogen.sh –prefix=/usr make && make install
四、 安装pcre:
cd /usr/local/src tar –jxvf pcre-8.33.tar.bz2 cd pcre-8.33 ./configure –prefix=/usr make && make install
五、 安装nginx:
开始说了nginx的安装可使用yum源的方式,也可使用本身编译的方式,下面是本身编译的方式:
cd /usr/local/src tar zxvf nginx-1.5.4.tar.gz cd nginx-1.5.4 ./configure –prefix=/usr/nginx(nginx安装在nginx目录里面) make && make install
(注:第二种安装nginx的方法:http://www.cnblogs.com/highend/archive/2013/03/06/centos6_3_install_nginx_1_2_7.html)
4、配置nginx:
一、 开放80端口:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT service iptables save (这句把上述规则写进防火墙中,要不之后每次都要开启80端口) 启动nginx /usr/nginx/sbin/nginx
启动以后,就能够经过地址访问nginx了,本身访问看看吧。
二、 配置nginx:
vi /usr/nginx/conf/nginx.conf
修改server以下:
server { listen 80; server_name localhost; location / { root /usr/nginx/html; index index.html index.htm; fastcgi_index Default.aspx; fastcgi_pass 127.0.0.1:9000; include /usr/nginx/conf/fastcgi_params; } }
打开fastcgi_params,在最后面添加如下两句:
vi /usr/nginx/conf/fastcgi_params fastcgi_param PATH_INFO ""; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
5、编写MVC+WebApi程序:
一、 使用vs创建mvc4项目,选择“基本”或者“空”。
二、 项目创建好后,删除对System.Web.Providers.dll的引用,这个貌似不支持,添加上去就没法执行程序。
三、 如下dll从本地复制出来放到你的项目下面,创建个libs,放到这里吧。
这些dll我已经复制出来了,放到后附件下载中,若是你不想本身一个一个的复制的话,就使用附件里面的吧。
Mvc4对应的dll:
Microsoft.Web.Infrastructure.dll
System.Web.Helpers.dll
System.Web.Mvc.dll
System.Web.Razor.dll
System.Web.WebPages.Deployment.dll
System.Web.WebPages.dll
System.Web.WebPages.Razor.dll
WebApi对应dll:
System.Net.Http.dll(注意:这个dll要复制4.0的哦,不要2.0的。)
System.Net.Http.Formatting.dll
System.Net.Http.WebRequest.dll
Webgrease对应的dll:
System.Web.Optimization.dll
四、 删除掉原来项目中对以上dll的引用,从新添加引用,地址为你的项目中的libs(存放你复制的dll的文件夹),注意:
Mvc4对应的dll“复制本地”都选择“True”;
WebApi对应的dll中System.Net.Http.Formatting.dll选择复制本地就能够了。
Webgrease对应的dll:System.Web.Optimization.dll选择复制本地。
五、 配置Web.config
因为咱们使用了System.Net.Http.dll的4.0版本,Webgrease也有可能会由于版本问题保存,因此须要在配置文件中配置升级配置,具体以下:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/> <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages"publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-1.3.0.0" newVersion="1.3.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" /> <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
若是有runtime这个配置节,就按照这个配置,若是没有,就本身添加。其中只有WebGrease和System.Net.Http是必须的,其余无关紧要。
六、 添加Controller、View和WebApi
在Controllers文件夹下添加一个HomeController控制器,而后添加一个Index视图。
而后再添加一个FirstApiController的WebApi。
七、按照文件的方式发布程序。
6、部署
使用ftp或者winscp等等工具,把发布好的程序上传到centos的 /usr/nginx/html中,
还有重要的一步:发布完成后,必定要修改删除Web.config中
<httpRuntime targetFramework="4.5" />
<compilation targetFramework="4.5" />
这两行,由于mono不支持<httpRuntime targetFramework="4.5" />这个中的targetFramework,为了保险起见把<compilation targetFramework="4.5" />也删除了。
7、启动
一、重启nginx
/usr/nginx/sbin/nginx –s reload
二、启动 fastcgi_mono服务器
fastcgi-mono-server4 /applications=/:/usr/nginx/html /socket=tcp:127.0.0.1:9000
8、开始访问吧
你觉得你到这里就能够正确访问你的程序了,你要是这样认为你就错了。记得在windows下,咱们输入xxx、xxx/home或者xxx/home/index就能够正确访问了,若是在mono下你也这样干,你就错了,你必需要注意url地址的大小写,若是你的Controller是HomeController,首页是Index,那你就老老实实的xxx/Home或者xxx/Home/Index这样访问,不然就提示你老死也找不到视图啊(这个简答的问题差点把我搞疯掉啊)。这些应该在nginx或者mono下面能够配置,暂时没找到配置的地方,有知道的兄弟姐妹能够告知一下啊。
总之一条:在mono下必定要注意大小写。
附录:使用jexus替代nginx
Jexus是个好东东啊,比nginx配置起来简单,也很是好的支持最新的mono。
一、 下载Jexus
cd /usr/local/src wget http://www.linuxdot.net/down/jexus-5.4.3.tar.gz
二、 安装Jexus
tar -zvxf jexus-5.4.tar.gz cd jexus-5.4 sudo ./install 3、 启动Jexus cd /usr/jexus sudo ./jws start
四、 部署
把你的发布文件上传到jexus对应的web目录就能够了,部署的方式和上面nginx是同样的,注意点也同样哦。
部署完成以后,直接重启jexus就能够了(sudo ./jws restart)。
而后,你就能够尽情的访问了。
写的有点仓促,不合理的地方,请你们指正,谢谢!
参考:
一、CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4
http://www.cnblogs.com/shanyou/p/3218611.html
二、在Ubuntu13.04中配置Jexus+Mono3.2运行Asp.Net Mvc 4站点 (一)
http://www.cnblogs.com/windvoice/p/3221974.html
三、Linux上搭建Asp.net MVC3环境(CentOS + Nginx + Mono)
http://www.cnblogs.com/bboy/archive/2012/10/08/2714626.html
四、CentOS上搭建Nginx + Mono 运行 asp.net
http://www.cnblogs.com/wander1129/archive/2011/12/16/mono.html
五、CentOS 6.3 - 安装 Nginx 1.2.7(yum源)
http://www.cnblogs.com/highend/archive/2013/03/06/centos6_3_install_nginx_1_2_7.html
六、FastCGI Nginx
http://www.mono-project.com/FastCGI_Nginx
附件: