[NET] Begin ASP.NET Core

先搞一個linux

以前的教程裏,我用過cygwin和bash on windows,但都有一個缺點,就是事實上底層仍是windows的,因此此次搞.net core 我決定仍是上虛擬機而後用 bash on windows的ssh來控制。因此先裝個虛擬機。 既然底子是軟狗,那就先用hyper-v吧,簡單的說一下教程吧。html

  • 打開程序和功能,在添加window功能裏添加 hyper v虛擬機。
  • 添加完成以後重啓,打開hyper v 虛擬機管理器。先不要建虛擬機,先到右邊新建一個虛擬交換機,如圖:

輸入圖片說明

而後點擊新建出來的虛擬交換機,進行設置java

輸入圖片說明

這樣就能夠了。node

  • 而後新建虛擬機,在配置網絡那一欄裏看到有新建的這個虛擬交換機,選擇那個就能夠了,其餘的跟 vm 差很少。

輸入圖片說明

  • 進入 ubuntu 安裝 sshdpython

    sudo apt-get install openssh-serverlinux

  • 打開bash on windows,連一下並測試。nginx

    ssh root@192.168.1.113 sudo apt-get updategit

ok,測試成功。web

輸入圖片說明

準備測試項目

方法一 在windows上安裝vs2015和dotcore開發包,新建一個 asp.net core mvc 項目,就默認的就行。

而後直接點擊publish,發佈出來。npm

方法二 安裝dotnet core 開發包,並使用文本編輯器+命令行編譯。

無論怎樣仍是要首先安裝 .net core sdkjson

不想裝vs2015,因而仍是用文本編輯器吧,這裏我用的也是微軟的 vs code。

微軟使用了nodejs的npm做爲依賴管理項,不過我有點奇怪這是出於什麼考慮,大概與微軟全面轉向json格式有關?

先無論,那就要先安裝npm了。我準備了網盤,下載解壓,加到PATH目錄就能夠了,固然,本身在網上找也能夠。

而後在npm中安裝插件,其中glup插件依賴git,因此要先安裝git for windows,安裝的時候注意勾選在windows console中使用。 而後以管理員打開命令行安裝插件。

npm install -g yo bower grunt-cli gulp
npm install -g generator-aspnet

項目模板

安裝完成以後就能夠直接用模板生成項目了。cd 到項目目錄,執行

## 先新建一個目錄
cd Code
mkdir DotnetCore
cd DotnetCore
yo aspnet

在生成過程當中會再讓你輸入項目名稱,我輸入了CoreTest,因此以後會生成一個CoreTest的文件夾。自後不用修改程序,繼續在命令行裏執行。

cd CoreTest
## 處理依賴(由於要下載可能會有點慢)
dotnet resotre  
## 測試運行(dotnet會啓動內置服務器)
dotnet run

輸入圖片說明
最後,使用 dotnet publish 發佈項目。

一點感想 事實上npm不止是新建項目的時候用到,在 dotnet publish 的時候也會用到,我拷貝過vs裏默認生成的asp.net core項目進行 dotnet publish,也會報錯缺乏npm的模塊,因此估計vs內置了某些包管理器的功能。

安裝部署 - Linux

拷貝程序

我用的linux的 scp 命令把本地包拷貝到了linux服務器上。命令的具體用法仍是你們自行查詢吧,這一步須要在 bash on windows 中進行(由於用到的是linux 命令嘛),若是目錄不存在,須要先ssh進去新建目錄(而後退出ssh執行scp)。若有其它好辦法請留言告訴我 ^_^

scp -r /mnt/p/Code/DotnetCore/CoreTest/bin/Debug/netcoreapp1.0/publish henry@192.168.1.113:/home/henry/Documents/Code

在運行環境下安裝 dotnetcore

由於是最多見的ubuntu,因此安裝也是格外簡單,微軟提供了全程腳本可用,並且我安裝的仍是最新的16.04lts,因此直接按照官方教程打命令就能夠了。

點我查看如何在ubuntu上安裝dotnet core

雖然教程很明顯,但我仍是把16.04的安裝語句寫一下吧。

sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
sudo apt-get update
sudo apt-get install dotnet-dev-1.0.0-preview2-003121

這篇文章還提到了如何寫一個hello world ,因此你們自行測試。

Kestrel

這是dotnet core 自帶的 web 服務器的名字,在安裝 dotnet 的時候會自行安裝,因此你們並不須要安裝tomcat那樣的java服務器。而運行這個服務器也很簡單,就是運行命令。

## Asp.net Core 的程序入口也是 Main 方法,因此運行的這個dll是包含 Main方法的那個。隨後的輸入應該跟windows下運行dotnet run 的效果是同樣的。
sudo dotnet /home/henry/Documents/Code/CoreTest.dll

不過由於服務器的默認設置,在外部好像沒法訪問到5000端口,因此,官方建議咱們使用反向代理,就是下面的nginx。

nginx

所謂的「反向」代理就是說服務器的代理,由於咱們常見的代理都是客戶端代理,瀏覽器輸入一個代理服務器,服務器看到的實際上是客戶端的代理服務器,而這個反向代理其實就是說咱們訪問的某網站服務器,實際上是轉發到其餘服務器上再返回的,真實的服務器地址客戶端其實並不清楚,這對分佈式部署格外重要,而集羣化負載均衡固然是須要分佈式部署的。

nginx就是這麼一個web服務器,它能夠配置對它的請求轉交給某個具體的應用服務器,並自動負載均衡。 ubuntu上安裝nginx也十分簡單,直接 執行命令:

sudo apt-get install nginx
sudo service nginx start

而後對nginx進行配置,使對其的訪問轉發到Kestrel的5000端口上。

sudo nano /etc/nginx/sites-available/default

編輯配置文件以下

server {
  listen 80;
  location / {
    proxy_pass http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection keep-alive;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

而後從新讀取配置文件並重啓nginx

## 這一句是先測試配置文件是否正確
sudo nginx -t
sudo nginx -s reload

輸入圖片說明

好了,測試成功! 咱們已經成功的在linux上部署了asp.net core 程序!

supervisor

官網的教程中還提到了 supervisor 程序,這是基於python的進程管理小程序,最開始好像是用來管理某些python腳本的執行。

官網提到由於Kestrel服務並不能自行啓動,因此最好部署一個進程管理工具來管理初始化進程。固然,好像寫腳本也是能夠的。由於我目標不是做爲生產環境的測試而只是學習,因此這次到此爲止。官博上還寫了一些關於安全性方面的改進,如防火牆配置等,有興趣詳細瞭解請到 asp.net core 官方博客

最後的話

前一陣子有個段子,說微軟在忙着開源,oracle在忙着做死。 java8若是是java的最後一個版本,那 dotnet core 仍是有點機會的。C#的語法糖不少,支持的特性也更多,因此我我的仍是傾向於寫C#代碼的,只是如今已是優先考慮整個解決方案的時代,微軟因爲過於其服務器價格昂貴,因此在雲時代已經被java甩開了太遠,不過仍是但願dotnet能夠發展的更好,不要讓我失業啊 ^_^

PS. HyperV這個隨系統自啓動的效果至關不錯,感受不到本身跑了虛擬機 ^_^

相關文章
相關標籤/搜索