當前位置:
首頁 > 最新 > dotnetcore Web發布到Linux系統中01

dotnetcore Web發布到Linux系統中01

今天開始學習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代理伺服器,明天見。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 緣媛零食鋪 的精彩文章:

TAG:緣媛零食鋪 |