【题外话】html
闲的无聊居然想尝试测试本身作的项目在不一样操做系统上的性能表现,因此决定试试在Linux上部署Apache和Mono的环境。因为平时不多接触Linux,因此从网上找了几篇文章(附在相关连接中)尝试,部署的过程也并不是一路顺风,因此就根据本身在Azure上配置的状况从新进行了整理,但愿对不多接触Linux的同窗有所帮助。如下全部操做均在Azure上的虚拟机里配置,若是在本地或者虚拟机里配置,可能首先还须要配置网卡设置等。linux
【文章索引】c++
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里选择对应的密钥才能够链接。apache
链接后输入设置的用户名和密码便可登陆Ubuntu系统,会出现以下图的命令行,咱们所作的几乎全部工做都是经过命令行操做的。ubuntu
在Ubuntu下安装软件其实很是方便,Ubuntu提供了apt-get工具,可使用该工具直接下载安装软件。vim
在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端口,配置好后使用浏览器访问服务器的地址能够看到以下图的提示,说明安装成功。服务器
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-server二、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
在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
不一样的系统使用不一样的软件包管理程序,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的软件管理程序是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.8.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.8 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”文件中修改存放网站根目录的路径。
一、配置linux(apache) + mono 下运行 asp.net:http://www.cnblogs.com/hcl0208/archive/2010/10/25/1860173.html
二、openSUSE上安装Mono并发布ASP.Net程序:http://www.linuxidc.com/Linux/2011-04/34872.htm
三、CentOS 6.0 安装 MONO 2.10.8:http://www.cnblogs.com/aquilahkj/archive/2011/11/03/2234380.html
四、Mono环境下不支持中文的解决方法:http://www.cnblogs.com/shanyou/archive/2010/10/08/1846198.html