Nancy跨平台开发总结(三)发布到Jexus Web服务器

  • 在Centos7上安装Mono

    yum install yum-utils

    rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"

    yum-config-manager --add-repo http://download.mono-project.com/repo/centos/

    yum install mono-devel

    yum insall mono-complete

  • 下载Jexus,下载地址htttp://www.linuxdot.net/
  • 安装Jexus

    tar -zxvf jexus-5.8.0.tar.gz 

    cd jexus-5.8.0

    sudo ./install 

    默认安装路径为/usr/jexus
  • 启动Jexus

    cd  /usr/jexus

    sudo ./jws start

    然后在浏览器中输入localhost/info

    会显示如下界面
    •   
  • 要想在Jexus上运行,还要在项目中添加一个Adapter和RazorConfig类,代码如下,只需要原样复制项目中即可
  • using System;
    using System.Collections.Generic;
    using Microsoft.Owin.Builder;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace WebSite
    {
        /// <summary>
        /// Jexus/TinyFox OWIN适配器
        /// </summary>
        class Adapter
        {
            /*************************************
             * 这是一个比较完整的适配器示例
             * ***********************************/
    
    
    
            /// <summary>
            /// OWIN 应用程序委托
            /// </summary>
            static Func<IDictionary<string, object>, Task> _owinApp;
    
    
            /// <summary>
            /// 适配器构造函数
            /// </summary>
            public Adapter()
            {
    
                //实例化一个应用程序生成器
                var builder = new AppBuilder();
    
    
    
                // 为生成器添加一些参数
                // 因某些OWIN框架需要从该参数中得到一些初始化环境信息
                // 这些信息可以包括 如“owin版本”“服务器功”能等等
                var properties = builder.Properties;
                properties["owin.Version"] = "1.0";  // 只能是1.0
    
                var disposeSource = new CancellationTokenSource();
                properties["server.OnDispose"] = disposeSource.Token;
    
                Func<Task> svrInitCallback = null;
                Action<Func<Task>> init = (callback) => { svrInitCallback = callback; };
                properties["server.OnInit"] = init;
                //.......
    
                var capabilities = properties.ContainsKey("server.Capabilities") ? properties["server.Capabilities"] as IDictionary<string, object> : new Dictionary<string, object>();
                properties["server.Capabilities"] = capabilities;
                capabilities["server.Name"] = "TinyFox";
                //capabilities["websocket.Version"] = "1.0";
                //......
    
    
    
                //实例化用户的启动类,并调用配置方法
                //如果用户启动类在其它的dll中,就需要通过反射找出这个类
                var startup = new Startup();
                startup.Configuration(builder);
    
                //构建OWIN应用并获取该应用的代理(委托)方法
                _owinApp = builder.Build();
    
    
                //要求应用程序域退出时,向本类发出通知
                AppDomain.CurrentDomain.DomainUnload += ((o, e) => { disposeSource.Cancel(); });
    
                //回调应用层初始化函数
                if (svrInitCallback != null) svrInitCallback().Wait();
    
            }
    
    
    
    
            /// <summary>
            /// *** Jexus/TinyFox所需要的关键函数 ***
            /// </summary>
            /// <param name="env">新请求的环境字典,具体内容参见OWIN标准</param>
            /// <returns>返回一个正在运行或已经完成的任务</returns>
            public Task OwinMain(IDictionary<string, object> env)
            {
                //如果为空
                if (_owinApp == null) return null;
    
                //调用Microsoft.Owin的应用程序委托函数,将请求传给OWIN框架
                return _owinApp(env);
            }
    
    
        }
    }
    using System;
    using System.Collections.Generic;
    using Nancy;
    using Nancy.ViewEngines.Razor;
    
    namespace WebSite
    {
        public class RazorConfig : IRazorConfiguration
        {
            public bool AutoIncludeModelNamespace
            {
                get
                {
                    return true;
                }
            }
    
            public IEnumerable<string> GetAssemblyNames()
            {
                yield return "System.Web.Razor";
            }
    
            public IEnumerable<string> GetDefaultNamespaces()
            {
                yield return "System.Web.Razor";
            }
        }
    }

     

  • 发布站点到本地,用WinSCP连接服务器,将发布后的文件拷贝到Linux服务器上的/var/www/website目录下.然后切换到/usr/jexus/siteconf目录,新建一个文件,名称为website,将目录下default文件的内容复制过来,并修改配置

    port=91

    root=/  /var/www/website

    hosts=*    #OR your.com,*.your.com

    owinmain=WebSite.dll
  • 修改防火墙

    $ vi /etc/sysconfig/iptables

    $ i,添加端口

    -A INPUT -p tcp -m tcp --dport 91   -j ACCEPT

    $ esc

    $ :wq保存退出

    $ service iptables restart
  • 重新jexus

    cd /usr/jexus/

    sudo ./jws restart

    输入localhost:91/
    •   
posted @ 2016-01-28 13:32  凌锋  阅读(609)  评论(0编辑  收藏  举报