相信很多朋友都知道.net core可以跨平台,之前在Windows上,我一般是使用IIS或者直接一个exe运行,当然还可以做成Windows服务的方式,那么开发好的WebApi发布至Linux上后,我们怎么运行呢?
这里我直接通过VS提供的模版创建一个简单的demo,并无任何业务代码,可以直接发布,按惯例我还是用命令来发布我们的
dotnet publish -r linux-x64 -c Release -o ./bin/output
现在直接将bin/output下面的文件上传到Linux服务器上,关于SSH工具的话,我一般用SSH Secure Shell、FinalShell、MobaXterm这个三款工具,用得比较多的还是属MobaXterm了。上传之后,记得给文件给以相应的权限,这里我直接简单粗暴的用chmod -R 777 目录,但是在执行./WebDemo的时候出现这个问题
在Github上有篇文章叫How to use .NET Core on RHEL 6 / CentOS 6和.NET Core Globalization Invariant Mode中有提到几种方式:
{"runtimeOptions": {"configProperties": {"System.Globalization.Invariant": true}}}这里我们就用简单点的方式吧,直接项目文件中加入配置,
重新发布之后把会项目中的配置信息写到runtimeconfig.json中,
我只需要将该文件复制即可,现在我们来继续执行./WebDemo,可以看到能执行成功
由于这里绑定的是localhost,不能提供远程访问,所以我们使用curl命令来看看是否启动成功
直接通过./WebDemo的方式是前台运行,如果当前的SSH连接超时或者工具直接断开,那么程序就会自动退出,这里我们调整一下启动方式nohup ./WebDemo &,这样一来,程序就是后台运行,即使SSH连接超时或者工具直接断开,进行依然在后台运行,以为这样就安全吗?虽然是后台运行,但是还是确保不了我们的程序能一直稳健运行,所以这里,我们可以借助PM2来实现进行守护,安装PM2之前需要先安装NodeJS,具体安装的方法请自行百度吧,我这里就直接通过执行npm install pm2 -g命令来安装PM2,
这里我还是用FinalShell吧,现在我们来启动WebDemo
pm2 start "./WebDemo" --name WebApiDemo
启动后,我们可以看到我们名为WebApiDemo的应用在PM2的状态是online,现在我们通过ps -ef|grep WebDemo去查找进程,然后杀掉,看看PM2的状态是什么样式的?
从图中,我们可以看到,最初的pid是555,在执行kill命令后,PM2检测到进程挂掉后,为我们重新启动了一个进程,pid为16125,这样一来的话,我们的应用就不会莫名其妙的挂掉了,即使挂掉了,也能很快自动启动起来。
关于更多的PM2信息,大家可以去官网查看详细的资料
另外,关于发布,之前在Winform中的那一套也是适用的,比如打包单体应用,依赖包优化,VS自带发布工具等
我只是记录我的学习过程,由于书读得少,可能很多地方表述或者是理解得不对,请轻喷并指正。
|