Linux系统部署.Net Core3.1项目
.NET Core是一个通用开发平台,由Microsoft和GitHub上的.NET社区共同维护。它是跨平台的, 支持Windows、macOS和Linux,并且可用于设备、云和嵌入式/IoT方案。部署灵活:可以包含在应用或已安装的并行用户或计算机范围中。
——摘自《ASP.NET Core跨平台开发从入门到实战》
Java,Go等语言都是跨平台的,从事计算机行业的朋友,应该都知道。前两天,一个从事测试的朋友,竟然不知道dotnet core是跨平台的。一句,.net跨平台的?这句话,我不知道该怎么回答。是他了解的太少,还是.Net的问题,貌似好多非.neter都不知道.net开源跨平台。我一向以德服人,只能用实践去证明。
.net5已经发布正式版的了,之前玩的一直是预览版的。应该是在2020年11月份发布的吧,这段时间一直有点忙,没有太过关注。等闲下来再去玩一下
今天分享下Linux部署.Net Core3.1,本来想创建个.Net 5的项目,我电脑上的VS一直是.net5预览版的。自己电脑上的vs没有更新。今天只简单记录下怎么将dotnet core 项目部署到Linux。Linux搭配Docker部署才是主流趋势,后续我再记录如何使用Docker部署.Net Core项目
一、创建项目
我们的任务是.Net Core 部署到Linux,所以直接创建一个默认的MVC项目即可。不用dos创建了,直接使用visual studio创建吧。
如果直接发布项目的话,部署后Linux系统可以直接访问,但是外网没办法访问。解决方案有两种,一种是Nginx进行反向代理。还有一种就是在Program中进行配置。这里使用更为简单的后者。
在Program的CreateHostBuilder方法中添加webBuilder.UseUrls("http://*:5000");,端口可以自己定。
编译下项目,快捷键,界面操作都行:
二、发布项目
发布的连接选择“文件系统”
依赖框架的部署 (FDD)
定义:
框架依赖的部署:顾名思义,依赖框架的部署 (FDD) 依赖目标系统上存在共享系统级版本的 .NET Core。 由于已存在 .NET Core,因此应用在 .NET Core 安装程序间也是可移植的。 应用仅包含其自己的代码和任何位于 .NET Core 库外的第三方依赖项。 FDD 包含可通过在命令行中使用 dotnet 实用程序启动的 .dll 文件。 例如,dotnet app.dll 就可以运行一个名为 app 的应用程序。
对于 FDD,仅部署应用程序和第三方依赖项。 不需要部署 .NET Core,因为应用将使用目标系统上存在的 .NET Core 版本。 这是定目标到 .NET Core 的 .NET Core 和 ASP.NET Core 应用程序的默认部署模型。
优点:
不需要提前定义 .NET Core 应用将在其上运行的目标操作系统。 因为无论什么操作系统,.NET Core 的可执行文件和库都是用通用的 PE 文件格式,因此,无论什么基础操作系统,.NET Core 都可执行应用。部署包很小。 只需部署应用及其依赖项,而无需部署 .NET Core 本身。许多应用都可使用相同的dotnet core安装,从而降低了主机系统上磁盘空间和内存使用量。
缺点:
仅当主机系统上已安装你设为目标的 .NET Core 版本或更高版本时,应用才能运行。如果不了解将来版本,.NET Core 运行时和库可能发生更改。 在极少数情况下,这可能会更改应用的行为。
独立部署 (SCD)
定义:
独立部署:与 FDD 不同,独立部署 (SCD) 不依赖目标系统上存在的共享组件。 所有组件(包括 .NET Core 库和 .NET Core 运行时)都包含在应用程序中,并且独立于其他 .NET Core 应用程序。 SCD 包括一个可执行文件(如 Windows 平台上名为 app 的应用程序的 app.exe),它是特定于平台的 .NET Core 主机的重命名版本,还包括一个 .dll 文件(如 app.dll),而它是实际的应用程序。
对于独立部署,可以部署应用和所需的第三方依赖项以及生成应用所使用的 .NET Core 版本。 创建 SCD 不包括各种平台上的 .NET Core 本机依赖项,因此运行应用前这些依赖项必须已存在。
NET Core 2.1 SDK(版本 2.1.300)开始,.NET Core 支持修补程序版本前滚。 在创建独立部署时,.NET Core 工具会自动包含你的应用程序所指向的 .NET Core 版本的最新服务的运行时。 (最新服务的运行时包括安全修补程序和其他 bug 修复程序。)服务的运行时不需要存在于你的生成系统上;它会从 NuGet.org 自动下载。
DD 和 SCD 部署使用单独的主机可执行文件,使你可以使用发布者签名为 SCD 签署主机可执行文件。
优点:
可以对与应用一起部署的 .NET Core 版本具有单独的控制权。请放心,目标系统可以运行你的 .NET Core 应用,因为你提供的是应用将在其上运行的 .NET Core 版本。
缺点:
于 .NET Core 包含在部署包中,因此必须提前选择为其生成部署包的目标平台,部署包相对较大,因为需要将 .NET Core 和应用及其第三方依赖项包括在内。
2.2依赖框架的部署过程
首先得在目标Linux系统安装.Net Core
1.添加yum源
rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
2.升级所有包同时也升级软件和系统内核(非必要)
yum update
3.安装.net core
yum install dotnet-sdk-3.1
4.安装完成后输入.Net Core信息
dotnet -info
5.发布项目
点击发布:
发布完成之后的项目结构:
发布完成后,我们会发现以上3个目录都 TestCenterOS.dll,说明三个目录都是可以进行部署的,但是有所区别的是publish目录下包含wwwroot目录,我们知道.Net Core项目的静态文件是放在wwwroot目录中的。所以虽然其他两个目录可以部署运行,但是会缺少静态文件。所以我们选择publish目录进行部署。
6.创建一个dotnet目录存放项目文件(自己喜欢放哪里都行)
mkdir testcoremvc
7.使用rz将我们打包好的部署文件上传到刚才创建的目录
下面是在linux上面的目录
8.使用unzip 命令进行解压(因为这里打的压缩包是zip格式所以使用unzip命令)
9.使用cd命令进入解压后的目录中
10.启动 项目
dotnet TestCoreMvc.dll
在浏览器中访问即可:
我们的浏览器能正常访问,部署成功。
独立部署的方式一致,这里就不重复了。
Linux搭配Docker部署才是主流趋势,后续我再记录如何使用Docker部署.Net Core项目