无论你是刚接触.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段访问相关端口,并且需要严格区分开发环境和生产环境,不要随意相信客户端请求,一定要进行数据校验。具体的等我后面也学习了解到了运维等相关方面的知识的话,我在继续讲解吧!