目前我们的.NET Core实战项目之CMS系列教程基本走到尾声了,通过这一系列的学习你应该能够轻松应对.NET Core的日常开发了!当然这个CMS系统的一些逻辑处理还需要优化,如没有引入日志组件以及缓存功能,权限目前只支持控制到菜单,却没有控制到具体的功能(其实这块只是苦于样式不会处理,不然的话也会把功能加上),不过话又说回来,这些都是次要的,后期有时间慢慢补上吧,因为我开这个系列的初衷也是对大家入门.NET Core学习有所帮助!这一章我们将一起部署我们的一路开发过来的网站。如果你觉得文中有任何不妥的地方还请留言或者加入DotNetCore实战千人交流群637326624跟大伙进行交流讨论吧!
本文已收录至《.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划》
作者:依乐祝
原文地址:https://www.cnblogs.com/yilezhu/p/10366679.html
既然系统开发好了,那么肯定是要进行部署了,作为一名.NET Core研发人员如果你不会部署自己的应用的话,明显不是一个合格的程序员。我们知道如果要进行.NET Core的开发的话就需要安装.Net Core SDK的,如果你仅仅是在服务器上进行.NET Core的部署的话,只需要安装Net Core Runtime即可。
对于SDK以及Runtime的下载你可以点击这里进行下载。
下面我带着大家一起总结下Asp.Net Core的几种部署方式,平时我们使用windows服务器比较多,所以都是iis直接部署的,但是Asp.Net Core开发的程序不仅仅能部署在windows系统的iis上,它还可以有很多其他的部署方式,下面我就为你一一梳理下,当然这里参考了园子里面“幻天芒”的一篇文章,文章末尾我会给出文章链接。
Asp.Net Core 程序在发布后,会产生一个入口 dll 文件,要运行该程序,只需要通过 dotnet 命令执行该 dll 文件即可。所以,第一种方式就是直接找到 dll 文件,并使用 dotnet 命令来运行。(你说 dotnet 命令哪来的?安装了 Runtime 就有了。)当然这里你还可以在运行的时候指定端口号
# 进行控制台执行
dotnet Czar.Cms.Admin.dll --urls=http://localhost:8099
运行结果如下图所示:
用 .Net Framework 开发的应用,大家都比较熟悉用 IIS 来部署。那 .Net Core 呢?虽然两者的运行模式并不相同,但微软为了减少迁移难度,自然也提供了用 IIS 的部署方法。
与 Asp.Net 不同,ASP.NET Core 不再是由 IIS 工作进程(w3wp.exe)托管,而是使用自托管 Web 服务器(Kestrel)运行,IIS 则是作为反向代理的角色转发请求到 Kestrel 不同端口的 ASP.NET Core 程序中,随后就将接收到的请求推送至中间件管道中去,处理完你的请求和相关业务逻辑之后再将 HTTP 响应数据重新回写到 IIS 中,最终转达到不同的客户端(浏览器,APP,客户端等)。
如果要使用 IIS 部署 Asp.Net Core 程序,步骤如下:
在托管系统上,创建一个文件夹以包含应用已发布的文件夹和文件。 目录结构主题中介绍了应用的部署布局。
在“IIS 管理器”中,打开“连接”面板中的服务器节点。 右键单击“站点”文件夹。 选择上下文菜单中的“添加网站”。
提供网站名称,并将物理路径设置为应用的部署文件夹。 提供“绑定”配置,并通过选择“确定”创建网站:
警告
不应使用顶级通配符绑定(http://*:80/
和 http://+:80
)。 顶级通配符绑定可能会为应用带来安全漏洞。 此行为同时适用于强通配符和弱通配符。 使用显式主机名而不是通配符。 如果可控制整个父域(区别于易受攻击的 *.com
),则子域通配符绑定(例如,*.mysub.com
)不具有此安全风险。 有关详细信息,请参阅 rfc7230 第 5.4 条。
在服务器节点下,选择“应用程序池”。
右键单击站点的应用池,然后从上下文菜单中选择“基本设置”。
在“编辑应用程序池”窗口中,将“.NET CLR 版本”设置为“无托管代码”:
ASP.NET Core 在单独的进程中运行,并管理运行时。 ASP.NET Core 不依赖加载桌面 CLR。 将“.NET CLR 版本”设置为“无托管代码”为可选步骤。
ASP.NET Core 2.2 或更高版本:对于使用进程内托管模型的 64 位 (x64) 独立部署,为 32 位 (x86) 进程禁用应用池。
在 IIS 管理员的“应用程序池”的“操作”侧栏中,选择“设置应用程序池默认设置”或“高级设置”。 找到“启用 32 位应用程序”并将值设置为 False
。 此设置不会影响针对进程外托管部署的应用。
确认进程模型标识拥有适当的权限。
如果将应用池的默认标识(“进程模型” > “标识”)从 ApplicationPoolIdentity 更改为另一标识,请验证新标识拥有所需的权限,可访问应用的文件夹、数据库和其他所需资源。 例如,应用池需要对文件夹的读取和写入权限,以便应用在其中读取和写入文件。
了解更多,请参考:IIS 部署.Net Core 应用
目前我们采用的方式就是iis进行部署。
通过 Windows Service的部署方式,我们能够解决上面控制台直接运行部署的开机启动和持久运行问题,也能避开 iis部署 中的性能损失问题。具体如何做呢?如下提供一种方式(当然,也可以用其他方式来部署 Windows Service):
借助 nssm 来管理 Windows Service,Nssm,用法,请参考:https://nssm.cc/usage
配置 Service 开机启动。
安装nssm,然后切换到nssm的安装路径,打开控制台
运行如下的命令:nssm install
从而打开nssm的安装界面如下图所示:
就几个选项,很简单,大家安装英文意思进行配置即可。
优势:
高性能部署,稳定性好。
支持开机启动。
劣势:
仅能用于 Windows 服务器。
引入了一个外包依赖 NSSM。
由于 .Net Core 天生支持跨平台,如果在廉价又稳定的 Linux 上部署 .Net Core 程序逐渐成为主流。对于 Linux 上的部署,和 Windows 上并没有什么区别。首先是安装 Runtime 环境,然后拷贝程序,并通过命令行运行。
再进一步,可以使用后台模式,让程序在后台运行。
更进一步,也可以效仿 Windows,把程序启动管理作为一个服务,来达到开机启动和灵活管理的目的。
作为当前个人认为的最棒的 .Net Core 应用部署方式,建议大家都了解下。目前我们正在尝试进行Docker化,然后用K8S来进行管理。
首先,是 Docker 的基本使用:
编写 Dockerfile
使用 docker build
构建镜像
使用 docker run
创建容器并运行
好,我们来依次说明,对于 Docker 来说,需要先安装 Docker 环境。
接着,我们假设发布包路径如下:
root-folder/
app/ # 发布包目录
xxx.dll # 程序入口点
Dockerfile # Dockerfile文件
然后针对该程序,编写如下 Dockerfile:
# 根镜像FROM microsoft/dotnet:2.2-runtime# 拷贝程序发布包COPY app /app# 设置工作目录WORKDIR /app# 导出的端口EXPOST 80# 程序运行命令CMD ["dotnet", "xxx.dll"]
接下来,通过在 root-folder
中执行 docker build -t xxx:0.0.1 .
来构建一个镜像。
接着,再通过 docker run -it -p 8000:80 --name xxx-demo xxx:0.0.1
来创建并运行容器。
这样,就可以通过 http://localhost:8000
来访问到你的应用程序了。
此处只是大概写下 Docker 部署的步骤,抛砖引玉。真正需要将其用于产线,还需要去学习下足够的 Docker 知识。
额外提一下,如何选择基础镜像
对于 .Net Core 来说,一般有如下几类基础镜像:
sdk -- 相信这个都比较容易理解,就是包含了 .Net Core SDK。
runtime -- 这个也相对容易理解,包含了.Net Core Runtime。
runtime-deps --这个就不是很好理解, runtime? deps? 什么意思呢?就是说,这个连 Runtime都不是全的,需要你在打包的时候,选择自寄宿模式,把Runtime也打进去。
综上,我个人推荐大家选择 runtime 这类作为基础镜像。
今天给大家介绍了asp.net core的几种部署方式希望对大家有所帮助,当然部分内容我没有写的很详细,是想留给大家以思考,动手尝试下!感谢大家的阅读!
相关文章:
.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
.NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了
.NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入
.NET Core实战项目之CMS 第四章 入门篇-Git的快速入门及实战演练
.NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了
.NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用
.NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程
.NET Core实战项目之CMS 第八章 设计篇-内容管理极简设计全过程
.NET Core实战项目之CMS 第九章 设计篇-白话架构设计
.NET Core实战项目之CMS 第十章 设计篇-系统开发框架设计
.NET Core实战项目之CMS 第十一章 开发篇-数据库生成及实体代码生成器开发
.NET Core实战项目之CMS 第十二章 开发篇-Dapper封装GURD及仓储代码生成器实现
.NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI
.NET Core实战项目之CMS第十四章开发篇-防止跨站请求伪造(XSRF/CSRF)攻击处理
.NET Core实战项目之CMS第十五章各层联动工作实现增删改查业务
.NET Core实战项目之CMS 第十六章 用户登录及验证码功能实现
原文地址:https://www.cnblogs.com/yilezhu/p/10366679.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com