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();
}
View Code

 

 

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"]
Dockerfile

 

 

 

 

  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;完成发布--本机测试

 

posted @ 2022-07-10 15:06  じ逐梦  阅读(2902)  评论(0)    收藏  举报