CentOS Mono Nginx 部署 MVC4+WebApi

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:

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.4.tar.bz2

转到解压后的目录:Cd mono-4

Configure:我把mono安装在usr目录下,所以执行以下命令:

./configure --prefix=/usr

编译安装:make && make install(这个过程比较漫长,去干点别的吧。)

(2) Mono2.11.4安装完成之后,开始安装Mono3.2.1:执行以下命令:

cd /usr/local/src

tar –jvxf mono-1.tar.bz2

cd mono-1

./autogen.sh –prefix=/usr

make (这个过程也很漫长)

(3) mono-3.2.1编译完成之后,需要先卸载掉Mono-2.11.4:

cd /usr/local/src/mono-4

make uninstall

(4) 卸载完mono-2.11.4之后开始安装mono-3.2.1:

1 make install

(5)安装完成之后,执行一下ldconfig命令,确保新安装的动态库可以被找到。

 ldconfig 

2、 安装libgdiplus:

cd /usr/local/src

tar –jxvf libgdiplus-2.10.9.tar.bz2

cd libgdiplus-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-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" />

        <bindingRedirect oldVersion=1.0.0.0-4.0.0.04.0.0.0System.Web.WebPages"publicKeyToken=" />

      </dependentAssembly>

 
      <dependentAssembly>

        <assemblyIdentity name=WebGrease1.0.0.0-1.3.0.01.3.0.0System.Net.Httpb03f5f7f11d50a3a0.0.0.0-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: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附件

可以部署的项目源码

分类: asp.net,ASP.NET MVC,Web Api

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux下开机自启: 在/etc/init.d目录下新建文件elasticsearch 并敲入shell脚本: 注意, 前两行必须填写,且要注释掉。 第一行为shell前行代码,目的告诉系统使用shell。 第二行分别代表运行级别、启动优先权、关闭优先权,且后面添加开机服务会用到。 shell脚本
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权 chmod +x /etc/rc.d/rc.local 2、赋予脚本可执行权限假设/usr/local/script/autostart.sh是你的脚本路径,给予执行权限 chmod +x /usr
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用ls -ll,会显示成字节大小,而ls- lh会以KB、MB等为单位进行显示,这样比较直观一些。 通过命令du -h –max-depth=1 *,可以查看当前目录下各文件、文件夹的大小,这个比较实用。 查询当前目录总大小可以使用d
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一但shell关闭网站也就关闭了,所以要配置守护进程, 用的是Supervisor,本文主要记录配置的过程和过程遇到的问题 安装Supervisor&#160;1 yum install python-setuptools
设置时区(CentOS 7) 先执行命令timedatectl status|grep &#39;Time zone&#39;查看当前时区,如果不是时区(Asia/Shanghai),则需要先设置为中国时区,否则时区不同会存在时差。 #已经是Asia/Shanghai,则无需设置 [root@xia
vim&#160;/etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO=&quot;static&quot; ONBOOT=yes IPADDR=192.168.8.106 NETMASK=255.255.252.0 GATEWAY=192.168.
一、安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 [root@localhost local]# yum install -y gcc 二、下载并解压安装包 [root@localhost local
第一步 On CentOS/RHEL 6.*: $ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm On CentOS/RHEL 7: $
/// &lt;summary&gt; /// 取小写文件名后缀 /// &lt;/summary&gt; /// &lt;param name=&quot;name&quot;&gt;文件名&lt;/param&gt; /// &lt;returns&gt;返回小写后缀,不带“.”&lt;/ret
which nohup .bash_profile中并source加载 如果没有就安装吧 yum provides */nohup nohup npm run start &amp; nohup ./kibana &amp;
1.1 MySQL安装 1.1.1 下载wget命令 yum -y install wget 1.1.2 在线下载mysql安装包 wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 1.1.3 安装My
重启 reboot shutdown -r now init 6 关闭 init 0 shutdown -h now shutdown -h 20:25 #8点25关机查看内存 free CPU利用率 top 日期 date 设置时间 date 033017002015 #月日时间年 日历 cal
1、firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 :
1 下载并安装MySQL官方的&#160;Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 使用上面的命令就直接下载了安装用的Yum Repository,大概
CentOS6.x CentOS6中转用Upstrat代替以前的init.d/rcX.d的线性启动方式。 一、相关命令 通过initctl help可以查看相关命令 [root@localhost ~]# initctl help Job commands: start Start job. sto
1、使用命令:df -lk 找到已满磁盘 2、使用命令:du --max-depth=1 -h 查找大文件,删除
ifconfig:查看网卡信息 网卡配置文件位置: /etc/sysconfig/network-scripts/文件夹 nmtui:配置网卡 netstat -tlunp:查看端口信息 端口信息存储位置: /etc/services文件 route:查看路由信息 wget:下载网路文件,例如 wg
ps -ef:查看所有进程,&#160;ps -ef |grap firewalld 查看与firewalld相关的进程 which :查看进程:which firewalld kill 进程id:杀掉进程 kill 640,强制杀:kill -9 640 man:查看帮助,例如 man ps 查看
useradd:添加用户 useradd abc,默认添加一个abc组 vipw:查看系统中用户 groupadd:添加组groupadd ccna vigr:查看系统中的组 gpasswd:将用户abc添加到ccna组 gpasswd -a abc ccna groups abc:查看用户abc属