• ASPNET Core 部署 Linux — 使用 Jexus Web Server


    第一步 安装.Net Core环境

    安装 dotnet 环境参见官方网站 https://www.microsoft.com/net/core

    选择对应的系统版本进行安装。安装完成过后 输入命令查看版本,目前最新版为 2.x:

    dotnet --version

    此时已经可以发布Asp.Net Core应用程序到Linux上运行了

    将Asp.Net Core程序发布到Linux服务器上,通过 dotnet 命令来运行,如:

    dotnet /应用程序全路径/应用程序名.dll 

    成功运行后会显示 :  

    Hosting environment: Production
    Content root path: /应用程序全路径/
    Now listening on: http://localhost:5000
    Application started. Press Ctrl+C to shut down.

    (Asp.Net Core应用程序默认使用5000端口,可以在项目 Program.cs 中进行自定义端口,但不建议在Program.cs中进行自定义端口)

    但是这个时候,只要关闭当前的 ssh 会话 那么 Asp.Net Core应用程序就会结束运行。

    那么该怎么办呢?使用 Jexus ! (需要使用5.8.2 版本或更高版本的)https://news.cnblogs.com/n/569277/

    Jexus 官网地址: https://www.jexus.org/

    Jexus 官网论坛: https://www.linuxdot.net

    第二步 安装Jexus

    安装 Jexus 直接使用一下命令即可(需要在root身份下执行):

    curl https://jexus.org/release/x64/install.sh|sh

    安装成功后会提示:OK, Jexus has been installed in /usr/jexus.

    第三步 发布程序并复制到到Linux服务器

    1、发布

      可使用vs直接发布,也可以使用dotnet命令进行发布,或者可以使用我写的一个小工具,对项目进行发布  小工具链接

     2、复制到服务器

      将发布的整个应用程序文件夹copy到Linux服务器的  /var/www/   路径下

      (如果 www 文件夹不存在,则使用    mkdir /var/www/    命令创建 www 文件夹)

      此时,应用程序所在的完整路径为    /var/www/应用程序文件夹/应用程序名称.dll

    第四步 配置Jexus运行Asp.Net Core应用程序

    使用以下命令:

    1、切换到Jexus配置文件目录

    cd /usr/jexus/siteconf

    2、复制默认的配置文件为test

    cp default test

    3、编辑test配置文件

    vi test

    test文件默认内容为:

    ######################
    # Web Site: Default 
    ########################################
    
    port=80
    root=/ /var/www/default
    hosts=*    #OR your.com,*.your.com
    
    
    # addr=0.0.0.0
    # CheckQuery=false
    NoLog=true
    # AppHost={CmdLine=/usr/local/x/xx;AppRoot=/usr/local/x;Port=5000}
    # NoFile=/index.aspx
    # Keep_Alive=false
    # UseGZIP=false
    
    # UseHttps=true
    # ssl.certificate=/x/xxx.crt  #or pem
    # ssl.certificatekey=/x/xxx.key
    # ssl.protocol=TLSv1.0    # TLSv1.1 or  TLSv1.2...
    # ssl.ciphers= 
    
    # DenyFrom=192.168.0.233, 192.168.1.*, 192.168.2.0/24
    # AllowFrom=192.168.*.*
    # DenyDirs=~/cgi, ~/upfiles
    # indexes=myindex.aspx
    # rewrite=^/.+?.(asp|php|cgi|pl|sh)$ /index.aspx
    # reproxy=/bbs/ http://192.168.1.112/bbs/
    # host.Redirect=abc.com www.abc.com  301
    # ResponseHandler.Add=myKey:myValue
    
    
    # Jexus php fastcgi address is '/var/run/jexus/phpsvr'
    #######################################################
    # fastcgi.add=php|socket:/var/run/jexus/phpsvr
    
    # php-fpm listen address is '127.0.0.1:9000'
    ############################################
    # fastcgi.add=php|tcp:127.0.0.1:9000

    编辑完成后 test 的内容为(注意AppHost中的每一项结尾应该有英文半角的分号):

    ######################
    # Web Site: test
    ########################################
    
    port=8888                    
    root=/ /var/www/应用程序文件夹/
    hosts=*   #OR your.com,*.your.com 
    
    AppHost={
      cmd=dotnet 应用程序名称.dll;   
      root=/var/www/应用程序文件夹/;  
      port=0;       
    }
    
    
    # addr=0.0.0.0
    # CheckQuery=false
    NoLog=true
    # AppHost={CmdLine=/usr/local/x/xx;AppRoot=/usr/local/x;Port=5000}
    # NoFile=/index.aspx
    # Keep_Alive=false
    # UseGZIP=false
    
    # UseHttps=true
    # ssl.certificate=/x/xxx.crt  #or pem
    # ssl.certificatekey=/x/xxx.key
    # ssl.protocol=TLSv1.0    # TLSv1.1 or  TLSv1.2...
    # ssl.ciphers= 
    
    # DenyFrom=192.168.0.233, 192.168.1.*, 192.168.2.0/24
    # AllowFrom=192.168.*.*
    # DenyDirs=~/cgi, ~/upfiles
    # indexes=myindex.aspx
    # rewrite=^/.+?.(asp|php|cgi|pl|sh)$ /index.aspx
    # reproxy=/bbs/ http://192.168.1.112/bbs/
    # host.Redirect=abc.com www.abc.com  301
    # ResponseHandler.Add=myKey:myValue
    
    
    # Jexus php fastcgi address is '/var/run/jexus/phpsvr'
    #######################################################
    # fastcgi.add=php|socket:/var/run/jexus/phpsvr
    
    # php-fpm listen address is '127.0.0.1:9000'
    ############################################
    # fastcgi.add=php|tcp:127.0.0.1:9000

    编辑完成后,在英文半角输入法下   按 Esc 键 输入  :wq  完成保存文件修改并退出  (以上修改会在下面进行详细说明)

    4、启动/重启 Jexus

    当配置文件编辑完成后使用以下命令对Jexus进行 启动/重启

    # 如果已启动 Jexus:
    sh /usr/jexus/jws restart
    
    # 如果未启动 Jexus:
    sh /usr/jexus/jws start

    启动/重启成功后,在浏览器中输入  ip地址/域名:端口号 例如(192.168.1.1:8888 或 www.aspnetcore.com:8888 )  即可访问Asp.Net Core应用程序

    以上即是Jexus托管Asp.Net Core应用程序的配置全过程

    通过微软官方的介绍,Asp.Net Core应用程序是运行在 Kestrel 服务器上的,

    那么Jexus和Kestrel之间的关系什么呢?正如 Apache与Tomcat之间的关系.

    Jexus作为Web服务器,Kestrel是应用服务器,Jexus会将浏览器发送的请求转交给Kestrel,Kestrel 根据请求 交给Asp.Net Core应用程序 处理后将处理结果返回到到Jexus,再由Jexus响应到浏览器,如图所示:

    通过上面的图片我们可以看到一次完整的请求响应的过程。

    那么Jexus是怎么将请求转发到 Kestrel 服务器中的Asp.Net Core应用程序上的呢?

    这里不得不感叹Jexus的强力与使用的便捷,只需要简单的编辑配置文件即可。

    在上面 第四步 配置Jexus运行Asp.Net Core应用程序 时,test文件编辑后的内容含义 

    port=8888                      # 外部访问的端口号,可以改成你想要的端口号,外部访问通过 ip/域名:端口号 即可访问
    root=/ /var/www/应用程序文件夹/  # 应用程序的工作根目录(全路径)
    hosts=*                        #OR your.com,*.your.com # 如果为服务器设置了DNS解析,则可以填写解析到服务器的域名,如:www.myweb.com
    
    AppHost={                      # 最最最重要的配置
      cmd=dotnet 应用程序名称.dll;   # 命令,启动Asp.Net Core应用要执行的命令
    root
    =/var/www/应用程序文件夹/; # Asp.Net Core应用程序所在的全路径
    port
    =0; # Asp.Net Core应用程序所使用的端口号,如果在程序中使用了UsrUrls自定义端口则使用UsrUrls中填写的端口(不建议使用UsrUrls自定义端口),
    # 在没有使用UsrUrls自定义端口的情况下端口号设置为 0,Jexus会在运行时与Asp.Net Core进行"协商"具体使用的端口号,避免多个应用分配 # 端口的麻烦和冲突的风险。
    }

    配置的重点就在于AppHost中,需要注意的是在AppHost中的port(端口号)不代表Jexus对外服务的port(端口号),而是指要转发的 Asp.Net Core应用程序的端口号,简单来说就是会将外部的请求转发到这个端口,由这个端口对应的Asp.Net Core应用程序对请求进行处理。

    强烈推荐“协商端口”,而不是在Asp.Net Core中使用UsrUrls设置端口,避免多个应用分配端口的麻烦和冲突的风险

    推荐博客:

     宇内流云的博客

     张善友的技术博客

     惊鸿哥的博客

     衣明志的技术博客

    另推荐博文:

     Jexus开机启动

    另感谢 宇内流云 的耐心指导。

  • 相关阅读:
    .NET文件格式相关开源项目
    ASP.NET配置文件Web.config 详细解释
    Allow user to select camera or gallery for image
    android之调用webservice 实现图片上传
    使用 iTextSharp 生成 PDF 表格
    Android:如何显示网络图片
    Android的HttpClient和WebView session不同的问题
    提高你开发效率的十五个Visual Studio 2010使用技巧
    HTML5 Audio/Video 标签,属性,方法,事件汇总
    ASP.NET Web 项目文件类型
  • 原文地址:https://www.cnblogs.com/staneee/p/6852559.html
Copyright © 2020-2023  润新知