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代理服務器,明天見。


掃描二維碼關注我的公衆號,共同學習,共同進步!

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