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附件

可以部署的項目源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM