天天看點

ASP.NET 5 (vNext) Linux部署

引言

工欲善其事,必先利其器. 首先,我們先明确下以下基本概念

Linux相關

Ubuntu Ubuntu是基于linux的免費開源桌面PC作業系統 十分契合英特爾的超極本定位 支援x86、64位和ppc架構 全面支援網頁浏覽器   WPS。Ubuntu基于Debian發行版和GNOME桌面環境,而從11.04版起,Ubuntu發行版放棄了Gnome桌面環境,改為Unity,與Debian的不同在于它每6個月會釋出一個新版本。Ubuntu的目标在于為一般使用者提供一個最新的、同時又相當穩定的主要由自由軟體建構而成的作業系統。
sudo sudo是linux系統管理指令,是允許系統管理者讓普通使用者執行一些或者全部的root指令的一個工具,如halt,reboot,su等等。這樣不僅減少了root使用者的登入 和管理時間,同樣也提高了安全性。sudo不是對shell的一個代替,它是面向每個指令的。
apt Advanced   Packaging Tool(apt)是Linux下的一款安裝包管理工具。APT由幾個名字以“apt-”打頭的程式組成。apt-get、apt-cache 和apt-cdrom是處理軟體包的指令行工具。
libuv 跨平台異步IO庫,是Kestrel Server的必需元件,必須在最終運作前安裝.
VirtualBox VirtualBox   是一款開源虛拟機軟體。VirtualBox 是由德國 Innotek 公司開發,由Sun Microsystems公司出品的軟體,使用Qt編寫,在 Sun 被 Oracle 收購後正式更名成 Oracle VM VirtualBox。Innotek 以 GNU General Public   License (GPL) 釋出 VirtualBox,并提供二進制版本及 OSE 版本的代碼。使用者可以在VirtualBox上安裝并且執行Solaris、Windows、DOS、Linux、OS/2 Warp、BSD等系統作為用戶端作業系統
curl

cURL   curl -O的輸出結果 原作者 Daniel Stenberg 初始版本 1997 穩定版本 7.40.0(2015年1月8日,27天前) 開發狀态 活躍

  程式設計語言 C 作業系統 跨平台 類型 FTP / HTTP 許可協定 自由軟體:MIT/X derivate   license 網站 curl.haxx.se   cURL是一個利用URL文法在指令行下工作的檔案傳輸工具,1997年首次發行。它支援檔案上傳和下載下傳,是以是綜合傳輸工具,但按傳統,習慣稱cURL為下載下傳工具。它被廣泛應用在Unix、多種Linux發行版中,并且有DOS和Win32、Win64下的移植版本

Linux相關知識非本文主要内容,其他資訊請參考相關文檔.

.NET相關

Mono Mono是一個由Novell公司(由Ximian發起,并由Miguel de lcaza上司的,一個緻力于開創.NET在Linux上使用的開源工程。它包含了一個C#語言的編譯器,一個CLR的運作時,和一組類庫,并實作了 ADO NET和ASP NET。能夠使得開發人員在Linux用C#開發程式。)
DNVM (.NET Version   Manager):由于要實作跨平台的目的,微軟提供了DNVM功能,DNVM是ASP.NET最底層的内容,他是一組Powershell腳本,用于啟動指定版本的ASP.NET運作環境,并且可以在同一台機器的同一時間點上通過使用Nuget工具來管理各種版本的ASP.NET運作環境(DNX),以及進行相應的更新操作。
DNX (.NET Execution   Environment):DNX是ASP.NET程式的運作環境,用于啟動并運作ASP.NET程式。該運作環境包括了編譯系統、SDK工具集、Native CLR宿主環境。可以使用DNVM管理各種版本的DNX,如dnvm list指令可以列出所有可用的DNX環境,而dnvm install   0.1-alpha-build-0446則可以将指定版本的DNX安裝到.dnx檔案夾,你可以在%USERPROFILE%\.dnx\runtimes   目錄下找到已安裝所有版本的DNX。不同的作業系統有不同的DNX版本。
dnu指令 (DNX Utility):是一個指令行的包管理器,包含在DNX内,是以隻要安裝了DNX,就可以使用dnu指令, 其可以用于恢複程式包、安裝程式包、部署程式包等等,比如把project.json裡自定義的程式集自動下載下傳下來進行使用。
dnx指令 dnx.exe是用于啟動自宿主環境(Self-Hosting)的指令行工具,在使用指令行代碼進行自宿主環境啟動程式時,dnx負責查找并調用CLR Native Host,dnx指令是整個運作環境的入口點,你可以使用dnx run來啟動程式。
Kestrel ASP.NET   5 一個基于 libuv 元件的Web Server實作.
NuGet Nuget是一個.NET平台下的開源的項目,它是Visual Studio的擴充。在使用Visual Studio開發基于.NET Framework的應用時,Nuget能把在項目中添加、移除和更新引用的工作變得更加快捷友善

關于ASP.NET核心技術,請進一步參考湯姆大叔的博文:

解讀ASP.NET 5 & MVC6系列(4):核心技術與環境配置

安裝Ubuntu

我們以目前比較流行的Ubuntu為例,我的配置環境是:

l  主機: Win8.1 和 VS2015 RC

l  虛拟機: VirtualBox-4.3.28-100309-Win

l  Linux: ubuntu-15.04-desktop-amd64

這些軟體的安裝過程都比較人性化了,這裡不加累述.

安裝完成并進入系統以後,稍微清理下左側的快捷方式,拖出常用的終端指令,我們到如下界面,準備進入下一步的安裝.

ASP.NET 5 (vNext) Linux部署

安裝MONO

通過下列指令行,安裝MONO – 下載下傳時間可能很長.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list

echo "deb http://download.mono-project.com/repo/debian wheezy-apache24-compat main" | sudo tee -a /etc/apt/sources.list.d/mono-xamarin.list

sudo apt-get update

sudo apt-get install mono-devel

建議依次運作如果有問題重新運作有問題的指令.看到如下結果表示Mono安裝完成:

ASP.NET 5 (vNext) Linux部署

如果安裝沒有順利完成,請參考MONO Project網站尋找最新的安裝方法.

http://www.mono-project.com/docs/getting-started/install/linux/

安裝DNVM

首先需要安裝curl程式

sudo apt-get install curl

然後利用curl安裝DNVM

curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh

安裝完畢以後,利用dnvm更新指令擷取最新運作環境

dnvm upgrade

 如果遇到更新失敗,可以加入-f參數強行覆寫更新.

最後運作下面的指令,确認目前安裝的運作環境

dnvm list

ASP.NET 5 (vNext) Linux部署

由于目前VS2015 RC的dnx版本是1.0.0-beta4,是以這裡請保證目前活躍版本就是1.0.0-beta4. (我這裡裝的比較雜,其實沒有11855那2個也是可以的)

此外可以發現dnx和dnu 2個指令(可以在控制台運作這2個指令,看到幫助資訊)都已經部署完畢,到此dnvm安裝結束.

配置ASP.NET代碼

在Window主機中, 利用VS 2015建立一個vNext版本的WebApi程式.

ASP.NET 5 (vNext) Linux部署

這裡把這個項目命名為 WebApi2015. 建立完畢後,把程式目錄打包傳送到Ubuntu虛拟機.

在虛拟機任意目錄解壓.

另外我們再非Windows環境可以采用Visual Studio Code進行代碼的編輯,這個工具非常容易安裝,具體安裝方法可以參考官網:

https://code.visualstudio.com/Docs/setup

雖然這個工具還不如VS友善,但比起文本編輯器還是進階了許多:

下面我們對項目檔案做些調整:

ASP.NET 5 (vNext) Linux部署

l  加入Kestrel元件的引用,這個是Linux環境下必選的Web Server.

l  加入Kestrel的指令行,把啟動URL設為http://localhost:5000, 這個步驟是必須的,否則後續的dnx指令将無法執行.

l  把Project_Readme.html移入wwwroot作為一個可以展示的靜态頁面.

當然這些調整也可以再Windows裡面先調整好,再拷貝過來.

部署和運作

打開一個終端,把目前路徑設定到我們項目中的src/WebApi2015中,也就是project.json所在目錄.

首先利用dnu指令進行所有相關元件的恢複操作:

dnu restore

 注意這裡經常因為網絡問題而中斷,反複執行這個指令皆可.(不要輕易強行中斷這個指令,會造成壞包),直到出現大量的installing資訊并完成project.lock.json檔案,恢複過程才算順利結束,如下圖:

ASP.NET 5 (vNext) Linux部署

然後運作下面指令執行此ASP.NET 5程式.

dnx . kestrel

 不過這個時候可能依然會報錯,是因為一般新安裝的系統還沒有libuv元件.最終,我們還需要利用下面的指令來安裝libuv元件.

sudo apt-get install automake libtool

curl -sSL https://github.com/libuv/libuv/archive/v1.4.2.tar.gz | sudo tar zxfv - -C /usr/local/src

cd /usr/local/src/libuv-1.4.2

sudo sh autogen.sh

sudo ./configure

sudo make

sudo make install

sudo rm -rf /usr/local/src/libuv-1.4.2 && cd ~/

sudo ldconfig

安裝完畢以後,再運作 dnx . kestrel , 運作通過

ASP.NET 5 (vNext) Linux部署

利用浏覽器通路  http://虛拟機IP:5000/Project_Readme.html  或者  http://虛拟機IP:5000/api/values 可以看到頁面和預設WebApi傳回内容. 如果興趣,還可以在wwwroot加入其他頁面或者在Controller裡面加入其他WebApi來進行嘗試 – 甚至可以加入Controller , View 和 Model檔案來顯示MVC的内容.

結束語

當然,目前我們運作的程式還僅僅是一個非常簡單的版本,還沒有包括EF, SignalR, Identity等複雜元件,但從整個部署過程中,我們可以感覺到其實差距已經很小. 首先運作和部署環境DNVM和dnu, dnx指令和VS 2015的環境是一緻的,而且元件包都是從Nuget上擷取,這和标準的Windows開發環境并沒有太大差別, 是以可以預見,即使是更複雜的ASP.NET 5應用程式,依然可以完整的部署到Linux環境上來, 加上未來EF技術對MSSQL等跨平台資料庫的更好的支援,.NET開發人員完全可以在将來推出自己的 Linux – Kestrel/ Jexus – MySQL – ASP.NET 的跨平台方案.

軟體開發,項目管理,開發管理,團隊管理.

CMMI,PMP

繼續閱讀