zoukankan      html  css  js  c++  java
  • linux部署.net core WebApi+Nginx*启动Api

    废话就不多说了,直接开始整吧。

    首先需要在你的项目中发布一下,右键选择你的web项目

     选择发布-选择文件夹-设置你要存放的目录-完成

    然后选择编辑

     

     选择设置-然后修改目标运行时,改成你linux的版本,需要注意的是部署模式里面有两个选项,

    如果你的linux 已经安装的.net core 的SDK 和运行时,就选择框架依赖,否则就选择独立,他们俩的区别就是

    如果选择独立的话会在你发布的文件里面加入很多运行需要的东西,而框架依赖就是依赖系统,所以文件的大小上差很多。独立会大很多

     然后就是保存好配置,发布就行了。

    发布完成后,想办法(我这里用的是SecureFX)把文件放到linux下(在var目录创建一个文件夹一般起名字叫www)

    cd /var   mkdir www cd www mkdir dotnet    然后把发布生成出来的文件全部放入到 你新建的目录下,使用SecureFx的时候有些文件会有提示,选择no-text

    然后启动一下  进入 dotnet目录 输入命令       nohup dotnet 你要运行的项目名称.dll --urls="http://*:5000" &

    这里要是没有安装dotnet的需要先安装一下,

    1.添加微软仓库

    sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

    2.安装dotnet

    sudo yum install dotnet-sdk-3.1

    3.测试dotnet命令

    dotnet --version

    启动后 运行一下 ps -aux | grep "你的项目名称.dll"  查看是否启动,上面的 dotnet WebApi.Core.Api.dll 就是启动成功了,ip 是5071

    如果你想重启服务,就kill 5071  然后 在 输入命令 nohup dotnet 你要运行的项目名称.dll --urls="http://*:5000" & 启动就好了

     我们安装一下 nginx 做一下代理,不想每次都输入 http:xxxx:5000 这样

    yum install epel-release   先安装epel  这个是安装 nginx必须的不然会报错

    sudo yum install nginx    然后安装nginx

    sudo systemctl start nginx  启动nginx

    sudo systemctl enable nginx 程序开机启动,会在下面的目录下给你创建一个service

    如果你运行防火墙的话,记得把端口和 http  https 都打开

    sudo firewall-cmd --permanent --zone=public --add-service=http
    sudo firewall-cmd --permanent --zone=public --add-service=https
    firewall-cmd --zone=public --add-port=5000/tcp --permanent
    sudo firewall-cmd --reload

    查看nginx运行状态  sudo systemctl status nginx.service

    修改配置文件  sudo vi /etc/nginx/nginx.conf   把默认的注释掉,然后新写一个,

    如果要使用域名,记得改本地host(C:WindowsSystem32driversetc 这个目录下,修改前先把只读去掉)

    也可以DNS解析一下域名(这个我是真不会,后期如果掌握了,在补充)

    server {
    
    listen 80;
    location / {
    
    proxy_pass http://localhost:5000;
    
    proxy_http_version 1.1;
    
    proxy_set_header Upgrade $http_upgrade;
    
    proxy_set_header Connection keep-alive;
    
    proxy_set_header Host $http_host;
    
    proxy_cache_bypass $http_upgrade;
    
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  #获取真实IP
    
    proxy_set_header X-Real-IP $remote_addr;  #获取真实IP
    }
    }

    这里 server 可以写多个,root 是你要执行的目录,index 是目录下要执行的 html,请求就是 http://你的IP地址:5588 

    server {
      listen 5588;
      server_name localhost;
    
      root /usr/local/webvue/dist;
      index index.html index.htm;
      # 注意设定 root路径是有dist的
      location / {
    
      }
    }

    这里 5588端口如果没开,会一直拒绝访问,可以先查一下,是否允许 http访问,如果没有就加一下。

    semanage port -l | grep http_port_t ----查看http允许访问的端口
    semanage port -a -t http_port_t -p tcp 5588 --将要启动的端口加入到列表中
     

     验证配置文件是否正确  sudo nginx -t

    重启nginx,让配置生效    sudo nginx -s reload

    如果报错502的话解决办法

    第一:SElinux配置问题

    sudo yum install policycoreutils-python
    sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M corenginx
    sudo semodule -i corenginx.pp

     第二:程序问题

    首先就是要找到日志了,这个日志我找了大概一天,这绝对是经验之谈啊,

    查了百度就没有一个靠谱的啊。我都不知道自己怎么找到的,摸不到门路有可能一直不知道什么原因导致报错的

    我弄了一个进程守护,因为看到那里面有房日志的地方,弄好了之后,就是一直报错一直重新启动,

    看了一下日志,感觉不是程序报错的日志,就是说5000端口被占用没有释放,这个就被我pass了,

    后来又研究linux自带的Core系统日志  Core dump ,找了 大概十几个帖子借鉴,个人觉得方法都没问题,但是日志就是不出现,

    说是在/var/log下,我观察的望眼欲穿了,也没发现给我创建一个 core的日志,有可能是因为我只能百度,公司不能Google

    然后在崩溃的边缘的时候,幸运的发现了一个文件,在你的Core程序里面,有一个nohup.out 的文件,我原来是不知道这是做什么的

    但是我看到了.out 知道了 这是输出文件,估计是记日志的,就打开看了看,终于啊,千辛万苦找到了日志,然后就是一顿解决。

    进入你的dotnet放程序的目录, cat nohup.out  然后就能看到你启动dotnet的报错信息了,很详细的

    如果正确了就会显示如下图,就绝对没问题了,可以在linux环境下 直接访问 curl  http://localhost:5000 就相当于你在浏览器输入了

    sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

  • 相关阅读:
    python_Opencv_使用Matplotlib模块
    django中同源策略和跨域解决方案
    ES6常用语法
    django之页面缓存
    django组件之ContentType
    我的博客园设置
    rest_framework 之版本控制
    rest_framework 之分页器
    在django项目中手动模拟实现settings的配置
    rest_framework之url控制器详解
  • 原文地址:https://www.cnblogs.com/xiaojinFat/p/13389933.html
Copyright © 2011-2022 走看看