2017-03-04 dotnet core网站发布到Linux系统中

今天开始学习dotnet core的开发,距离Visual Stuio 2017正式版的发布,也就是VS20周岁的生日还有三天,在我的电脑上安装的是VS2017 Enterprise RC版, 在VS2017RC版本中dotnet core的版本是1.1版本,很快随着VS正式版的发布,2.0也随之上线了,dotnet core 1.1版本和之前的1.0版本呢,很大的区别就在于,project.json文件的变化,在1.1版本上,是把project.json合并到了.csproj和MSBuild文件了,没错使用1.1创建的项目,我们熟悉的.csproj解决方案又回来了,project.json文件也不存在了,关于这个的变化在我其中一篇博客中也已经提到了,不多说。本人对刚开始的1.0版本也没过多深入研究,就直接从1.1入手了,说实话有点措手不及,网上教程大都是1.0的教程,还是慢慢摸索吧。

学习一门语言之前,我们都是从“Hello World”入手的,作为我们这些撸了几年码的人来说,就算了吧,我就偷偷的自己尝试了一下,在这里就不多说了。言归正传,今天直接从网站发布开始学起,先看如何去创建我们的dotnet core web应用程序。

选择新建->项目->.NET Core->ASP.NET Core Web应用程序(.NET Core),这里.net Framework的版本默认的是4.5.2,我都保持默认,不作任何修改了

选择了ASP.NET Core1.1版本,我也不知道选择1.0有什么不同,只是喜欢保持最新,就选了1.1版本,下面的模板选择Web应用程序,其他的身份验证还有Docker的支持,以后再说。

 

点击确定后,就看到我们创建好的项目了,看下解决方法的结构,是不是很熟悉的感觉

没错跟MVC是很相似的,MVC6在dotnet core中起了关键性的作用,我们在看下默认创建的HomeController,

MVC中我们可以在Index右键转到视图,在这里已经不支持了,需要自己去View视图中查看了

为了好看我把这些默认的都删掉,写的简单些,修改后如下图:

下面直接右键在浏览器中查看,如图:

测试我们的Web应用程序是可以正常运行的,下面我们将我们的Web发布下,发布的是方式跟Asp.Net传统的发布方式是相同的,也不能这么说,才发现在VS2017中发布的界面也改了,已经不是原来的容颜了,找不到之前的配置了,/苦笑,不过大同小异,右键我们的项目选择发布,如图:

还是默默的选择了文件夹,以前习惯的方式是新建配置文件,现在没有了,在“文件夹”后面一项成了导入配置文件,我猜测当你选择了文件夹后,它会自动生成配置文件

点击发布,毫无疑问成功了,看下发布后的文件夹

我们使用cmd命令切换到这个目录下,输入dir,就可以看到当前文件夹下的所有目录

那么我们怎么测试我们发布的网站能否正常运行呢?继续使用我们的命令行来测试,为了防止VS的干扰,我们将VS关闭,还是保持命令行中切换到发布目录下,我们都知道,在发布的dll文件中,以我们的项目名称生成的dll文件就是我们的Web的主要的dll文件,我们就直接使用dotnet命令启动我们的Web,如图所示:

很明显其中的一句话“Now listening on : http://localhost:5000”,提示我们可以使用此地址进行访问我们的网站了,dotnet core 发布的网站默认端口是5000,

我已经将VS关闭了,所以刚才的地址已经失效了,我们重新使用5000端口进行访问,如图:

以上我们确定我们的Web是没有问题的,那么我们下面将我们的Web应用发布到Linux系统中,本想在Win10里面将Linux启用,谁承想下载了半天总是网络连接失败,使用Putty.exe,

害得我只能买了台阿里云服务器,还好老用户还有50块钱的券,Linux服务器安装的CentOS7.2,我登陆到了Linux 服务器,如图:



以上可以看到Linux的系统信息,这台服务器中呢是没有dotnet 环境的,可以使用命令“dotnet --version”测试,提示dotnet:command not found,

我们需要按照dotnet core官网,安装dotnet环境,这里的版本是CentOS 7.2,转到CentOS安装dotnet core ,安装命令如下:(注意要针对自己的Linux版本安装)


下面开始紧张的环境搭建,就怕会出现错误,最开始从朋友那儿借了台Ubuntu的服务器,一直出错,没有找到解决办法,放弃了。开始第一条命令:

内心是鸡冻的,很完美的成功了,继续下一条命令:

悄无声息,不过应该是成功的节奏,继续:

还是悄无声息,再继续:

索性一次性都执行完了,最后看到Hello World,我笑了。我们可以看下他生成了什么文件:

当然这里还是用的project.json文件,之后的版本不知道是怎么样的,慢慢学习吧。到这里,还学习了下怎么通过命令去修改文件的内容,原谅我是Linux小白,

使用命令 vi Program.cs,直接进入这个文件的编辑模式:

通过光标移动,然后修改要修改的内容,编辑完成后,按ESC退出编辑模式,输入“::wq”命令进行保存退出。我们再来执行下这个示例程序

下面我们将刚开始的网站发布到CentOS上,使用了个类似FTP的工具,叫做WinsCP,大家可以直接搜索下载,上图:

这里我们可以看到刚创建的hwapp这个项目的目录,还有个压缩包,那是

安装dotnet时的压缩包,看到这个应该明白了那几天安装命令的含义了。跟使用FTP一样,我们把本地发布的Web应用先上传到服务器上,就不用说怎么用了。

当我们登陆以后,默认显示的是root目录,这里相当于系统的根目录,所以下面在进入相应的文件目录时,注意相对的路径问题。上传完成以后,如图:


下面我们开始启动我们的Web,使用命令行去调用DotNetCoreWebDemo01.dll,我这里是运行成功的。



很奇怪的是,我最开始直接执行dotnet DotNetCoreWebDemo01.dll命令时是报错的,大概的意思是提示找不到project.json文件,如果大家遇到了这个问题的话,

可以把刚刚我们生成的hwapp测试项目中的project.json文件拷贝到web目录下,然后执行“dotnet restore”命令进行还原,会把项目中用到程序包还原到project.json

文件中(或者直接运行dotnet restore命令,我未尝试过,由于做的过程中出现了无法解释的错误,我刚把服务器恢复到了初始状态,再进行发布的时候,居然

不出错了,我也没找到原因,居然直接就执行成功了。。。),我们现在就去运行下我们的Web,好期待。。。

真是当头一棒,很多事真的是经常跟我们想象的相差甚远啊,根据以往的经验,或许是服务器防火墙的原因,应为Web应用程序本身是启动正常的,那我们就看下防火墙。

执行命令:firewall-cmd --state 查看当前防火墙的状态 执行结果为Not Runing,意思就是未运行,现在也不知具体的原因导致为何无法运行。使用命令:

firewall-cmd --list-all 查看当前开放的端口,由于当前FirewallD is not Runing ,所以这些命令都是无法使用的,需要将防火墙开启,相关命令如下:

systemctl start firewalld         # 启动,
systemctl enable firewalld         # 开机启动
systemctl stop firewalld           # 关闭
systemctl disable firewalld       # 取消开机启动,执行start命令后再执行firewall-cmd --list-all 命令,如图所示,没有开放的端口,那我们就把5000端口给开放。


使用命令行:firewall-cmd --zone=public --add-port=5000/tcp --permanent,依次执行


firewall-cmd --reload立刻生效,filrewall-cmd --list-all 显示所有开放端口,此时可以看到 prots那项中,存在5000/tcp,此时已经开放了5000端口,我们再运行

看能否启动我们的Web,首先还是要使用dotnet .dll命令运行Web,再进行端口访问,如图:

还是同样的问题,写到这里,具体的原因我还是不清楚,这里的解决方法在下一篇博客中介绍,解决方案使用Nginx代理服务器,明天见。


扫描二维码关注我的公众号,共同学习,共同进步!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章