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

这些软件的安装过程都比较人性化了,这里不加累述.

安装完成并进入系统以后,稍微清理下左侧的快捷方式,拖出常用的终端命令,我们到如下界面,准备进入下一步的安装.

安装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安装完成:

如果安装没有顺利完成,请参考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

由于目前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程序.

这里把这个项目命名为 WebApi2015. 建立完毕后,把程序目录打包传送到Ubuntu虚拟机.

在虚拟机任意目录解压.

另外我们再非Windows环境可以采用Visual Studio Code进行代码的编辑,这个工具非常容易安装,具体安装方法可以参考官网:

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

虽然这个工具还不如VS方便,但比起文本编辑器还是高级了许多:

下面我们对项目文件做些调整:

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程序.

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 , 运行通过

利用浏览器访问  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 的跨平台方案.

时间: 2024-10-29 19:05:48

ASP.NET 5 (vNext) Linux部署的相关文章

Linux部署ASP.NET 5 (vNext)

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的目标

ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus

原文:ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus 本文承接我的上一篇博文: ASP.NET 5 Linux部署,那篇文章主要是针对最新的ASP.NET 5的,但在随后的研究中,我对这种娱乐型的部署依然不是非常满意,当然其主要原因是因为ASP.NET 5 依然处于RC版本,并不十分成熟. 但可以预见到的是,就算本月ASP.NET 5

Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码

Linux 部署ASP.NET SQLite 应用 的坎坷之旅.文章底部 附示例代码. 有一台闲置的Linux VPS,尝试着部署一下.NET 程序,结果就踏上了坑之路,不过最后算是完美解决问题,遂记录如下. 环境:Linux系统为centos 6  mono 版本 mono-3.2.1  jexus版本 jexus-5.6.4 一.安装环境 1.安装mono 首先安装系统环境: yum -y install gcc gcc-c++ bison pkgconfig glib2-devel get

ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署

原文:ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署 背景: 这周,心情来潮,想把 Aries 开发框架 和 Taurus 开发框架 给部署到Linux上,于是开始折腾了. 经过重重非人的坑,终于完成了任务: Aries on CentOS7:mvc.aries.cyqdata.com Taurus on CentOS7:mvc.taurus.cyqdata.com 不过在发布的过程中,发现有大堆共同的dll(100多个,20多M): 看见一大堆这些dll,

ASP.NET 5 (vNext)

ASP.NET 5 (vNext) 理解和入门 概述 ASP.NET 5 (又称为vNext) 是自ASP.NET产生15年以来一次革命性的更新, 我们可以从以下几点来理解其概貌和意义: ASP.NET 5是开源的 ASP.NET 5开发的WebApp是跨平台的: 目前可以确认的平台包括Windows, Linux和Mac ASP.NET 5是完基于OWIN标准, 已经全与System.Web.dll脱离. 换言之,vNext不一定要架设在IIS上面. ASP.NET 5是完全组件化开发, 开发

ASP.NET 5 (vNext) 理解和概述

原文:ASP.NET 5 (vNext) 理解和概述 概述 ASP.NET 5 (又称为vNext) 是自ASP.NET产生15年以来一次革命性的更新, 我们可以从以下几点来理解其概貌和意义: ASP.NET 5是开源的 ASP.NET 5开发的WebApp是跨平台的: 目前可以确认的平台包括Windows, Linux和Mac ASP.NET 5是完基于OWIN标准, 已经全与System.Web.dll脱离. 换言之,vNext不一定要架设在IIS上面. ASP.NET 5是完全组件化开发,

Node.js 切近实战(十二) 之Linux部署

之前的话我们的项目都是跑在windows上,今天我们要将我们的程序跑到linxu机器上.在看linux部署之前,我们先看一下node.js类似于asp.net mvc的过滤器或者叫拦截器.在app.js中我们加入如下代码 var beforeRequest = function (req, res, next) {     if (req.originalUrl == '/'          || req.originalUrl == '/login'          || req.orig

ASP.NET Core开发Docker部署

ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细了解一下Docker的用途,以及真实的应用场景. Docker源于PaaS,PaaS的应用场景即是Docker的应用场景. Platform as a Service: 平台即服务, 是面向软件开发者的服务, 云计算平台提供硬件, OS, 编程语言, 开发库, 部署工具, 帮助软件开发者更快的开发软

NetCore1.1+Linux部署初体验

1.环境准备 Centaos7+Win10 虚拟机 Win10安装VS2017 https://www.asp.net/downloads注意勾选下.Net Core 3.Centaos安装netcore 1.1参见https://www.microsoft.com/net/core#linuxcentos sudo yum install libunwind libicu curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?l