【题外话】

闲的无聊竟然想尝试测试自己做的项目在不同操作系统上的性能表现,所以决定试试在Linux上部署Apache和Mono的环境。由于平时很少接触Linux,所以从网上找了几篇文章(附在相关链接中)尝试,部署的过程也并非一帆风顺,所以就根据自己在Azure上配置的情况重新进行了整理,希望对很少接触Linux的同学有所帮助。以下所有操作均在Azure上的虚拟机里配置,如果在本地或者虚拟机里配置,可能首先还需要配置网卡设置等。

【文章索引】

  1. 在Ubuntu下安装Apache
  2. 在Ubuntu下安装Mono
  3. 在Ubuntu下部署ASP.NET网站
  4. 在openSUSE下的操作
  5. 在CentOS下的操作
  6. 相关链接

【一、在Ubuntu下安装Apache】

Ubuntu Server安装以后,默认没有图形界面,其实在Linux不用图形界面也很容易就可以进行配置。在Azure上配置好Ubuntu Server(这里使用Azure上提供的Ubuntu Server 12.04 LTS,2013/6/24)以后,会自动配置好SSH的22端口,我们可以直接使用SSH工具连接服务器,这里使用免费开源的PuTTY(http://www.putty.org/)。如果在Azure上配置的使用密码连接主机则这里直接输入地址点击“Open”即可,如果还上传了SSH密钥,则还应在Connection/SSH/Auth里选择对应的密钥才可以连接。

连接后输入设置的用户名和密码即可登录Ubuntu系统,会出现如下图的命令行,我们所做的几乎所有工作都是通过命令行操作的。

在Ubuntu下安装软件其实非常方便,Ubuntu提供了apt-get工具,可以使用该工具直接下载安装软件。

在Linux里,系统最高权限账户为root账户,而默认登录的账户并非root账户,例如不具备安装程序等权限,不过同Windows一样都提供了提升权限的方式,就是sudo命令,在执行的每条命令前加上“sudo ”,即可以root账户的权限执行。在第一次使用sudo时会要求输入当前账户的密码,确认后即可在一段时间(默认5分钟)内使用sudo命令都不需要输入密码,一段时间没有使用后则需要重新输入密码。

首先我们安装Apache,输入下列命令,之后会提示是否安装等,输入Y继续。软件包详情:http://packages.ubuntu.com/quantal/apache2

sudo apt-get install apache2

等待一段时间后,Apache就会自动安装配置好,这时候可以配置好Azure上的80端口,配置好后使用浏览器访问服务器的地址可以看到如下图的提示,说明安装成功。

【二、在Ubuntu下安装Mono】

Linux有个开源的.NET运行时,叫做Mono(http://www.mono-project.com/),可以支持在Linux上运行.NET应用程序。

仍然按上述方法输入下列命令安装Mono及C#编译器,软件包详情:http://packages.ubuntu.com/quantal/mono-gmcs

sudo apt-get install mono-gmcs

安装完后可以输入“mono -V”查看安装的mono的版本(注意V是大写的),当然也可以写个C#的ConsoleApp看看,可以用下列命令编译C#代码。

gmcs test.cs

如果程序没有问题的话则会生成test.exe,可以通过如下命令执行。当然也可以在Windows上编译好exe文件后复制到Linux上执行也是可以的。

mono test.exe

接下来根据自己需要的版本选择安装Apache对ASP.NET 2.0或者ASP.NET 4.0的支持,mono-apache-server2为ASP.NET 2.0的支持,mono-apache-server4是ASP.NET 4.0,两者可以同时存在,切换需要在Apache的配置文件中切换。软件包详情:http://packages.ubuntu.com/quantal/mono-apache-server2

sudo apt-get install mono-apache-server2

不知道为什么,安装到最后会卡在这个地方

只能通过Ctrl+Z强制退出,然后输入“sudo reboot”重启服务器,不过Linux服务器很快就能重启完

之后再安装Apache的模块libapache2-mod-mono即可。当然,mono-gmcs、mono-apache-server2、libapache-mod-mono都是可以一起安装的,不过要注意mono-apache-server2和libapache-mod-mono的顺序,如果mono-apache-server2在libapache-mod-mono之后的话,由于依赖项的原因,libapache-mod-mono会现在自动选择安装mono-apache-server4。而且,如果一起装的话,在上述卡住的位置Ctrl+Z重启后,libapache-mod-mono并没有配置完成导致很多操作无法执行,还需要执行“sudo dpkg --configure -a”这句命令才行。软件包详情:http://packages.ubuntu.com/quantal/libapache2-mod-mono

sudo apt-get install libapache2-mod-mono

不过安装完如果打开网站发现还是无法执行,其实是没有配置ASP.NET应用程序。虽然现在支持自动配置应用程序,但是还是需要修改/etc/apache2/mods-available/mod_mono.conf文件。(原文见:http://www.mono-project.com/AutoConfiguration)当然如果你会手动配置应用程序的话也可以在该文件中手动配置应用程序(下同)。

sudo vim /etc/apache2/mods-available/mod_mono.conf

按键盘上的i键启用vim的编辑模式,由于mono-server2-hosts.conf文件中已经对很多参数进行了配置,所以仅需要按图中的添加“MonoAutoApplication enabled”一行即可。此外,如果你的网站中还有其他的文件格式(比如HttpHandler经常使用.axd),请添加在第一行后边,另外如果网站默认文件不是index.aspx还需要修改第二行后的文件名。注意,由于Linux是区分大小写的,所以切记不要把大小写搞错。

如果服务器上还安装了ASP.NET 4.0的支持(mono-apache-server4),并且需要切换到ASP.NET 4.0,那么仅需要修改最后一行,将2改为4即可。

修改完后按Ctrl+C结束编辑模式,然后按冒号键(:)进入命令模式,输入w保存文件,然后再次按冒号键,再按q键退出vim。

最后执行下述命令重启Apache服务器即可。

sudo /etc/init.d/apache2 restart 

【三、在Ubuntu下部署ASP.NET网站】

在Windows上部署网站可以通过远程桌面直接把网站或打包好的网站复制过去,在Linux下其实SSH不光可以支持命令行,还可以支持文件传输,我这里使用免费开源的Filezilla(https://filezilla-project.org/),Filezilla支持FTP和SSH两种协议,在站点管理器中选择SFTP协议,然后把登陆类型设置为正常,输入用户名和密码即可登录。

登录后默认的路径为/home/用户名/,就跟命令行下默认的目录一致。Apache的默认路径在/var/www/,可以在这之下找到index.html,也就是那个“It works”的网页。不过这个目录一般用户的权限为无法写入,所以无法将网站直接部署到这个目录下。当然你可以在PuTTY下将这个目录的权限修改后再上传,不过其实还可以有更简单的方式,就是将打包文件上传到用户目录下然后再解压缩到这个目录下。

首先安装zip解压缩程序,软件包详情:http://packages.ubuntu.com/quantal/zip

sudo apt-get install zip

然后将需要上传的网站打包为zip文件,然后上传到用户目录下(/home/用户名/),然后在命令行中输入就可以了。

sudo unzip 压缩文件名.zip -d /var/www

当然,现在用你的浏览器访问你的服务器地址仍然是“It works”,我们还要删除index.html就可以了。

sudo rm /var/www/index.html

【四、在openSUSE下的操作】

不同的系统使用不同的软件包管理程序,SUSE则提供了一个叫zypper的软件包管理程序,使用也非常方便(这里使用的openSUSE是Azure上提供的openSUSE 12.3)。

首先是安装Apache。

sudo zypper install apache2

与Ubuntu安装过程不同的是,在安装完成后并没有启动Apache的提示。所以还需要手动配置服务自启动。

sudo systemctl enable apache2.service

然后立即启动Apache。

sudo systemctl start apache2.service 

现在用浏览器就可以访问服务器了。

然后使用zypper安装Mono了(其中System.Drawing会用到libgdiplus,多语言支持会用到mono-locale-extras,不过即使如此还有部分组件没有安装,后边会说明):

sudo zypper install mod_mono libgdiplus mono-locale-extras

接下来需要配置mod_mono,这里推荐使用官方提供的http://go-mono.com/config-mod-mono/,页面打开后如下图所示:

可以选择Virtual Host或者Application两种模式,第一种可以根据请求的服务器地址设置ASP.NET网站的根路径,第二种可以根据请求的虚拟目录设置ASP.NET网站的根路径。除此之外页面下方还有几个设置可以自定义,设置完后选择页面下方的Download下载.conf文件,将文件上传到openSUSE服务器后使用如下命令复制到Apache配置文件夹下:

sudo cp 配置文件名.conf /etc/apache2/conf.d/

之后可以像Ubuntu一样给openSUSE安装上zip解压缩工具(sudo zypper install zip),将压缩文件解压缩到设置的网站根目录后即可。之后只需要重启Apache服务器后就可以立即访问ASP.NET网站了:

sudo systemctl restart apache2.service

需要注意的是,这样完成后不像Ubuntu把很多依赖库都装上了,如果按上述命令的话只有以下部件被安装:

所以可能还有很多需要的组件没有安装,比如需要连接Oracle数据库时,可能提示找不到System.Data.OracleClient程序集,需要安装“mono-data-oracle”,到时候可以根据出现的错误再安装。其实也可以根据通配符安装“mono*”,把跟mono有关的都安装上,不过这样也会装很多不需要的组件。

【五、在CentOS下的操作】

CentOS的软件管理程序是yum(这里使用的CentOS是Azure上提供的CentOS 6.3)。

首先还是安装Apache。

sudo yum install httpd

与openSUSE类似,安装完需要自己手动配置服务自启动。

sudo chkconfig --levels 235 httpd on

然后立即启动Apache服务。

sudo /etc/init.d/httpd start

现在再用浏览器访问服务器地址就可以正常访问Http服务器了。

但是CentOS官方没有打包好的mono的rpm包,所以比较好的方式是自己编译。

首先配置好编译的环境。

sudo yum install gcc gcc-c++ bison pkgconfig glib2-devel gettext make freetype-devel fontconfig-devel libX11-devel libpng-devel libjpeg-devel libtiff-devel giflib-devel libexif-devel cairo-devel httpd-devel

可能会提示需要升级kernel-headers,但是系统可能默认禁止了核心的包,所以如果出现上述命令无法执行安装的话,还需要在上一条命令之后附加“ --disableexcludes=main”,即如下的形式。

sudo yum install gcc gcc-c++ bison pkgconfig glib2-devel gettext make freetype-devel fontconfig-devel libX11-devel libpng-devel libjpeg-devel libtiff-devel giflib-devel libexif-devel cairo-devel httpd-devel --disableexcludes=main

如果一切安装成功,可以执行下列语句下载需要安装组件的源码包并解压缩。

cd /usr/src/
sudo wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2
sudo wget http://download.mono-project.com/sources/mono/mono-2.10.8.tar.bz2
sudo wget http://download.mono-project.com/sources/xsp/xsp-2.10.tar.bz2
sudo wget http://download.mono-project.com/sources/mod_mono/mod_mono-2.10.tar.bz2 sudo tar jxf libgdiplus-2.10.tar.bz2
sudo tar jxf mono-2.10..tar.bz2
sudo tar jxf xsp-2.10.tar.bz2
sudo tar jxf mod_mono-2.10.tar.bz2

编译并安装libgdiplus。

cd /usr/src/libgdiplus-2.10
sudo ./configure --prefix=/usr
sudo make ; sudo make install

然后编辑/etc/ld.so.conf文件,添加一行“/usr/lib/”,如下图所示,保存之后再执行如下命令,从而使系统可以将libgdiplus.dll自动映射到对应的so文件中。(原文见:http://www.mono-project.com/DllNotFoundException

sudo ldconfig

然后是Mono。

cd /usr/src/mono-2.10.
sudo ./configure --prefix=/usr
sudo make ; sudo make install

接下来安装xsp。

export PKG_CONFIG_PATH=/usr/lib/pkgconfig
cd /usr/src/xsp-2.10
sudo ./configure --prefix=/usr
sudo make ; sudo make install

然后安装mod_mono。

cd /usr/src/mod_mono-2.10
sudo ./configure --prefix=/usr
sudo make ; sudo make install

然后再修改“/etc/httpd/conf/mod_mono.conf”这个文件,与Ubuntu上同名的配置文件配置相同。不过由于不像Ubuntu下有现成的配置文件,所以需要在文件中添加如下两行,由于安装的时候自动安装了2.0和4.0的支持,所以可以将如下的2换为4即可启用ASP.NET 4.0:

MonoServerPath "/usr/bin/mod-mono-server2"
MonoAutoApplication enabled

然后将配置文件复制到Apache的配置文件目录中:

sudo cp /etc/httpd/conf/mod_mono.conf /etc/httpd/conf.d/

由于CentOS自带的SELinux的原因,使得Apache无法连接到mod-mono-server,所以我们现在还需要配置SELinux。当然,这里为了简单就仅仅禁用SELinux,有兴趣的可以自己创建安全策略,使mod-mono-server可以生效。这里修改/etc/sysconfig/selinux文件。将“SELINUX=enforcing”修改为“SELINUX=permissive”或“SELINUX=disabled”,例如下图,保存重启系统即可。

之后就可以通过SSH将网站打包上传上去就可以直接访问了。不过需要注意的是,CentOS上的Apache默认的根路径在“/var/www/html”下,当然也可以在“/etc/httpd/conf/httpd.conf”文件中修改存放网站根目录的路径。

【六、相关链接】

1、配置linux(apache) + mono 下运行 asp.net:http://www.cnblogs.com/hcl0208/archive/2010/10/25/1860173.html2、openSUSE上安装Mono并发布ASP.Net程序:http://www.linuxidc.com/Linux/2011-04/34872.htm3、CentOS 6.0 安装 MONO 2.10.8:http://www.cnblogs.com/aquilahkj/archive/2011/11/03/2234380.html4、Mono环境下不支持中文的解决方法:http://www.cnblogs.com/shanyou/archive/2010/10/08/1846198.html

在Linux(Ubuntu/openSUSE/CentOS)下配置ASP.NET(Apache + Mono)的更多相关文章

  1. CentOS下配置iptables防火墙 linux NAT(iptables)配置

    CentOS下配置防火墙 配置nat转发服务CentOS下配置iptables防火墙 linux NAT(iptables)配置 CentOS下配置iptables 1,vim /etc/syscon ...

  2. Centos下配置php环境

    Centos下配置php环境   目录[-] 环境: GD2 2 安装PHP 5.2.14(FastCGI模式) 1)编译安装PHP 5.2.14所需的支持库: 2)编译安装MySQL 5.5.3-m ...

  3. Ubuntu 18.04 下配置 HAXM 加速 Android模拟器

    Ubuntu 18.04 下配置 HAXM 加速 Android模拟器 最近在vmware环境下搭建ubuntu18.04开发环境,开始发现总是运行android模拟器在console提示加载如下错误 ...

  4. CentOS下配置防火墙 配置nat转发服务

    CentOS下配置iptables防火墙 linux NAT(iptables)配置 CentOS下配置iptables 1,vim /etc/sysconfig/network   这里可以更改主机 ...

  5. [原创]IIS7.5下配置ASP+PHP环境及错误处理(0xc0000135)

    IIS7.5下配置ASP+PHP环境及错误处理(0xc0000135) http://user.qzone.qq.com/93701178/blog/1398155812 操作系统更新至Win7或Wi ...

  6. 如何在IIS7下配置ASP+ACCESS环境

    如何在IIS7下配置ASP+ACCESS环境 | 浏览:901 | 更新:2013-01-16 17:46 1 2 3 4 5 6 7 分步阅读 默认装完IIS7之后,使用ASP程序会发现提示数据库连 ...

  7. centos下配置gitosis服务器遇到的困难

    这篇博客主要讲的是在centos下配置gitosis遇到的问题. 背景:centos7.2 64 :gitosis2.0 1.困难1 1)产生的问题及原因.gitosis没有安装成功,没有出现fini ...

  8. CentOS下配置jdk

    CentOS下配置jdk 1.在jdk官网上下载最新版本的jdk 2.将jdk放到相应的位置,使用如下命令来解压. .0_181 /opt/data/ tar -zxf jdk-8u181-linux ...

  9. CentOS下配置LVM和RAID

    1.CentOS配置LVM http://www.cnblogs.com/mchina/p/linux-centos-logical-volume-manager-lvm.html http://ww ...

  10. CentOS下使用yum安装Apache极为方便,只需要在终端键入以下命令即可

    CentOS下使用yum安装Apache极为方便,只需要在终端键入以下命令即可 1.安装Apache yum install httpd 2.设置服务器开机自动启动Apache systemctl e ...

随机推荐

  1. 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!

    看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...

  2. 对抗假人 —— 前后端结合的 WAF

    前言 之前介绍了一些前后端结合的中间人攻击方案.由于 Web 程序的特殊性,前端脚本的参与能大幅弥补后端的不足,从而达到传统难以实现的效果. 攻防本为一体,既然能用于攻击,类似的思路同样也可用于防御. ...

  3. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...

  4. Matlab 绘制三维立体图(以地质异常体为例)

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

  5. javascript中的继承与深度拷贝

    前言 本篇适合前端新人,下面开始...... 对于前端新手来说(比如博主),每当对js的对象做操作时,都是一种痛苦,原因就是在于对象的赋值是引用的传递,并非值的传递,虽然看上去后者赋值给了前者,他们就 ...

  6. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  7. Python爬虫小白入门(四)PhatomJS+Selenium第一篇

    一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...

  8. System.Guid ToString五中格式

    参考:https://msdn.microsoft.com/en-us/library/97af8hh4.aspx 测试代码: using System; using System.Collectio ...

  9. CSS中强悍的相对单位之em(em-and-elastic-layouts)学习小记

    使用相对单位em注意点 1.浏览器默认字体是16px,即1em = 16px,根元素设置如下 html{ font-size: 100%; /* WinIE text resize correctio ...

  10. Linux下高cpu解决方案

    昨天搞定了一个十万火急的issue,客户抱怨产品升级后系统会变慢和CPU使用率相当高,客户脾气很大,声称不尽快解决这个问题就退货,弄得我们 R&D压力很大,解决这个issue的任务分给了我,客 ...