掌握.NET Core后端发布流程,如何部署后端应用?
无论你是刚接触.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段访问相关端口,并且需要严格区分开发环境和生产环境,不要随意相信客户端请求,一定要进行数据校验。具体的等我后面也学习了解到了运维等相关方面的知识的话,我在继续讲解吧!
相关文章:
掌握.NET Core后端发布流程,如何部署后端应用?
无论你是刚接触.NET Core的新手还是已有经验的开发者,在这篇文章中你将会学习到一系列实用的发布技巧与最佳实践,帮助你高效顺利地将.NET Core后端应用部署到生产环境中 目录 程序发布操作 Docker容器注册表 文件夹发布 导入配置文件 网站运行操作 …...
深度学习学习笔记(34周)
目录 摘要 Abstracts 简介 Hourglass Module(Hourglass 模块) 网络结构 Intermediate Supervision(中间监督) 训练过程细节 评测结果 摘要 本周阅读了《Stacked Hourglass Networks for Human Pose Estimation》…...
C++ 设计模式-备忘录模式
游戏存档实现,包括撤销/重做、持久化存储、版本控制和内存管理 #include <iostream> #include <memory> #include <deque> #include <stack> #include <chrono> #include <fstream> #include <sstream> #include <ct…...
TOGAF之架构标准规范-信息系统架构 | 应用架构
TOGAF是工业级的企业架构标准规范,信息系统架构阶段是由数据架构阶段以及应用架构阶段构成,本文主要描述信息系统架构阶段中的应用架构阶段。 如上所示,信息系统架构(Information Systems Architectures)在TOGAF标准规…...
第一届网谷杯
统计四场的所有题目(共计12题,四场比赛一共上了21题【包括换题】) 随便记记,以免老题复用(已经复用了) Web 文件包含 1 伪协议 http://120.202.175.143:8011/?cphp://filter/convert.base64-encode/reso…...
Linux(ubuntu) GPU CUDA 构建Docker镜像
一、创建Dockerfile FROM ubuntu:20.04#非交互式,以快速运行自动化任务或脚本,无需图形界面 ENV DEBIAN_FRONTENDnoninteractive# 安装基础工具 RUN apt-get update && apt-get install -y \curl \wget \git \build-essential \software-proper…...
mysql -DQL语句和DCL语句
DQL 数据查询语言(Data Query Language,DQL)是数据库操作语言的重要组成部分,主要用于从数据库中检索数据,核心关键字为SELECT。以下从语法结构、常见操作及示例等方面详细介绍: 语法结构 DQL 的标准语法…...
掌握 ElasticSearch 组合查询:Bool Query 详解与实践
掌握 ElasticSearch 组合查询:Bool Query 详解与实践 一、引言 (Introduction)二、Bool 查询基础2.1 什么是 Bool 查询?2.2 Bool 查询的四种子句2.3 语法结构 三、Bool 查询的四种子句详解与示例3.1 must 子句3.2 filter 子句3.3 should 子句3.4 must_no…...
C++ 类和对象(友元、内部类、匿名对像)
目录 一、前言 二、正文 1.友元 1.1友元函数的使用 1.1.1外部友元函数可访问类的私有成员,友员函数仅仅是一种声明,他不是类的成员函数。 1.1.2一个函数可以是多个类的友元函数 2.友元类的使用 2.1什么是友元类 2.2 友元类的关系是单向的&#x…...
PostgreSQL 常用函数
PostgreSQL 常用函数 在数据库管理系统中,函数是执行特定任务的基本构建块。PostgreSQL 是一个功能强大的开源关系数据库管理系统,提供了丰富的内置函数,这些函数极大地增强了数据库操作的能力。以下是一些在 PostgreSQL 中常用的函数&#…...
掌握 ElasticSearch 四种match查询的原理与应用
文章目录 一、引言 (Introduction)二、准备工作:创建索引和添加示例数据三、match 查询四、match_all 查询五、multi_match 查询六、match_phrase 查询七、总结 (Conclusion) 一、引言 (Introduction) 在信息爆炸的时代,快速准确地找到所需信息至关重要…...
解决:Conda虚拟环境中未设置CUDA_HOME的问题
背景:我是Ubuntu22.04系统,最近在复现FoundationPose算法,按照README构建部署环境时,有一步一直卡住,看了下是未找到CUDA_HOME这个环境变量。 网上搜了下这个错误,需要设置CUDA_HOME的环境变量路径&#x…...
easyexcel和poi同时存在版本问题,使用easyexcel导出excel设置日期格式
这两天在使用easyexcel导出excel的时候日期格式全都是字符串导致导出的excel列无法筛选 后来调整了一下终于弄好了,看一下最终效果 这里涉及到easyexcel和poi版本冲突的问题,一直没搞定,最后狠下心来把所有的都升级到了最新版,然…...
HarmonyOS 开发套件 介绍——下篇
HarmonyOS 开发套件 介绍——下篇 在HarmonyOS的生态中,开发套件作为支撑整个系统发展的基石,为开发者提供了丰富而强大的工具和服务。本文将深入继续介绍HarmonyOS SDK、ArkCompiler、DevEco Testing、AppGallery等核心组件,帮助开发者全面掌…...
关于order by的sql注入实验
实验描述 本实验基于sqli-lab的第46关进行测试 本关的sql 语句为$sql "SELECT * FROM users ORDER BY $id" 利用sort进行sql注入,我们可以利用报错注入,延时注入来爆出数据 1.报错注入 1.手工测试 爆出数据库 ?sort(extractvalue(1, c…...
Transformers快速入门-学习笔记
一、自然语言处理 NLP 是借助计算机技术研究人类语言的科学自然语言处理发展史 一、不懂语法怎么理解语言 依靠语言学家人工总结文法规则 Chomsky Formal Languages 难点:上下文有关文法 规则增多,存在矛盾 二、只要看得足够多,就能处理语言…...
luci界面开发中的MVC架构——LuCI介绍(二)
想要给openwrt开发应用,虽然直接可执行程序也可以运行,但是没有UI会很不方便,想要开发UI就要用openwrt的那一套,自然就是LuCI,LuCI又用了一套MVC框架,今天就讲讲这是个什么东西。 OpenWrt LuCI 界面开发中…...
第1章大型互联网公司的基础架构——1.10 其他NoSQL数据库
这里我们简单介绍一下其他常见的NoSQL数据库及其适用的场景,其中部分数据库会在后续服务设计章节中正式使用时再做详细介绍。 1.10.1 文档数据库 文档数据库的典型代表是MongoDB和CouchDB。**文档数据库普遍采用JSON格式来存储数据,而不是采用僵硬的行…...
DeepSeek+Kimi生成高质量PPT
DeepSeek与Kimi生成PPT全流程解析 一、工具分工原理 DeepSeek核心作用:生成结构化PPT大纲(擅长逻辑构建与内容优化)Kimi核心作用:将文本转换为视觉化PPT(提供模板库与排版引擎) 二、操作步骤详解 1. 通…...
web网络安全:跨站脚本攻击(XSS)
跨站脚本攻击(XSS)概述 跨站脚本攻击(XSS,Cross-Site Scripting) 是一种常见的 Web 安全漏洞,攻击者通过向受信任的网站注入恶意脚本(通常是 JavaScript),诱使其他用户在…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
