CoreWebApi发布

DotnetCore WebAPI发布问题总结:

一、发布dotnetCore到Windows时:#

  1. 创建项目时选择支持openApi自动加载Swagger到项目中

  2. 发布项目出现:找不到与以下网址对应的网页:http://localhost:8888/

  3. 添加Microsoft.Extensions.PlatformAbstractions,为swagger每个方法和类进行注释显示

  4. 在ConfigureServices中添加

    复制代码
    services.AddSwaggerGen(c =>
           {
               c.SwaggerDoc("v1", new OpenApiInfo { Title = "TestWebApi", Version = "v1" ,Description = "gong的WebApi"});
               // 获取xml文件名
               var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
               // 获取xml文件路径
               var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
               // 添加控制器层注释,true表示显示控制器注释
               c.IncludeXmlComments(xmlPath, true); 
           });
    复制代码
  5. 在web.config中aspNetCore节点加入:

    <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development"/>
    </environmentVariables>

  6. 在Configure中需要操作
       app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint("/swagger/v1/swagger.json", "gong.Dotnet5.WebApi v1");
                    c.RoutePrefix = string.Empty;//设置根节点访问
                });
     //app.UseHttpsRedirection();//需要注释掉这句,之前一直卡在发布到IIS不会跳转http://localhost:9000/报404
  7. 然后重启IIS站点

二、发布Dotnet5 WebApi程序到Linus:Centos7+Docker+Nginx#

  • Centos7准备安装yum、docker、nginx#

1、切换到Linux更目录更新yum源*

1.1防火墙操作

复制代码
临时关闭防火墙
systemctl stop firewalld
永久防火墙开机自关闭
systemctl disable firewalld
临时打开防火墙
systemctl start firewalld
防火墙开机启动
systemctl enable firewalld
查看防火墙状态
systemctl status firewalld
复制代码

1.2设置域名解析

配置下centos的DNS一个国内,一个国外
vi  /etc/resolv.conf
nameserver 114.114.114.114
nameserver 8.8.8.8

1.3安装wget命令,已安装请忽略

yum -y install wget

1.4更新yum源

复制代码
cd /etc/yum.repos.d/   ls
mv CentOS-Base.repo CentOS-Base.repo_bak
#设置源网易或阿里云
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo//网易云源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo//阿里云源
​
yum clean all //内容清除掉, 以释放磁盘空间
yum makecache //就是把服务器的包信息下载到本地电脑缓存起来    配合yum -C search subversion
yum -y update //更新yum源包
yum repolist all //查看已安装的yum源
复制代码

2、Centos安装Docker和Nginx

1、安装Docker

1.1卸载旧版本docker(如果没有安装过自然不用卸载啦,跳过这一步)

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

 

1.2安装必要的一些系统工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

1.3添加软件源信息(这里使用国内的阿里云,docker官网上国外地址网速太慢

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.4更新并安装 Docker-CE(个人版,如果是企业安装也可以选择企业版,参考官网文档:https://docs.docker.com/install/linux/docker-ee/centos/

sudo yum makecache fast
sudo yum -y install docker-ce

1.5开启Docker服务

sudo systemctl start docker   //centos7开启服务是systemctl,centos6是service
sudo systemctl enable docker //设置docker开机自启 
sudo systemctl status docker //查看docker运行状态

1.6查看Docker版本

docker version//查看版本
docker info 
sudo docker run hello-world //运行测试项目

1.7配置Docker镜像加速地址

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https//registry.docker-cn.com","http://hub-mirror.c.163.com"]
}
EOF
sudo systemctl daemon-reload  //镜像重载
sudo systemctl restart docker  //重启Docker

1.8Docker拉取Nginx镜像

Docker pull nginx  ---->  docker ps//查看运行容器
Docker run --name=nginxapi --restart=always -d -p 8888:80 nginx //运行nginx

2、Nginx配置

复制代码
1.docker exec -it nginx /bin/bash   //运行nginx 进入到nginx
2.apt-get update    --先更新来源
3.apt-get install -y vim   --安装 vim

4.cd /etc/nginx vim nginx.conf   看是否指向为指定路径  /etc/nginx/conf.d/*.conf   //切换到nginx路径
5.mkdir -p /root/nginx/www /root/nginx/logs /root/nginx/conf  //在root路径下创建nginx挂载文件夹  切换到/root/nginx目录下
6.docker cp ea37c8eaef5b:/etc/nginx/conf.d/default.conf /root/nginx/conf  【ea37c8eaef5b】1运行的nginx容器id  conf.d目录下的配置文件copy到本地,cp 表示复制
    
7.要给netcore容器配置反向代理,首先需要知道netcore项目容器的IP地址,所以在修改配置之前,首先需要获取myapidemo容器的IP地址。

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名 or 容器Id  //拿到运行IP
docker inspect 容器名

8.再配置/root/nginx/conf下的配置文件
server {
       #监听的端口
       listen 80;
       #字符格式
       charset utf-8;
       #当前的服务器ip
       server_name 192.168.213.136;

       location / {
          #要代理去哪个服务器的ip以及端口
          proxy_pass http://192.168.213.136:8090; 【8090】项目运行所监听的端口
          #被代理服务器返回默认的响应头中的location头域以及refresh头域数值
          proxy_redirect default;
    }
 }
复制代码

 

  • 发布运行项目#

    

复制代码
VS2022中添加Dockerfile配置:

# base image【microsoft/dotnet:5.0.0-core 来构建我们的镜像】
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
# 设置工作目录【创建项目在docker容器内的工作目录,容器启动时执行的命令会在该目录下执行】
#WORKDIR 命令为后续的RUN、CMD、COPY、ADD等命令配置工作目录。设置后,接下来的COPY和ADD命令中的相对路径就是相对于WORKDIR指定的路径
WORKDIR /app
# 复制内容到镜像
#并不是指本机目录下的文件,而是 docker引擎中展开的构建上下文中的文件
#即当前执行docker build构建时的所在目录,将当前上文下的文件复制到容器内的当前目录下
COPY .  /app
# 是声明运行时容器提供服务端口,将在docker run -p <宿主端口>:<容器端口>时用到
#EXPOSE 443
EXPOSE 8090
# 启动程序【启动镜像的默认入口命令】
ENTRYPOINT ["dotnet", "gong.dotnet5.demo.dll"]
Xftp将所有发布文件上传到服务器对应位置

在有项目文件的文件夹下:docker build -t aspApi 打包项目镜像【自动执行dockerfile里的配置】

首先找到项目文件目录,并进入项目根目录当中,然后使用如下命令生成镜像
ls                                --查看本地文件列表
cd  netcoredemo                   --进入到项目根目录
docker build -t myapidemo .       --生成项目镜像文件

docker images                     --查看当前docker所有镜像
docker run --name=myapidemo -d -p 9020:5000 myapidemo   --运行docker下的镜像文件
在本机访问暴露端口 http://192.168.213.136:8090/swagger/index.html
复制代码

 

作者:gongxingwen

出处:https://www.cnblogs.com/dotnetSunset/p/17312249.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   渡——已  阅读(129)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示