前言

上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在 asp.net core 中对我们的已经完成的程序进行发布和部署。

有关如何使用 Nginx 进行部署,请参见本人的另一篇文章:

http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html

目录

  • 安装 Liunx DotNet 环境
  • 新建一个 Web 项目,并发布
  • 使用 Jexus 进行反向代理

安装 Linux DotNet 环境

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

新建一个 WebApp 项目,并发布

在 Asp.Net Core 项目中,我们使用 dotnet new -t WebApp 命令和创建一个新的空的 Web 应用程序,然后使用dotnet resotre还原 Nuget。

主要是用以下几个命令:

mkdir HelloWebApp 这个命令是创建一个名为 HelloWebApp 的文件夹。

dotnet new -t Web 这个命令是使用 Web 模板来新建一个 WebApp 的 Mvc 应用程序。

新建了应用程序之后,使用dotnet restoredotnet run 命令来测试一下我们的应用程序。

我们打开浏览器输入 http://localhost:5000,来看一下效果。



可以看到已经成功运行了。

如果发布应用程序,我们需要使用 dotnet publish命令,通过使用 --help 参数可以看到一些可以使用的命令参数。

  -f|--framework <FRAMEWORK>          Target framework to compile for

  -r|--runtime <RUNTIME_IDENTIFIER>   Target runtime to publish for

  -b|--build-base-path <OUTPUT_DIR>   Directory in which to place temporary outputs

  -o|--output <OUTPUT_PATH>           Path in which to publish the app

  --version-suffix <VERSION_SUFFIX>   Defines what `*` should be replaced with in version field in project.json

  -c|--configuration <CONFIGURATION>  Configuration under which to build

  --native-subdirectory               Temporary mechanism to include subdirectories from native assets of dependency packages in output

  --no-build                          Do not build projects before publishing

我们运行dotnet publish -o ~/WorkSpace/publish 发布到 publish 文件夹,当看到Published 1/1 projects successfully的时候,说明已经发布成功了。

PS: 如果提示没有安装 NPM 工具,运行sudo install apt-get npm -g,先安装 NPM。

如果提示没有 bower 管理工具,使用 sudo npm install bower -g安装 bower。

如果提示没有 gulp 构建工具,使用 sudo npm install gulp -g安装 gulp。

如安装过程中无响应,请科学上网后再安装。

发布之后 publish 文件夹里面的子文件夹有必要说明一下。

appsettiong.json  应用程序的配置文件
refs 应用程序引用的.net fx系统程序集
runtimes 运行时环境,可以看到里面的文件夹包含 win7、linxu,mac os 等,说明我们这个应用程序是跨平台的。
views 这个文件夹存放的就是我们的 mvc 的视图文件。
wwwroot 文件夹,存放的是前端使用的 js 库,css 样式表,和图片等。

然后使用dotnet HelloWebApp.dll测试发布过后的程序是否运行正常。

使用 Jexus 进行反向代理

  • Jexus 介绍
  • 安装 Jexus
  • 配置 Jexus
  • 注意事项

Jexus 介绍

Jexus 是一款国产的,运行在 Linux 上的 Web 服务器。 具体介绍我就直接放链接了。

官网: http://www.jexus.org/

张善友的介绍:http://www.cnblogs.com/shanyou/archive/2011/01/23/Jexus.html

安装 Jexus

在命令行窗口中,使用以下命令来安装一个绿色版的 jexus(无需另行安装 Mono)。

cd /tmp

wget linuxdot.net/down/jexus-5.8.1-x64.tar.gz

tar -zxvf jexus-5.8.1-x64.tar.gz

sudo mv jexus /usr

sudo rm -rf /tmp/jexus*

使用以下命令来启动 jexus

cd /usr/jexus

sudo ./jws start

打开浏览器输入http://localhost 如果看到下面这个异常界面,代表运行成功了。

配置 Jexus

有两种方式可以在 Jexus 上访问我们的 Web 应用程序。 即端口转发和反向代理的方式,下面是两种方式的配置方法。

1、** 端口转发 **

端口转发,即把 Jexus 配置的端口直接转发到我们的 asp.net 程序中,即转发到 Kestrel 去处理。

2、** 反向代理 **

反向代理,即把我们应用程序的一部分路径交给 Jexus 去处理,比如静态文件,图片等。另外一部分动态的交给Kertrel 来处理。这样可以降低我们的后端 Kertrel 的压力。

还有一个很重要的优势就是 Web 中的缓存,会在代理服务器这一步来处理。大家看下面这个图:

至于怎么样添加代理服务器可以识别到的缓存,可以关注我后面发表的博客文章。

按照上述方式安装完 Jexus 之后,配置文件路径在 /usr/jexus/siteconf/default 文件中。

切换工作目录到/usr/jexus/siteconf/,使用sudo gedit default命令打开 default 文件。

修改内容为如下:

port=80

# Jexus 默认访问的工作目录
root=/ /home/yxd/Workspace/publish # 下面这种方式是反向代理。我设置的路径是"/"即根目录,大家可以根据
# 需要设置为非静态的路径
reproxy=/ http://localhost:5000/ # 下面这种方式是使用端口转发
AppHost.Port=5000 # 注意: 以上两种方式配置一种即可。

保存并退出。 然后使用sudo ./jws restart命令来重启一下。

然后我们打开浏览器 输入http://localhost,发现此时已经通过 jexus 来访问我们的站点了。

注意事项

1、在使用 jexus 代理访问站点的时候, 保持命令dotnet run HelloWebApp.dll的命令行窗口必须开启。

2、可以使用下面的命令来让一个命令行运行在后台进程中。

nohup dotnet HelloWebApp.dll &

这个时候你就可以把命令行窗口关掉了。

下一篇将讲解如何在 Linux 中使用 Docker 进行部署,以及如何脱离命令行宿主给我们的dotnet程序创建一个守护进程,及宕机失败自动重启等等。。。 请持续关注。

如果你觉得本文对你有帮助,不妨点个【推荐】。


本文地址:http://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.html

作者博客:Savorboard

欢迎转载,请保留出处

Asp.Net Core 发布和部署(Linux + Jexus )的更多相关文章

  1. Asp.Net Core 发布和部署 Linux + Nginx

    安装.NET Core SDK 官方介绍:https://dotnet.microsoft.com/download/linux-package-manager/centos/sdk-current ...

  2. ASP.NET Core托管和部署Linux实操演练手册

    一.课程介绍 ASP.NET Core 是一种全新的跨平台开源 .NET 框架,能够在 IIS.Nginx.Apache.Docker 上进行托管或在自己的进程中进行自托管. 作为一个.NET Web ...

  3. Asp.Net Core 发布和部署( MacOS + Linux + Nginx )

    前言 在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在Linux中,对 Asp.Net Core 的程序进行发布和部署. 有关如何在 Jexus 中进行部署,请 ...

  4. ASP.NET Core 发布至Linux生产环境 Ubuntu 系统

    ASP.NET Core 发布至Linux生产环境 Ubuntu 系统,之前跟大家讲解了 dotnet publish 发布,而没有将整个系统串起来. 今天就跟大家综合的讲一下ASP.NET Core ...

  5. ASP.NET Core 2.0 MVC 发布部署--------- ASP.NET Core 发布的具体操作

    ASP.NET Core 发布的具体操作 下面使用C# 编写的ASP.NET Core Web项目示例说明发布的全过程. 1.创建项目 选择“文件” > “新建” > “项目”. 在“添加 ...

  6. 使用 Visual Studio 部署 .NET Core 应用 ——ASP.NET Core 发布的具体操作

    ASP.NET Core 发布的具体操作 下面使用C# 编写的ASP.NET Core Web项目示例说明发布的全过程. 1.创建项目 选择“文件” > “新建” > “项目”. 在“添加 ...

  7. asp.net core 2.1 部署 centos7

    asp.net core 2.1 部署 centos7 Kestrel 非常适合从 ASP.NET Core 提供动态内容. 但是,Web 服务功能不像服务器(如 IIS.Apache 或 Nginx ...

  8. ASP.NET Core开发-Docker部署运行

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  9. [争什么! 掺在一起做撒尿牛丸啊! 笨蛋]ASP.NET Core 2.0 + EF6 + Linux +MySql混搭

    好消息!特好消息!同时使用ASP.NET Core 2.0和.NET Framework类库还能运行在linux上的方法来啦! 是的,你没有看错!ASP.NET Core 2.0,.NET Frame ...

随机推荐

  1. FPGA 开发笔记 点滴

    1.添加包含的文件或参数文件(define.v)的方式:如果文件在工程目录下的一个文件夹下,则可用 `include "../文件夹名/define.v",  文件和工程载同一目录 ...

  2. Android中surface,surfaceview,sufaceholder以及surface客户端的关系

    这里以照相机camera功能的实现来解释surface,surfaceview,sufaceholder以及surface客户端(本例子中指的是camera)的关系,surface及其client(客 ...

  3. 【Java EE 学习 79 上】【mybatis 基本使用方法】

    一.简介 mybatis类似于hibernate,都是简化对数据库操作的框架,但是和hibernate不同的是,mybatis更加灵活,整体来说框架更小,这体现在它需要我们手写SQL语句,而hiber ...

  4. Office文档在线预览

    工具说明:通过传入文档的Web地址,即可进行Office文档的在线预览. 使用方式: 在http://office.qingshanboke.com地址后,通过url参数传入您想预览的文件路径. 如: ...

  5. swift 单独部署,开发

    部署环境 virtualBox Ubuntu 14.04 desktop OpenStack Swift (kilo) 说明 此文档为基于官方修改的只针对Ubuntu 14.04,完整的参阅官方文档 ...

  6. VirusAnti_didiwei使用说明

    前言 前段时间说要写的一个专杀框架敌敌畏,后改为强撸敌敌畏,以彰显样本查杀时的气势,现在第一版已经完成了,如下图所示,使用的时候强烈建议控制台使用放大模式,这样就可以看见我花了半天才画好了logo , ...

  7. 如何关闭eslint

    在vue-cli搭建webpack中,使用eslint进行代码规范化检查. 进行关闭,在根目录下有个.eslintignore直接将不想要检查的文件丢进去就可以了 也可以在重构的时候把它关闭掉

  8. junit的学习

    junit 是一种单元检测的工具包,他能解决的问题主要是有两点 : 1.  不用将方法都调到main方法去执行一次来看结果 2.  测试的结果可以不用我们人工去对比,这里主要使用的是junit的断言类 ...

  9. 尽量用goto代替尾递归

    void PrintList(List L) { if(L!=Null) { PrintElement(L->Element); PrintLisr(L->Next); } } 所谓尾递归 ...

  10. three.js全景

    <!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl - eq ...