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:\Windows\System32\drivers\etc 这个目录下,修改前先把只读去掉)

也可以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

posted @ 2020-07-29 09:28  srsly  阅读(472)  评论(0编辑  收藏  举报