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