以前的教程裏,我用過cygwin和bash on windows,但都有一個缺點,就是事實上底層仍是windows的,因此此次搞.net core 我決定仍是上虛擬機而後用 bash on windows的ssh來控制。因此先裝個虛擬機。 既然底子是軟狗,那就先用hyper-v吧,簡單的說一下教程吧。html
而後點擊新建出來的虛擬交換機,進行設置java
這樣就能夠了。node
進入 ubuntu 安裝 sshdpython
sudo apt-get install openssh-serverlinux
打開bash on windows,連一下並測試。nginx
ssh root@192.168.1.113 sudo apt-get updategit
ok,測試成功。web
而後直接點擊publish,發佈出來。npm
無論怎樣仍是要首先安裝 .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的 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
由於是最多見的ubuntu,因此安裝也是格外簡單,微軟提供了全程腳本可用,並且我安裝的仍是最新的16.04lts,因此直接按照官方教程打命令就能夠了。
雖然教程很明顯,但我仍是把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 ,因此你們自行測試。
這是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就是這麼一個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 程序,這是基於python的進程管理小程序,最開始好像是用來管理某些python腳本的執行。
官網提到由於Kestrel服務並不能自行啓動,因此最好部署一個進程管理工具來管理初始化進程。固然,好像寫腳本也是能夠的。由於我目標不是做爲生產環境的測試而只是學習,因此這次到此爲止。官博上還寫了一些關於安全性方面的改進,如防火牆配置等,有興趣詳細瞭解請到 asp.net core 官方博客。
前一陣子有個段子,說微軟在忙着開源,oracle在忙着做死。 java8若是是java的最後一個版本,那 dotnet core 仍是有點機會的。C#的語法糖不少,支持的特性也更多,因此我我的仍是傾向於寫C#代碼的,只是如今已是優先考慮整個解決方案的時代,微軟因爲過於其服務器價格昂貴,因此在雲時代已經被java甩開了太遠,不過仍是但願dotnet能夠發展的更好,不要讓我失業啊 ^_^
PS. HyperV這個隨系統自啓動的效果至關不錯,感受不到本身跑了虛擬機 ^_^