ASP.NET Core 1.0

跨平台运行ASP.NET Core 1.0

前言

首先提一下微软更名后的叫法:

  • ASP.NET 5 更名为 ASP.NET Core 1.0
  • .NET Core 更名为 .NET Core 1.0  
  • Entity Framework 7 更名为 Entity Framework Core 1.0 或者简称 EF Core 1.0

现在伴随着ASP.NET Core 1.0 RC2版的更新速度,许多官方文档都跟不上,还停留在RC1版的使用方式上(RC1版是继Beta版之后第一个发布的稳定版本)。RC1和RC2的区别在于RC1版使用dnvm、dnx来restore packages和run(dnu是包含在dnx中的),而RC2版会基于.NET Core CLI,使用dotnet命令来进行building,compiling, NuGet package management, running, testing。如果想了解更多ASP.NET Core 1.0 的发布进度和里程碑可以查看:ASP.NET Core 1.0 Schedule and Roadmap。就目前而言,在某些系统中我们已经可以遗弃mono,只使用.NET Core 和.NET Core CLI 就可以提供对.Net程序进行生成编译运行环境(同时包含.NET Core 和.NET Core CLI的.NET Core SDK二进制包,可以在这里下载)。至于mono的未来,微软的SocttHunter和Scott Hasnselman说到:切换到MIT开源许可协议的mono将作为公司未来构建一个统一.NET库的计划中的一部分,了解详情。可见开源的mono会逐步融入.NET Core体系中。

本文章主要介绍ASP.NET Core 1.0  RC2版的跨平台部署,(【部署环境】作为第一步,有助于理解程序的运行环境和机理)。如果想了解跨平台部署RC1版,请查看

下面会分别介绍在Dokcer、CentOS、Ubuntu环境中的部署方式,Windows比较简单,就不作介绍。运行的ASP.NET Core程序以cli-samples的HelloMvc为例。

一、在Docker中运行

1、环境

这里演示的Docker宿主机环境是CentOS7,下面介绍Docker在CentOS7上的安装。在其他系统中安装Docker,请查看Install Docker Engine

提示:CentOS在7中已经启用firewalld作为新的防火墙,替换掉原先的iptables。而Docker对firewalld的兼容性虽然不太好,但对下面的例子运行中暂时没发现有影响。

2、安装docker

首先查看CentOS的内核版本(CentOS7系统必须为64位,内核必须3.10及以上)

uname -r
3.10.0-229.el7.x86_64

更新已经安装的包

sudo yum update  

安装docker

curl -fsSL https://get.docker.com/ | sh

启动docker

sudo service docker start 或 systemctl start docker

运行docker hello world demo

sudo docker run hello-world

3、创建docker用户组

此用户组具备管理员权限,以后执行docker命令可以不加sudo(这里只做演示,直接使用root)

(1) 以带有管理员权限的用户登入控制台
(2) sudo usermod -aG docker your_username(你的用户名)
(3) 登出再登入控制台
(4) 不带sudo执行docker run hello-world,看是否正确输出Hello world
(5) 设置开机启动sudo chkconfig docker on 或 systemctl enable docker

4、 docker相关概念

container:容器,用来加载各种image,可以看成操作系统。加载各种app。允许多个容器同时运行,并且容器一般无法相互访问宿主服务器资源,除非挂载数据卷volume之类的,数据卷的使用可以参照:http://my.oschina.net/guol/blog/271225)。容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。

image:镜像文件,可以当成app运行在container中,image有一个Dockerfile文件,保存折生成自身image时要执行的命令。

如果是docker run 运行一个容器, 没有加 -d 参数让它后台运行, 这时候 ctrl+c 退出进程也会让容器停止, 如果先退出但不停止容器可以ctrl+p 然后 ctrl+q。

 docker常用命令

5、制作HelloMvc image

在运行cli-samples的HelloMvc例子前,需要把HelloMvc打包成docker image文件。

5.1 首先安装git,克隆cli-samples下来

mkdir app
cd app
git clone https://github.com/aspnet/cli-samples.git
cd cli-samples

需要显式指定HelloMvc的端口(即使指定的是5000端口),目前尝试过不加下面这段代码,发现默认的5000并不起作用

5.2 在HelloMvc的当前目录执行,并备好NuGet.config和Dockerfile文件

NuGet.config:读取package下载的源地址(nuget seeds);

Dockerfile:制作image必须;

5.2.1创建NuGet.config文件

可以从上级目录cli-samples中拷贝一个NuGet.config到HelloMvc目录中,如果没有这个NuGet.config 在还原package时会默认到.nuget/NuGet/加载NuGet.config。因为源不对,会导致某些packeage下载不到。

//拷贝命令
cp -p  /root/app/cli-samples/NuGet.Config  /root/app/cli-samples/HelloMvc/NuGet.Config  

5.2.2创建Dockerfile文件

在创建image时,.NET CLI Preview Docker Image提供了两个基础dotnet image用于继承(里面装载的其实是部署了.NET Core的Ubuntu系统),区别在于它们的Dockerfile不同

  • dotnet:0.0.1-alpha
  • dotnet:0.0.1-alpha-onbuild

dotnet:0.0.1-alpha的Dockerfile,基于buildpack-deps:trusty-scm

dotnet:0.0.1-alpha-onbuild基于dotnet:0.0.1-alpha,(ONBUILD <Dockerfile关键字> ONBUILD指定的命令在构建镜像时并不执行,而是在它的子镜像中执行)

所以HelloMvc的Dockerfile可以有两种写法,各选其一

(1) 基于dotnet:0.0.1-alpha

FROM microsoft/dotnet:latest
RUN mkdir -p /webapp
COPY . /webapp
WORKDIR /webapp
RUN ["dotnet", "restore"]

RUN sudo apt-get -y update     && sudo apt-get install -y dialog make automake libtool curl
 RUN curl -sSL https://github.com/libuv/libuv/archive/v1.8.0.tar.gz | sudo tar zxfv - -C /usr/local/src      && cd /usr/local/src/libuv-1.8.0      && sudo sh autogen.sh     && sudo ./configure      && sudo make      && sudo make install      && sudo rm -rf /usr/local/src/libuv-1.8.0      && cd ~/      && sudo ldconfig

 EXPOSE 5600
 ENTRYPOINT ["dotnet", "run"]

(2)基于dotnet:0.0.1-alpha-onbuild

FROM microsoft/dotnet:0.0.1-alpha-onbuild

RUN sudo apt-get -y update     && sudo apt-get install -y dialog make automake libtool curl
RUN curl -sSL https://github.com/libuv/libuv/archive/v1.8.0.tar.gz | sudo tar zxfv - -C /usr/local/src     && cd /usr/local/src/libuv-1.8.0     && sudo sh autogen.sh      && sudo ./configure      && sudo make      && sudo make install      && sudo rm -rf /usr/local/src/libuv-1.8.0      && cd ~/      && sudo ldconfig

 EXPOSE 5600

5.2.3 检测Dockerfile是否能正常使用
由于.NET Core时刻在更新,所以导致官网NET CLI Preview Docker image 提供的dotnet image更新不及时而在执行dotnet restore时候会报错:unknown keyword platform(主要是dotnet image内部的

.NET Core和CLI版本过旧,且存在bug),会导致基于它的咱们的Dockefile执行失败。 如果不确定你当前的dotnet image是否有上述问题,下面会介绍一种检测方法和问题的解决方案

(1)检测方法

执行下面命令加载dotnet image,且一般会自动启动test_container并进入到image内部环境中,如果你服务器上没有dotnet image,下面命令也会自动下载

docker run --name test_container -it microsoft/dotnet:latest

如果test_container未启动,则执行下面命令启动并关联进入

docker start test_container

dokcer attach test_container

进入到image内部环境中

# mkdir test
# cd test
# git clone https://github.com/aspnet/cli-samples.git
# cd cli-samples
# dotnet restore

查看是否报错

清除测试文件

# cd ~
# rm -r test

(2)解决方案

手工制作一个使用最新.NET Core SDK的dotnet image,也可以使用我已经做好的image   sobit17/sobit-dotnet:1.0.0-beta-002252,当然如果没报错可以省略这一步,用回原来的dotnet image.

制作新的image这里选用dotnet:0.0.1-alpha为原型,也可以使用dotnet: 0.0.1-alpha-onbuild

加载dotnet image

# docker run --name dotnet_container -it microsoft/dotnet:0.0.1-alpha 

如果dotnet_container 未启动,则执行下面命令启动并关联进入

# docker start dotnet_container
# dokcer attach dotnet_container 

查看.NET Core版本(dotnet image中使用的是Ubuntu14.04系统)

dotnet --version
或
dotnet --info

由于对应Ubuntu的dotnet package最高只到1.0.0-beta-00.1793,但这个版本也有上述bug。(查找可以使用apt-cache search XX|grep XX(XX为你知道的一部份软件名),也可以从这里查看http://apt-mo.trafficmanager.net/repos/dotnet/pool/main/d/dotnet/

所以不能利用

apt-get upgrade  dotnet

apt-get remove dotnet  = 1.0.0.001598-1

apt-get install dotnet=1.0.0.002252-1(Ubuntu没这个最新版本)

只能从github下载二进制文件,安装到最新版本(最新版本可以从github上面查到:https://github.com/dotnet/cli#installers-and-binaries

apt-get update
wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Binaries/Latest/dotnet-dev-ubuntu-x64.latest.tar.gz
tar -zxf dotnet-dev-ubuntu-x64.latest.tar.gz -C /usr/bin
apt-get update
wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Binaries/Latest/dotnet-dev-ubuntu-x64.latest.tar.gz
tar -zxf dotnet-dev-ubuntu-x64.latest.tar.gz
ln -s /dn_new/dotnet /usr/bin/dotnet

接下来执行下面命令

dotnet --info //查看版本
exit //退出容器
docker images //查找dotnet_container 的ConrainerID
docker commit 3a09b2588478(ContainerID) dotnet_new(new image name) //commit成一个新的image 

至此base image制作完毕。

接下来只要修改HelloMvc的Dockerfile以指定这个新的image作为基础镜像

FROM dotnet_new 或 sobit17/sobit-dotnet:1.0.0-beta-002252
RUN mkdir -p /webapp
COPY . /webapp
WORKDIR /webapp
RUN ["dotnet", "restore"]

##备注:安装libuv这一过程其实可以在制作dotnet_new镜像时也安装进去,就不需要下面这段【注释在Dockerfile中需删掉】
RUN sudo apt-get -y update     && sudo apt-get install -y dialog make automake libtool curl
RUN curl -sSL https://github.com/libuv/libuv/archive/v1.8.0.tar.gz | sudo tar zxfv - -C /usr/local/src     && cd /usr/local/src/libuv-1.8.0     && sudo sh autogen.sh     && sudo ./configure     && sudo make     && sudo make install     && sudo rm -rf /usr/local/src/libuv-1.8.0     && cd ~/     && sudo ldconfig

EXPOSE 5600
ENTRYPOINT ["dotnet", "run"]

所有把HelloMvc制作成image的资料已经准备完毕。

5.2.4 制作 HelloMvc image,当前目录移动到HelloMvc中,执行下面命令(制作过程中可能会因为网络问题报错,可以重复执行下面这个命令直到成功就可以了)

docker build -t hellomvc-image . //记得命令最后有‘.‘

6、编译运行HelloMvc

  • 编译试运行:docker run --rm -w /webapp hellomvc-image
  • 运行:docker run -t --name web_container -d -p 5100:5600  hellomvc-image

打开浏览器 http://IP:5100 (防火墙和查看网络相关命令请查看本篇文章第四点)


二、在CentOS 7中部署

1、环境

这里演示的环境是CentOS7,64bit


2、安装.NET Core SDK



sudo yum -y install git
mkdir dn_cli
cd dn_cli
wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Binaries/Latest/dotnet-dev-centos-x64.latest.tar.gz
tar -zxf dotnet-dev-centos-x64.latest.tar.gz 
 

尝试执行命令:. /dotnet

提示错误:

Failed to load /root/dotnet/bin/libcoreclr.so, error: libunwind.so.8: cannot open shared object file: No such file or directory

解决方法:

yum install -y libunwind

尝试执行命令:. /dotnet

提示错误:

Failed to initialize CoreCLR, HRESULT: 0x80131500

解决方法:

yum install -y icu

尝试执行命令:. /dotnet --info,正常。

永久保存环境变量

找到/etc/profile文件(当用户第一次登录时,该文件被执行.),在最后面添加:

PATH=~/dn_cli:$PATH

export PATH

即时生效

source /etc/profile

3、下载cli-samples的HelloMvc例子

cd ~
mkdir app
cd app
git clone https://github.com/aspnet/cli-samples.git
cd cli-samples
dotnet restore
cd HelloMvc

需要显式指定HelloMvc的端口(即使指定的是5000端口),目前尝试过不加下面这段代码,发现默认的5000并不起作用

 

4、编译运行HelloMvc

将执行命令的当前目录定位到HelloMvc,并执行下面命令



dotnet run

打开浏览器 http://IP:5600(防火墙和查看网络相关命令请查看本篇文章第四点)

三、在Ubuntu 14.04中运行

 

1、安装Ubuntu Installers


mkdir dn_cli
cd dn_cli
wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Installers/Latest/dotnet-host-ubuntu-x64.latest.deb
wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Installers/Latest/dotnet-sharedframework-ubuntu-x64.latest.deb
wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Installers/Latest/dotnet-sdk-ubuntu-x64.latest.deb

//安装
dpkg -i dotnet-host-ubuntu-x64.latest.deb
dpkg -i dotnet-sharedframework-ubuntu-x64.latest.deb
dpkg -i dotnet-sdk-ubuntu-x64.latest.deb

2、下载cli-samples的HelloMvc例子

cd ~
mkdir app
cd app
git clone https://github.com/aspnet/cli-samples.git
cd cli-samples
dotnet restore
cd HelloMvc


需要显式指定HelloMvc的端口(即使指定的是5000端口),目前尝试过不加下面这段代码,发现默认的5000并不起作用


3、编译运行HelloMvc


dotnet run
打开浏览器 http://IP:5600(防火墙和查看网络相关命令请查看本篇文章第四点)

四、其他

1、开启、禁用firewalld等相关命令(iptables、docker相同)

 

2、防火墙firewalld常用命令

 

3、防火墙iptables常用命令

 

4、部分网络端口查询命令

 

相关资料:

作者:B.it
出处:http://www.cnblogs.com/ImBit/p/5375577.html

时间: 2024-08-03 18:10:09

ASP.NET Core 1.0的相关文章

asp.net core 2.0 web api基于JWT自定义策略授权

JWT(json web token)是一种基于json的身份验证机制,流程如下: 通过登录,来获取Token,再在之后每次请求的Header中追加Authorization为Token的凭据,服务端验证通过即可能获取想要访问的资源.关于JWT的技术,可参考网络上文章,这里不作详细说明, 这篇博文,主要说明在asp.net core 2.0中,基于jwt的web api的权限设置,即在asp.net core中怎么用JWT,再次就是不同用户或角色因为权限问题,即使援用Token,也不能访问不该访

丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0

丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0? 警告 您当前查看的页面是未经授权的转载! 如果当前版本排版错误,请前往查看最新版本:http://www.cnblogs.com/qin-nz/p/aspnetcore-run-on-mono-in-year-of-monkey.html 提示 更新时间:2016年02月07日. 各位程序媛/程序猿们,猴年快乐. 相信不少媛/猿都是被标题吸引来的,那我我先解释下标题. 提示 本文是一篇半科普文,不对技术细节进行深入探究. 标题

在ASP.NET Core 2.0中使用CookieAuthentication

在ASP.NET Core中关于Security有两个容易混淆的概念一个是Authentication(认证),一个是Authorization(授权).而前者是确定用户是谁的过程,后者是围绕着他们允许做什么,今天的主题就是关于在ASP.NET Core 2.0中如何使用CookieAuthentication认证. 在ASP.NET Core 2.0中使用CookieAuthentication跟在1.0中有些不同,需要在ConfigureServices和Configure中分别设置,前者我

一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.supervisor.mysql环境搭建搭建好了.net core linux的相关环境,今天就来说说ef core相关的配置及迁移: 简介: Entity Framework(以下简称EF) 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,EF Core是Entity

说说ASP.Net Core 2.0中的Razor Page

随着.net core2.0的发布,我们可以创建2.0的web应用了.2.0中新东西的出现,会让我们忘记老的东西,他就是Razor Page.下面的这篇博客将会介绍ASP.Net Core 2.0中的Razor Page. 在ASP.Net Core 2.0新特点之一就是支持Razor Page.今天的Razor Page是ASP.Net Core MVC中的一个子集.ASP.Net Core MVC 支持Razor Page意味着Razor Page应用从技术上来说就是MVC应用,同时Razo

初识ASP.NET Core 1.0

本文将对微软下一代ASP.NET框架做个概括性介绍,方便大家进一步熟悉该框架. 在介绍ASP.NET Core 1.0之前有必要澄清一些产品名称及版本号.ASP.NET Core1.0是微软下一代ASP.NET 框架,在这之前ASP.NET版本稳定在ASP.NET  4.6,对应的.NET Framework版本为.net 4.6.1. 曾经一段时间微软将下一代ASP.NET 命名为ASP.NET 5和MVC 6,在ASP.NET 5 is dead – Introducing ASP.NET

ASP.NET Core 1.0 开发记录

参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/first.html http://www.yuanjiaocheng.net/ASPNET-CORE/asp-net-core-overview.html http://www.yuanjiaocheng.net/ASPNET-CORE/asp.net-core-environment.html http://www.yuanjiaocheng.net/ASPNET-CORE/newproject.h

用ASP.NET Core 1.0中实现邮件发送功能

准备将一些项目迁移到 asp.net core 先从封装类库入手,在遇到邮件发送类时发现在 asp.net core 1.0中并示提供SMTP相关类库,于是网上一搜发现了MailKit 好东西一定要试一下,何况是开源,下面是代码可实现SMTP邮件发送: using MailKit.Net.Smtp; using MailKit.Security; using MimeKit; using System.Threading.Tasks; namespace ConsoleApp1 { public

VS Code开发调试ASP.NET Core 1.0

VS Code开发调试ASP.NET Core 1.0 使用VS Code开发调试ASP.NET Core 1.0,微软在今天凌晨发布了.NET Core 1.0,ASP.NET Core 1.0 与 Entity Framewok 1.0. 之前跟大家讲解过VS Code开发调试.NET Core RC2应用程序.今天讲一下VS Code开发 ASP.NET Core. 环境安装 .NET Core SDK Installer: win x64: https://download.micros

.NET Core &amp; ASP.NET Core 1.0

.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布 众所周知,Red Hat和微软正在努力使.NET Core成为Red Hat企业版Linux (RHEL)系统上的一流开发平台选项.这个团队已经一起工作好几个月了,RHEL对.NET有许多需求.今天在RedHat 峰会DevNation 上宣布了.NET Core & ASP.NET Core 1.0 RTM.Red Hat有一个新的关于在RHEL上更简单的使用.NET Core的选项.(DevNatio