Net6 api项目多种环境配置+Docker发布.Net6 api项目
一、Net6 api项目多种环境配置
在发布环境下使用的配置文件是.env.production文件
在开发环境下使用的配置文件是.env.development文件
背景:
在项目开发的过程当中,开发环境与生产环境的配置肯定是不一样的。拿个最简单的例子来说,比如连接字符串这种东西,开发环境肯定不能连生产数据库。在之前的话,这种情况基本靠准备两个同名的配置文件来进行处理,然后你在本地就使用本地的配置文件,生产环境就使用生产环境的配置文件,十分麻烦。
类似之前Vue加入配置文件中加了两个种配置文件一个用于开发时使用,一个用于发布后使用的。
1、创建对应环境的配置文件
ASP.NET Core在应用启动时读取环境变量ASPNETCORE_ENVIRONMENT,ASPNETCORE_ENVIRONMENT可以设置任意值,但框架仅支持三个值:Development、Staging 和 Production,一般都是开发和生产环境,所以我们先在项目中添加appsettings.Development.json、appsettings.Production.json以备用,如下图:

这两个文件写的东西都是在Appsettings.json文件下一块写的,现在创建好后只需在对应文件添加配置,原先的文件只需要有这些默认东西就好,如图

2、修改环境变量测试配置
2-1 右键点api项目,选择属性

2-2选择调试->General->打开调试启动配置文件UI

2-3 修改环境变量
当环境变量为ASPNETCORE_ENVIRONMENT=Development 则使用appsettings.Development.json的配置,
当环境变量为ASPNETCORE_ENVIRONMENT=Production 则使用appsettings.Production.json的配置

二、Docker打包发布.Net6 api项目
下面一系列参考下载word文档结合配置:(12条消息) 腾讯云Ubuntu配置+Lunix发布.net6.0api+发布vue-C++文档类资源-CSDN文库
1、如果想让生产环境也使用swagger将Program.cs修改为如下图:(发布后也可以使用Swagger)
无论怎样都启动swagger(或者直接把if那里删掉也可以或者就是加个else这样)

if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } else { app.UseSwagger(); app.UseSwaggerUI(); }
2、创建Dockerfile文件
Dockerfile是Docker用于创建镜像的指令文件(给自己的api项目创建个镜像)
2-1 创建文本文件

2-2 在文件中输入如下内容

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. #.Net6基础镜像--默认下载这个镜像 FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base #设置容器工作目录 WORKDIR /app #这里是将镜像的目录下的文件拷贝到 容器的 /app 目录下面 COPY . /app #默认启动端口号是80 EXPOSE 80/tcp # 运行 CMD命令, 注意第二个字符串要换成你当前项目的dll名称 ENTRYPOINT ["dotnet", "SystemContentProject.ApiService.dll"]
2-3 右键选中Dockerfile,选择属性>>复制到输出目录改为始终复制,如下图:


2-4 在生产环境配置添加启动端口配置
开发环境不配置这个是因为它创建时自带着端口号
因为Dockerfile这里设置的端口号是80 参考的这里

3、发布.Net6 Api项目
3-1:项目发布--发布步骤参考.net Core API (.net 6)发布到本机IIS 和阿里云主机IIS - じ逐梦 - 博客园 (cnblogs.com)
3-2:打开存放api项目的文件夹找到 bin/Release/net6.0下的publish文件夹(或者发布时自己选择的文件夹),里面就是发布好的项目,publish下必须要用dockerfile文件和生产环境配置

3-3、将发布好的项目上传到服务器(部署到Docker上)
3-3-1、在服务器上(Docker)创建文件夹

3-3-2、上传发布的项目文件--直接复制粘贴过去这个发布文件就好

3-4、创建Docker镜像
使用putty.exe远程连接Ubuntu服务器,进入发布好的项目文件夹

3-5、执行创建Docker镜像命令
创建Docker镜像命令格式是: docker build -f Dockerfile . -t镜像名字 . 注意后面的.号是必须的,并且镜像名字必须全部为小写字母, 下面是我执行的命令
docker build -f Dockerfile . -t systemcontentproject_apiservice

执行效果:

3-6、创建镜像后,执行命令查看是否创建成功
docker images

3-7、使用创建好的镜像启动容器
因为我们的项目可能要经常更新,所以启动容器,先创建一个目录用于挂载容器的项目文件, 这样我们就可以通过更新这个目录的文件来更新项目
3-7-1、创建用于存启动容器的项目的目录

3-7-2、使用lunix系统的 cp命令将上传的发布好的项目文件复制到该目录下(当前没有执行这个命令成功)
//路径改下 前面是复制源地址 后面是新创建的文件地址
cp -f -r /home/ubuntu/ycf/public/GroupThreeObject02API/public /home/ubuntu/ycf/websize/netcore/scp_api/groupThree02apifile/public
3-7-3、 进入目录,查看是否复制成功 执行命令 ls 查看文件列表

3-7-4、启动容器
注意:
docker run --name scp_api_9201 -p 9201:80 -v /home/ubuntu/ycf/websize/netcore/scp_api/groupThree02apifile/public:/app -d groupthree02project_apiservice --restart=always
标红这个路径一定是上面3-7-1那步创建的挂载目录的路径--否则就会出现下面描述的那个错误--就是这个路径错了
docker run --name scp_api_9201 -p 9201:80 -v /home/ubuntu/ycf/websize/netcore/scp_api/groupThree02apifile/public:/app -d groupthree02project_apiservice --restart=always
执行效果

查看容器是否启动成功
--没有该容器名称-表示未启动

--解决方法:
--把容器镜像都删除了,然后重新倒3-7-4那步看看,当前发布遇到的问题就是那个路径错了,因为我的根目录有个ycf的文件,所以它3-7-2的时候赋值到那里了,而且下面3-7-4启动容器的路径也用成那个路径了,所以有上面的这个错
查看所有docker
执行命令docker ps -a 查看所有docker,如下图,提示Exited(145) 5minutes ago,意思是5分钟前退出,说明可能是某个错误引发的退出

查看日志错误

解决-继续操作

3-8;完成发布--本机测试

本文来自博客园,作者:じ逐梦,转载请注明原文链接:https://www.cnblogs.com/ZhuMeng-Chao/p/16463218.html


浙公网安备 33010602011771号