几年前就了解MONO平台了,但一直因为对linux不懂,所以没敢碰。在最近一个月终于尝试着使用mono了。花费将近1个月的时间去部署,吃尽无数苦头,最终还是成功了。在此整理,给朋友们做参考,少吃苦头。
一:系统选择
我选择的是centos 6.2系统,如果使用ubuntu或opensusu的话,可能会不会这么麻烦,mono和opensusu是同家公司的,有直接的安装包可用。
二:mono版本选择
笔者采用的是mono2.6.7 ,开始用了2.8,2.10但结果均产生各种问题,当然是因为代码
三:编译代码
mono是.net的跨平台实现,可不修改代码或修改部分代码来完成平台的迁移。不修改代码的情况是代码比较简单,仅作为测试或演示使用。一般都是需要重新编译的。您选择mono2.6.7,那么你代码有扩展方法将编译不通过,同时一些引用也会导致在mono下编译不通过!
四:IDE选择
当然首选是monodevelop,也可以使用 eclipse。在centos下不要尝试去安装monodevelop,笔者尝试了7次都未成功,最后选择了在ubuntu上调试编译代码,ubuntu 上的mono版本是2.6.7,所以我在服务器上安装的也是mono2.6.7。这样可以保证只要测试编译通过,无论是什么linux系统,都能正常运行。
五:比较
在这里,笔者提供2个站点供朋友们测试一下 www.xmwebs.com (windows iis) 和 www.ssite.info (centos mono)
可以通过输入一个不存在的地址,在黄页中查看编译器的类型,如:
笔者未进行专门的测试,稳定性不考虑的情况下,我是非常希望运行在mono下的,经常看到国外的文章指出,mono性能可能会好于windows上的.net实现
六:选择数据库
mono支持除access以外的数据库,比如mysql,mssql,oracle,posgresql,sqlite等,建议使用mysql
七:对asp.net mvc 的支持怎么样?
还算比较完美,上面给出的演示站也是用mvc开发的,最大的问题是路由上,需要花比较多的时间去修复
八:部署
使用nginx+xsp部署,当然也可以用apache+mod_mono 。
安装所需环境在这里仅做简单说明,网上有很多资料。也可以点击这里查看.
首先安装libgdiplus
下载源码
cd libgdiplus-2.8
yum install glib2-devel libpng-devel libX11-devel cairo-devel
yum install libjpeg-devel (支持JPG) giflib-devel(支持GIF) 其他格式,可以安装相应组件
然后我们下载mono源代码(在这里我们用2.8)
a.安装mono
cd mono-2.6.7
./configure –prefix=/opt/mono
make && make install
安装完成后/opt/mono/bin/mono -V 测试是否安装成功,也可以使用下面的命令加到环境变量。
export PATH=/opt/mono/bin:$PATH
export PKG_CONFIG_PATH=/opt/mono/lib/pkgconfig:$PKG_CONFIG_PATH
执行/opt/mono/bin/mono-test-install 测试安装
如果遇到libgdiplus找不到的问题,需要将路径加入到/etc/ld.so.conf然后再ldconfig加载。b.安装xsp
cd xsp-2.6.7.tar.bz2
./configure –prefix=/opt/mono
make && make install
至此MONO已经安装完成,然后我们可以使用以下命令来开启一个fastcgi进程
fastcgi-mono-server4 /applications/:/var/www /socket=tcp:127.0.0.1:8080
注:fastcgi-mono-server4表示使用asp.net 4.0,对应有fastcgi-mono-server2和fastcgi-mono-server
c.配置nginx
listen 80;
server_name www.ops.cc;
access_log /var/log/xsp.log;
location / {
include fastcgi_params;
root /var/www/;
index index.html Default.aspx;
fastcgi_pass 127.0.0.1:8080;
}
}
ASP.NET和ASP.NET MVC Web应用程序通过FastCGI协议Nginx的运行,需要添加:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
或直接将起添加到nginx的fastcgi_params文件。
d.重启nginx,测试
感兴趣的朋友赶紧试一试吧。如不明白,欢迎加我QQ:188867734交流