• 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代理服务器,明天见。

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

  • 相关阅读:
    P1308 统计单词数(cin,getline() ,transform() )
    解决ASP.NET中的各种乱码问题
    GUID
    c# Thread、ThreadPool、Task的区别
    线程学习参考
    异步
    Lamda简单使用
    ubuntu上安装docker
    Git设置ssh密钥
    Git客户端(TortoiseGit)基本使用详解
  • 原文地址:https://www.cnblogs.com/Allen0910/p/6506239.html
Copyright © 2020-2023  润新知