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访问,如果没有就加一下。
验证配置文件是否正确 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 就相当于你在浏览器输入了