共计 4838 个字符,预计需要花费 13 分钟才能阅读完成。
工欲善其事, 必先利其器. 首先, 我们先明确下以下基本概念
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 天前)开发状态 活跃 |
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 能把在项目中添加、移除和更新引用的工作变得更加快捷方便 |
安装 Ubuntu
我们以目前比较流行的 Ubuntu 为例, 我的配置环境是:
- 主机: Win8.1 和 VS2015 RC
- 虚拟机: VirtualBox-4.3.28-100309-Win
- 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 方便, 但比起文本编辑器还是高级了许多:
下面我们对项目文件做些调整:
- 加入 Kestrel 组件的引用, 这个是 Linux 环境下必选的 Web Server.
- 加入 Kestrel 的命令行, 把启动 URL 设为 http://localhost:5000, 这个步骤是必须的, 否则后续的 dnx 命令将无法执行.
- 把 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 的跨平台方案。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-05/118044.htm