一、Mono产生的背景

  由于Linux/Unix等有更强的安全性、运行效率高、拥有大量优秀的开源组件,而.Net则有着其他语言无与伦比的开发效率,因此在非微软平台下运行.Net程序的需求很强烈。Mono 是一个由Novell 公司发起、并且得到微软支持的开源项目。Mono 项目可以在Linux,FreeBSD,Unix,Mac OS X 、Android和苹果系统等非微软操作系统下兼容运行.Net程序。目前占IOS游戏应用市场55%份额的游戏都是使用基于Mono的Unity3d技术开发的。 
  基于Mono让ASP.Net开发的网站运行在Linux操作系统下也已经有了大量成功的案例,比如世界著名的网站“维基百科WikiPedia ”的搜索部分就是使用Mono支撑运行的、Mozilla开发者社区也是基于Mono运行,可以看http://www.mono-project.com/Companies_Using_Mono  这一些使用Mono进行开发的公司的列表。让.Net脱离Windows的禁锢,在开源的世界中尽情的徜徉。

  

  

  下面借鉴小蝶惊鸿的博文来介绍下Mono,原文地址请参阅本文底部的参考文献。

二、Mono简介

  2.1什么是mono

  关于什么是mono,我想无论我怎么说,应该都不会比官方的解释,或者是百科更加详细;我这里就简单说吧,Java之所以能够跨平台运作,是依赖与Java的虚拟机JVM,而.NET之所以只能够在Windows中跑,同样是因为.NET运行需要依赖与Framework的Runtime(公共运行时),那如果能够在Linux同提供适合于.NET运作的环境(包括CLR等),那.NET也可以在Linux中跑起来了,这就是mono了。

  2.2 为什么要使用mono

  为什么使用mono,原因有很多,不过归结起来,我个人认为以下这是最重要的:

  (1)、作为服务器来说,如果能够实现一模一样的功能的,还是主推Linux。为什么呢?我列举了几个实例:

  首先,如果服务器需要打补丁,作为Windows服务器,你打完补丁之后必须重启,这一定程度上会对你的业务造成一定程度上的影响

  其次,我们经常会听到Windows会中毒,特别是作为Web服务器和邮件服务器,我们不知道用户会给我们上传一些什么东西上来,相反,我们却很少会听到Linux中毒这么一个说法;这是由于Linux存在着太多的发行版本,不同版本之间编译后的软件无法相互调用,因此,如果能够感染A版本的Linux病毒无法感染B版本的Linux,这在很大程度上削减了病毒的危害性。

  再者,作为服务器,我们会尽量希望自己的系统更加的轻量化,更加的高效,和更加的稳定;Linux对于我们的要求,都提供了,我们可以定制的安装软件和服务,对于一些不必要的服务我们可以直接不安装(注意,是直接不安装,而不是安装之后再关闭),相反,如果采用Windows的话,一上来就啪嗒啪嗒的安装一大堆软件和服务,无论你用不用得上,先给你安装;也许这个可以让您的服务器充当更多的角色,但是我们更加希望服务器能够做到单一高效而不是面面俱到。

  最后,Linux运行对于硬件的要求比较低,这也是由于Linux抛弃桌面环境(作为服务器,我们不应该安装XWindow)和没有太多不必要的服务所决定的,而Windows则显得矜贵多了,硬件配置低一点还不一定能够正常运作。

  (2)、从成本考虑:

  一般部署在Windows中的.NET程序都是采用 “Windows Server版本 + IIS +  MS SQLServer” 这确实是.NET的黄金组合,但是,值得遗憾的是,它们都是要收费的,系统要收费,数据库要收费;作为大企业来说,上千上万台服务器,如果都采用这种模式的话,那将是一笔巨额的开销;对于小公司,资金对于它们来说本就是一个难题,能省下来的基本上都希望省下来,如果放着一个能够达到相同功能而且免费的模式不用而采取这种付费模式,那太说不过去了。

  而如果我们采用mono,把.NEt部署在Linux中,我们可以采用以下的组合:“Linux + mono + jexus(Apache/nginx + XSP2)+ MySql(PostgerSQL或其他免费数据库)”,所有的这些无论是否开源(jexus不开源)都是免费的。

  作为老板,你会选择哪种呢?

三、在Linux下部署Mono与ASP.NET网站

  0.准备工作:

    0.1 硬件准备:一台PC机或服务器,这里我们使用虚拟机来替代,一般使用VMware Workstation,至于版本推荐8.0以上版本,我这里使用的10.0.

    0.2 软件准备(网上均可找到下载地址):

      (1)CentOS 6.4版本

      (2)Mono 3.0.7

      (3)libgdiplus-2.10

      (4)httpd-2.4.4与xsp-master

      (5)pcre-8.32

      (6)apr-1.4.6与apr-util-1.5.2

      (7)mod_mono-master

  1.安装CentOS:配置网卡自动启动,上传Mono相关软件包到Linux中(在/usr下新建文件夹,例如software);
  2.安装httpd(apache服务器软件):
   2.1 监测当前系统是否已有httpd(查看:httpd -v),如有则先卸载掉:yum remove httpd
   2.2 安装相关包:
    PS:httpd依赖于apr,apr-util,pcre这三个包
      2.2.1 先解压httpd和其他三个包:tar.bz2的用tar jvxf xxx.tar.bz2,zip的用unzip xxx.zip即可;(xxx为包名)
      2.2.2 将解压后的apr和apr-util移动到httpd的srclib目录下;例如:mv apr-1.4.6 /usr/software/httpd-2.4.6/srclib/apr
      2.2.3 将pcre安装到/usr/local/pcre文件夹中
      (
         *Linux下软件安装有3大步凑:
         a.预编译:使用软件预编译脚本(./configure)
         b.编译:按照脚本准备的内容编译软件(make)
         c.安装:将编译好的软件移动到指定目录并适当配置
       )
    具体步凑:
       预编译:./configure --prefix=/usr/local/pcre
       编译:make
       安装:make install
   2.3 安装httpd
      预编译:./configure --prefix=/usr/local/apache --with-pcre=/usr/local/pcre/
      编译:make
      安装:make install
   2.4 开启httpd服务
      首先修改httpd.conf,设置servername:vi httpd.conf
      找到第185行(vi中开启行号:set nu),设置ServerName localhost:80
      开启服务:在bin目录下执行./apachectl start,测试:wget http://localhost:80/
      (关闭服务:在bin目录下执行./apachectl stop)
   2.5 网站根目录的配置
      如需要更改需要在httpd.conf查看DocumentRoot的位置,一般为/usr/local/apache/htdocs/下面,也可以自定义根目录;(一般默认即可,不需更改)
   2.6 将httpd注册为服务
      (1)首先在bin目录下将apachectl复制到系统启动初始化目录中:cp apachectl /etc/rc.d/init.d/apache
      (2)在init.d目录下编辑apache脚本:vi apache,在其中加入两行后保存:
         # chkconfig:35 70 30
         # description:apache
      (3)注册apache服务:chkconfig --add apache
      (4)开启apache服务:service apache start
      PS:如果中途出现/etc/init.d/httpd: line 112: lynx: command not found,这是因为错误原因是没有安装lynx,解决方法:yum install lynx /y
  3.安装Mono(跨平台的.NET Framework)
      3.1 安装libgdiplus(mono依赖包)
      (1)解压包:tar jvxf libgdiplus-2.10.tar.bz2
      (2)预编译:./configure --prefix==/usr/local/mono
      (3)在线安装相关包:yum install glib2-devel libtiff libtiff-devel libjpeg libjpeg-devel giflib giflib-devel libpng libpng-devel libX11 libX11-devel freetype freetype-devel fontconfig fontconfig-devel libexif libexif-devel
      (4)编译并安装:make && make install
      3.2 安装mono
      (1)解压包:tar jvxf mono-3.0.7.tar.bz2
      (2)预编译:./configure --prefix=/usr/local/mono
      (3)编译并安装:make && make install
      (4)配置mono:vi /etc/profile,在最后一行加上以下内容:
         PATH=/usr/local/mono/bin:$PATH
         export PATH
      (5)使配置生效:source /etc/profile
      (6)测试:mono -v
  4.安装XSP(类似于Cassini的ASP.NET开发调试服务器,与Mono相关)
     4.1 解压:unzip xsp-master.zip
     4.2 指定临时环境变量,告知xsp 本机的 mono路径:export PKG_CONFIG_PATH=/usr/local/mono/lib/pkgconfig:$PKG_CONFIG_PATH
     4.3 执行预编译(配置),设置安装目录到 mono相同目录:./autogen.sh --prefix=/usr/local/mono
     4.4 编译并安装:make && make install
     4.4 开启一个XSP服务器:xsp4(回车后可以关闭服务器)
     PS:xsp4 --port=80(可以为xsp服务器指定80端口)

  5.安装mod_mono(连接Mono与XSP的桥梁)
     5.1 解压:unzip mod_mono-master.zip
     5.2 预编译(配置),指定安装目录到mono中:./autogen.sh --prefix=/usr/local/mono
     5.3 (如果make报错的话)修改src中的mono.c文件,修改内容参考word文档
     5.4 编译并执行:make && make install
  6.配置mod_mono(开始连接Mono和XSP)
     6.1 进入httpd安装目录里的conf目录,看到mod_mono.conf文件:vi mod_mono.conf
     6.2 在文件最后追加:MonoServerPath /usr/local/mono/bin/mod_mono-server4
     6.3 让apache自动加载 mod_mono,修改一下apache配置文件(在conf下vi httpd.conf),在文件末尾处添加mod_mono配置文件位置:include conf/mod_mono.conf
  7.测试asp.net网页
     7.1 开启apache服务:service apache start
     7.2 测试静态网页:wget http://localhost/index.html
     7.3 新建一个aspx文件,里面写上:<%="Hello Mono in Linux"%>,保存后退出在浏览器中测试:http://localhost/test.aspx
     7.4 在VS中写一个动态页面,并将它发布到服务器中看能否访问;

最终效果:

  

怎样?在Linux咱们的ASP.NET网站也可以运行了,是不是有点不可思议?不过,这还只是万里长征第一步,后面我们要继续学习Linux下的高性能Web服务器—Jexus,使用Nginx做反向代理服务器做负载均衡,并对其进行一些优化配置,高性能的ASP.NET开发之路才刚开始!加油!Fighting!

参考文献:

  1.传智播客公开课:跨平台的.NET http://bbs.itcast.cn/thread-11528-1-1.html

    2.Linux.Net学习笔记 http://www.cnblogs.com/xiaodiejinghong/archive/2013/04/01/2994216.html

附件:

      安装配置文档v0.5:http://pan.baidu.com/s/1jGHSFOi

作者:周旭龙

出处:http://www.cnblogs.com/edisonchou/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

转载于:https://www.cnblogs.com/edisonchou/p/3526588.html

Linux下的.NET之旅:第一站,CentOS+Mono+Xsp构建最简单的ASP.NET服务器相关推荐

  1. linux下C调用lua的第一个程序

    linux下C调用lua的第一个程序 linux的环境是Fedora 18,运行在VM workstation中,以开发模式安装,自带了lua 5.1.4,可以在命令行上直接用lua命令进入到lua环 ...

  2. linux下常用命令wget进行整站下载

    一.Linux下的wget Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持H ...

  3. Linux下安装mysql(2) 及常见问题解决(CentOS)

    Linux下安装mysql(2) 及常见问题解决(CentOS) 参考文章: (1)Linux下安装mysql(2) 及常见问题解决(CentOS) (2)https://www.cnblogs.co ...

  4. 杰奇1.7用php53,linux下的杰奇1.7手机站安装教程

    今天给大家做个linux下的杰奇手机站安装教程 手机版界面预览 1.把下载好的wap模板 安装在杰奇目录下 或者其他目录 但是一定要在一个文件夹下 比如我的是/www/daai99.com/目录 你也 ...

  5. Linux下PHP开发之旅-2.开发环境相关设置探索

    一.默认目录在哪儿? 开始时面对该xampp集成开发环境的相关配置有点不知所错,于是便先想着找httpd.conf,通过该文件,对该集成环境的配置文件关系有了大致了解,具体操作如下; cd /opt/ ...

  6. Javascript之旅——第一站:从变量说起

    原文出处: 一线码农的博客   欢迎分享原创到伯乐头条 工作这几年,js学的不是很好,正好周末有些闲时间,索性买本<js权威指南>,大名鼎鼎的犀牛书,好好的把js深入的看一看.买过这本书的 ...

  7. 用linux下常用命令wget进行整站下载(递归下载至本地)

    为什么80%的码农都做不了架构师?>>>    这个命令可以以递归的方式下载整站,并可以将下载的页面中的链接转换为本地链接. wget加上参数之后,即可成为相当强大的下载工具. wg ...

  8. 在Linux下编写运行你的第一条代码——Hello Linux

    概述: 最近刚接触Linux,也是在啃那个公认的<鸟哥的Linux私房菜>.是的,的确讲得挺好的.现在看到第10章 vim程序编辑器.虽然鸟哥不太建议我们跳着来阅读他的文章,但是我还是跳了 ...

  9. asp.net mvc 之旅—— 第一站 从简单的razor入手

    记得2011年mvc3刚出来的时候,我们就有幸将 mvc3 用在我们团购项目上,当时老大让我们用一个星期时间来熟悉mvc,幸好园子里面的老朋友DR 正在写mvc3系列,也恭喜这个系列文章被整理成专题供 ...

  10. Python的学习之旅第一站:基本语法

    初识Python Python是一门简单易学的解释型语言.对于什么是解释型语言,在C语言的第一章可以学习到.感谢大家的支持和鼓励.点个赞,评论和收藏.谢谢啦!我也是初学者,大家一起努力吧,写博客记录自 ...

最新文章

  1. angularJS在创建指令需要注意的问题(指令中使用ngRepeat)
  2. webview加载本地html_安卓webview html5 自动播放本地视频,网上视频,可以循环播放...
  3. LPS25HB 气压计 参考手册中关于FIFO功能的解读
  4. Nacos注册中心的部署与用法详细介绍
  5. ajax代码编程题,关于AJAX管家代码的几个基本问​​题
  6. Visual Studio 2017 15.4 正式发布,那些你必须知道的新特性!
  7. 【BZOJ2038】【2009国家集训队】小Z的袜子(hose) 分块+莫队
  8. wxnativecallback.php,ectouch开发 | 糊涂虫
  9. 凸优化极简笔记(三):椭圆方程的矩阵形式
  10. option设置selected
  11. uboot分析之 usb启动
  12. 小程序商城制作一个需要多少钱
  13. 做个grub的U盘启动盘,即将grub安装到U盘上面。
  14. 明日之后无限金条服务器,明日之后:无限金条bug 你值得收藏
  15. 给Android程序员的一些面试建议
  16. ultron,奥创,ultron官网,奥创官网,奥创中国区官网,ultron中国区官网,奥创公链,ultron公链,ulx,ultron奥创,海洋renhe333333
  17. 如何使用百数批量打印二维码?
  18. 制作公司组织结构图的案例
  19. 英语论文格式修改(两栏)
  20. SkeyeVSS森林防火远程监控解决方案

热门文章

  1. Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(
  2. layui实现后台表格数据显示--学生管理系统(layui搜索,删除,批量删除,增加,修改,php接口后台)
  3. webpack全局安装和安装过程中碰见的一些坑(npm error)解决方案
  4. 二分模板 from y总
  5. Beego 使用笔记
  6. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第4节 等待唤醒机制_3_等待唤醒案例代码实现...
  7. 王者荣耀游戏服务器架构的演进读后感
  8. 面试:用 Java 实现一个 Singleton 模式
  9. thinkphp3.2.3入口文件详解
  10. 【转】Python基础-字符串