掌握.NET Core后端发布流程,如何部署后端应用?

news2025/2/21 21:54:30

无论你是刚接触.NET Core的新手还是已有经验的开发者,在这篇文章中你将会学习到一系列实用的发布技巧与最佳实践,帮助你高效顺利地将.NET Core后端应用部署到生产环境中

目录

程序发布操作

Docker容器注册表

文件夹发布

导入配置文件

网站运行操作

程序发布操作

        当我们想对我们已经写好的后端项目发布到网站的时候,可以直接将项目文件目录中的bin/Debug部署到生产环境的服务器上,但是缺点也很明显需要发布网站提前安装好.net运行时环境并且性能方面也是比较差的,我们创建的做法就是采用自带的发布功能进行操作,以下是对程序进行发布操作的基本流程:

右键我们的项目,点击发布按钮,然后进入到下面的界面,让我们选择用什么样的方式进行发布,如下可以看到.net core给我们提供的方式也是挺多的,每种发布方式注意的点也很多,接下来就着重对某些发布的操作进行讲解吧!

如果真的需要在服务器上面安装配置.net运行时环境,则需要访问 官网 根据需要安装对应的.net的sdk环境,如下所示:

下载完成之后,我们将其安装到服务器当中,然后把要发布到服务器的后端发布文件复制到服务器中然后运行即可,接下来我们介绍一下上面发布时的几种部署方式吧!

Docker容器注册表

Docker:是一种开源的容器化平台允许开发人员将应用程序及其所有依赖项打包到一个标准化的单元中,称为“容器”。这个容器可以在任何地方运行,无论是本地开发环境、测试环境还是生产环境,Docker使得开发和部署应用程序变得更加简单、灵活和可移植,其官网 地址 如下:

在项目中如果我们想使用Docker进行程序发布的话,我们可以右键项目然后点击添加,选择Docker支持,如下所示:

然后我们接下来开始选择容器基础框架的选项操作,如下所示:

1)容器OS:专门为运行容器优化的操作系统,专门为运行容器优化的操作系统
2)容器生成类型:构建容器的方式和方法,选择合适的构建类型能优化镜像大小、构建速度和可维护性
3)容器镜像SKU:容器镜像的不同配置版本,一个镜像可以有多个不同的SKU版本这些版本之间可能包含不同的库、应用或系统设置
4)Docker生成上下文:在构建Docker镜像时所需要的文件、目录及其他资源的集合,上下文中通常包含应用代码、配置文件、依赖文件等

点击确定之后就会在项目中生成一个Dockerfile文件,我们可以根据需要添加如下内容:

# 使用官方的 .NET Core SDK 镜像来构建应用
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /app

# 复制 csproj 并还原依赖
COPY *.csproj .
RUN dotnet restore

# 复制所有文件并构建应用
COPY . .
RUN dotnet publish -c Release -o out

# 使用运行时镜像来运行应用
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app/out .

# 设置应用默认端口
ENV ASPNETCORE_URLS=http://+:80
EXPOSE 80

# 启动应用
ENTRYPOINT ["dotnet", "webapi-study.dll"]

当然我们也可以在项目根目录中创建一个.dockerignore 文件以避免将不需要的文件复制到Docker镜像中,可以添加如下内容:

bin/
obj/
*.sln
*.user

然后我们在项目的根目录下,使用以下命令构建Docker镜像,t是指定镜像名,.是表示当前目录也就是Dockerfile文件所在的目录,如果是本地打包直接定位到文件目录,然后输入docker build就可以了:

docker build -t auth .

构建完成后,可以通过以下命令运行Docker容器,此命令会将容器的80端口映射到宿主机的5000端口,现在可以通过访问http://localhost:5000来访问Web API了:

docker run -d -p 5000:80 --restart=always --name mywebapi mywebapi

在运行应用时,如果需要检查容器的状态或停止它,可以通过如下命令进行操作:

# 查看正在运行的容器:
docker ps

停止容器:
# docker stop mywebapi_container

删除容器:
# docker rm mywebapi_container

当然如果我们本地安装了Docker的话,可以通过页面端进行操作:

文件夹发布

这里我们采用发布文件夹的方式进行部署我们的后端应用,点击之后进入如下界面,这里提供了本地和线上两种方式,这里我们就拿本地进行举例吧,这里我将发布的文件放在bin目录下,当然你也可以自定义位置,都是可以的:

进入发布界面,这里我们点击显示所有配置然后进入到如下的详细发布界面,其中有四个发布配置

1)配置:选择发布的环境,这里我们一定要选择Release开发环境

2)目标框架:可以根据需要选择要发布的.net框架的版本

3)部署模式:有两种选择部署模式,如下:

框架依赖:生成的程序集是不包含.net运行时的,需要服务器上预先单独再安装.net运行时

独立:生成的程序集是包含.net运行时的,不需要服务器上预先单独再安装.net运行时

4)目标运行时:当我们部署模式选择框架依赖的时候,是有一个可移植选项的,意味着我们可以发布到任何环境,只要该环境配置了对应的.net运行时;如果我们部署模式选择独立的时候则意味着无需服务器再安装.net运行时,但是却没有了可移植的选择,只能发布选择了特定的环境当中,且发布的时间较长

配置完上面四个主要的配置选项之后,接下来还有两个额外配置,文件发布选项和数据库:

文件发布选项

1)生成单个文件

尝试把尽可能多的发布文件合并到一个文件,对开发客户端比较重要一点

2)启用ReadyToRun编译

主要针对启动性能的优化而对应用运行期间的性能提升影响较小,启用ReadyToRun编译会增加发布包的大小,因为它将机器码直接打包到应用程序中

3)裁剪未使用的代码

尝试把一些用不到的程序集给删掉,因为发布的程序当中是可能有一些程序集是没有用到的,但是程序可能会基于安全考虑给我们也拷进发布程序当中了,如果我们对发布程序的包的大小有要求的话,可以选择勾选

4)在发布前删除所有现有文件

在发布前会把之前发布的程序都删除一遍然后再生成新的文件,避免有一些旧的文件被插入到新的发布版本里面

数据库:让发布工具帮助我们生成和EFCore相关的一些迁移脚本,甚至自动帮助我们完成数据库的迁移,如果我们的代码涉及到EFCore相关的话,该选项会让我们连一下数据库然后它会帮助我们完成数据库的迁移,不过大部分情况下我们是不需要采用这种方式的。

导入配置文件

如果我们想选择导入配置文件进行发布的话,需要我们导入一个配置文件到程序当中,这个配置文件一般,如下所示:

该配置文件一般都是当我们创建好web应用之后,点击保存来保存你的配置文件,通常它会保存在项目文件夹下的Properties/PublishProfiles文件夹中,然后还需要在appsettings.json文件夹下配置对应的命令,在创建web应用的时候都已经给到了,类似下面这种的:

AzureAd: {
   "Instance":httos://login.microsoftonline.com/"
    "TenantId":“44c24123356",
    "ClientId:"2c6ala51-17324f2b2ee09”,
    "ClientSecret": "uWm8Q6yOuJ5ii2347ac7",
    "Scope":"api://2c6ala51-170f2b2ee09",
    "AllowWebApiToBeAuthorizedByACL:true
}

网站运行操作

当我们完成了后端程序的发布之后,后面就需要了解并掌握如何对网站进行持续运行操作相关知识的概念了,这一块说实话我了解的也不是很多,虽然.net core已经内置了Kestrel来来作为独立的Web服务器来进行使用,也就是我们直接双击发布程序的exe文件,但是一般我们也不会让Kestrel直接面对终端用户的请求,配置域名、记录请求日志、url重写等操作皆是由反向代理服务器进行负责的,这里我们可以了解一下多种部署模式:

1)K8S+容器:推荐但是配置难度较高

2)Linux+Nginx

3)云平台

4)Windows+IIS

对于网站运行时的安全提醒的话,这边建议启用https,如果运维人员需要通过远程桌面或者SSH连接到服务器,那么一定要再服务器的防火墙上设置只允许运维人员的IP段访问相关端口,并且需要严格区分开发环境和生产环境,不要随意相信客户端请求,一定要进行数据校验。具体的等我后面也学习了解到了运维等相关方面的知识的话,我在继续讲解吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2302130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为昇腾920b服务器部署DeepSeek翻车现场

最近到祸一台HUAWEI Kunpeng 920 5250,先看看配置。之前是部署的讯飞大模型,发现资源利用率太低了。把5台减少到3台,就出了他 硬件配置信息 基本硬件信息 按照惯例先来看看配置。一共3块盘,500G的系统盘, 2块3T固态…

使用Python添加、读取和删除Word文档属性

在Python中处理Word文档时,对文档属性进行操作是一项重要的任务。文档属性主要分为内置属性(如标题、作者等)和自定义属性(用户根据自身需求定义的属性)。合理地管理这些属性,能够提升文档管理效率、优化信…

Day15-后端Web实战-登录认证——会话技术JWT令牌过滤器拦截器

目录 登录认证1. 登录功能1.1 需求1.2 接口文档1.3 思路分析1.4 功能开发1.5 测试 2. 登录校验2.1 问题分析2.2 会话技术2.2.1 会话技术介绍2.2.2 会话跟踪方案2.2.2.1 方案一 - Cookie2.2.2.2 方案二 - Session2.2.2.3 方案三 - 令牌技术 2.3 JWT令牌2.3.1 介绍2.3.2 生成和校…

VSCode运行Go程序报错:Unable to process `evaluate`: debuggee is running

如果使用默认的VSCode的服务器来运行Go程序,那么使用fmt.Scan函数输入数据的时候就会报错,我们需要修改launch.json文件,将Go程序运行在shell终端上。 main.go package mainimport "fmt"func main() {var n intfmt.Scan(&n)v…

IntersectionObserver用法

IntersectionObserver用法 1.什么是IntersectionObserver?2.使用2.1 创建观察对象2.2 观察指定DOM对象2.3 参数详解(1)callback参数(2)options 配置参数 3.应用3.1 Dom进入页面的加载动画3.2 图片的懒加载 1.什么是IntersectionObserver? IntersectionO…

R语言NIMBLE、Stan和INLA贝叶斯平滑及条件空间模型死亡率数据分析:提升疾病风险估计准确性...

全文链接:https://tecdat.cn/?p40365 在环境流行病学研究中,理解空间数据的特性以及如何通过合适的模型分析疾病的空间分布是至关重要的。本文主要介绍了不同类型的空间数据、空间格点过程的理论,并引入了疾病映射以及对空间风险进行平滑处理…

DeepSeek - R1:模型架构深度解析

DeepSeek - R1:模型架构深度解析 引言 本文将深入探索DeepSeek - R1模型架构。将从输入到输出追踪DeepSeek - R1模型,找出架构中的新发展和关键部分。DeepSeek - R1基于DeepSeek - V3 - Base模型架构,本文旨在涵盖其设计的所有重要方面。 …

火绒终端安全管理系统V2.0【系统防御功能】

火绒企业版V2.0系统防御功能包含系统加固、应用加固、软件安装拦截、摄像头保护和浏览器保护。火绒终端安全管理软件V2.0守护企业用户终端安全。 系统防御 1. 系统加固 系统加固功能根据火绒提供的安全加固策略,当程序对特定系统资源操作时提醒用户可能存在的安…

Word中接入大模型教程

前言 为什么要在word中接入大模型呢? 个人觉得最大的意义就是不用来回切换与复制粘贴了吧。 今天分享一下昨天实践的在word中接入大模型的教程。 在word中接入大模型最简单的方式就是使用vba。 vba代码要做的事,拆分一下就是: 获取用户…

【git-hub项目:YOLOs-CPP】本地实现04:项目简化

项目跑通之后,我们常常还需要对我们没有用到的任何内容进行删除,以简化项目体积,也便于我们阅读和后续部署。如何实现呢?本篇博客教会大家实现! 项目一键下载【⬇️⬇️⬇️】: 精简后:【GitHub跑通项目:YOLOs-CPP】+【计算机视觉】+【YOLOv11模型】+【windows+Cpp+ONN…

CTF 代码学习日记 PHP

基础 2字符串连接可以使用点号(.) 3.$_:在 PHP 中,以$_开头的变量(如$_GET、$_POST、$_COOKIE等)是超级全局变量。超级全局变量的特点是它们在 PHP 脚本的任何地方(包括函数内部、类内部等&am…

观察者模式说明(C语言版本)

观察者模式主要是为了实现一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。下面使用C语言实现了一个具体的应用示例,有需要的可以参考…

【从0做项目】Java搜索引擎(6) 正则表达式鲨疯了优化正文解析

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 文章导读 零:项目结果展示 一:导读&知识点回顾 二:遗留问题 …

【论文技巧】Mermaid VSCode插件制作流程图保存方法

插流程图快点 利用Mermaid Preview插件自带功能 如果你的VSCode安装了支持导出图片的Mermaid预览插件(如 Mermaid Markdown Syntax Highlighting 等),可以按以下步骤进行: 打开Mermaid代码文件:在VSCode中打开包含M…

【DeepSeek】如何将DeepSeek部署到本地?如何给本地 LLM 提供UI界面?CherryStudio 的使用

注:如果下面的所有操作,需要访问到 Github,可以先看这篇文章,了解如何流畅连接 Github 【Github】如何流畅链接Github.com-CSDN博客 一、下载 Ollama 1、访问网址 Ollama,点击下载 Ollama 到本地 选择自己计算机的系统…

mac开发环境配置笔记

1. 终端配置 参考: Mac终端配置笔记-CSDN博客 2. 下载JDK 到 oracle官网 下载jdk: oracle官网 :Java Downloads | Oraclemac的芯片为Intel系列下载 x64版本的jdk;为Apple Mx系列使用 Arm64版本;oracle官网下载时报错:400 Bad R…

交换机基本命令

目录 一、华为交换机基本命令 1、VRP视图层 2、命令帮助 3、配置设备名称 4、命令等级(一般生产过程没有下面的详细) 5、用户界面 6、配置Console认证 控制台接口(Console) 配置步骤示例 7、配置VTY登录(本文…

PHP图书借阅小程序源码

📚 图书借阅小程序:一键开启智慧阅读新篇章 🌟 这是一款由ThinkPHP与UniApp两大技术巨擘强强联手精心打造的图书借阅微信小程序,它犹如一座随身携带的移动图书馆,让您无论身处何地都能轻松畅游知识的海洋。创新的多书…

UE 播放视频

一.UI播放视频 1.导入视频文件至工程文件夹 2.文件夹内右健选择Media -> File Meida Source创建testFileMeidaSource文件。 编辑FilePath为当前视频 3.右键->Media->Media Player 创建testMediaPlayer文件 4.右键创建testMediaTexture。编辑MediaPlayer设置testMedia…

拦截器VS过滤器:Spring Boot中请求处理的艺术!

目录 一、拦截器(Interceptor)和过滤器(Filter):都是“守门员”!二、如何实现拦截器和过滤器?三、拦截器和过滤器的区别四、执行顺序五、真实的应用场景六、总结 🌟如果喜欢作者的讲…