zoukankan      html  css  js  c++  java
  • CentOS Mono Nginx 部署 MVC4+WebApi

    CentOS Mono Nginx 部署 MVC4+WebApi

    经过几天的折磨,终于在CentOS上成功部署了MVC4+WebApi。Mono上的服务器推荐两种:Jexus(国产高人写的一款很牛的服务器)和Nginx(Fastcgi方式)。本文介绍Nginx如何部署MVC4+WebApi。

    环境:

    CentOS 6.4(32、64位)

    Mono-3.2.1

    Nginx 1.5.4

    ASP.NET MVC 4

    WebApi 1.0

    一、首先安装一些需要的软件包

    1、  首先更新CentOS上的软件包:yum –y update。

    2、  安装一些需要的库:

    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自己安装吧。

    二、下载所需要的软件包

    我把所有的软件包都下载在/usr/local/src中了,你也可以选择其他的位置。

        首先在命令行执行:cd /usr/local/src,然后开始下载以下软件包。

    1、  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

    2、  Libgdiplus:

    wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.9.tar.bz2

    3、  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

    4、  pcre:

    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.bz2

    5、  Nginx:

    wget http://nginx.org/download/nginx-1.5.4.tar.gz

    关于Nginx这个下载的是最新版本,需要自己安装,也可以使用配置yum源头的方式安装,这个安装的好处是:执行yum命令后就自动安装完了,最后还会帮你生成一个nginx的帮助命令文件,帮助你执行nginx的启动、重启和关闭等等。本文先介绍自己编译安装的情况(个人喜好这种方式,因为新版的Nginx已经添加了一些辅助命令了,以后介绍。)

    三、安装软件包

    1、  安装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 

    2、  安装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

    3、  安装xsp:

    cd /usr/local/src/xsp
    
    ./autogen.sh –prefix=/usr
    
    make && make install

    4、  安装pcre:

    cd /usr/local/src
    
    tar –jxvf pcre-8.33.tar.bz2
    
    cd pcre-8.33
    
    ./configure –prefix=/usr
    
    make && make install

    5、  安装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

    四、配置nginx:

    1、  开放80端口:

    iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    
    service iptables save (这句把上述规则写进防火墙中,要不以后每次都要开启80端口)
    
    启动nginx
    
    /usr/nginx/sbin/nginx

    启动之后,就可以通过地址访问nginx了,自己访问看看吧。

    2、  配置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;

    五、编写MVC+WebApi程序:

    1、  使用vs建立mvc4项目,选择“基本”或者“空”。

    2、  项目建立好后,删除对System.Web.Providers.dll的引用,这个貌似不支持,添加上去就无法执行程序。

    3、  以下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

    4、  删除掉原来项目中对以上dll的引用,重新添加引用,地址为你的项目中的libs(存放你复制的dll的文件夹),注意:

    Mvc4对应的dll“复制本地”都选择“True”;

    WebApi对应的dll中System.Net.Http.Formatting.dll选择复制本地就可以了。

    Webgrease对应的dll:System.Web.Optimization.dll选择复制本地。

    5、  配置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是必须的,其他可有可无。

    6、  添加Controller、View和WebApi

    在Controllers文件夹下添加一个HomeController控制器,然后添加一个Index视图。

    然后再添加一个FirstApiController的WebApi。

    7、按照文件的方式发布程序。

    六、部署

    使用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" />也删除了。

    七、启动

    1、重启nginx

    /usr/nginx/sbin/nginx –s reload

    2、启动 fastcgi_mono服务器

    fastcgi-mono-server4 /applications=/:/usr/nginx/html /socket=tcp:127.0.0.1:9000

    八、开始访问吧

    你以为你到这里就可以正确访问你的程序了,你要是这样认为你就错了。记得在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。

    1、  下载Jexus

    cd /usr/local/src
    
    wget http://www.linuxdot.net/down/jexus-5.4.3.tar.gz

    2、  安装Jexus

    tar -zvxf jexus-5.4.tar.gz
    
    cd jexus-5.4
    
    sudo ./install
    
    3、  启动Jexus
    
    cd /usr/jexus
    
    sudo ./jws start

    4、  部署

    把你的发布文件上传到jexus对应的web目录就可以了,部署的方式和上面nginx是一样的,注意点也一样哦。

    部署完成之后,直接重启jexus就可以了(sudo ./jws restart)。

    然后,你就可以尽情的访问了。

    写的有点仓促,不合理的地方,请大家指正,谢谢!

    参考:

    1、CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4

    http://www.cnblogs.com/shanyou/p/3218611.html

    2、在Ubuntu13.04中配置Jexus+Mono3.2运行Asp.Net Mvc 4站点 (一)

    http://www.cnblogs.com/windvoice/p/3221974.html

    3、Linux上搭建Asp.net MVC3环境(CentOS + Nginx + Mono)

    http://www.cnblogs.com/bboy/archive/2012/10/08/2714626.html

    4、CentOS上搭建Nginx + Mono 运行 asp.net

    http://www.cnblogs.com/wander1129/archive/2011/12/16/mono.html

    5、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

    6、FastCGI Nginx

    http://www.mono-project.com/FastCGI_Nginx

    附件:

    所需要的dll附件

    可以部署的项目源码

  • 相关阅读:
    2008 server 备份
    IBM公共文档库javascript
    javascript 删除节点
    鼠标onfocus或onblur效果
    jquery绿色版dreamweaver提示
    修复IE6下 25+ Bugs
    parentNode, removeChild, nextSibling, firstChild的练习
    近期技术讨论贴(持续更新:1210)
    png图片(有含有透明)在IE6中为什么不透明了
    浅谈javascript面向对象编程
  • 原文地址:https://www.cnblogs.com/acles/p/3313716.html
Copyright © 2011-2022 走看看