ASP.NET Core 2.0入门

应用程序的发布和托管

作者:陈广 日期:2018-2-6


上篇文章,我们创建了一个最简单的web程序。vscode帮我们一条龙搞定了发布、托管、布署,甚至浏览器都帮我们打开了,URL都帮你输入到地址栏了。名符其实的傻瓜相机,这样当然很不过瘾。所以今天我们就来把程序布署到远程网站上,完成我们的第一个ASP.NET Core网站的发布。

安装.NET Core 2.1.4

要发布到远程服务器,当然首先得要有服务器了,所以就要去买个服务器。国内比较出名的是阿里和腾讯。我买的是腾讯的,之所以选腾讯,是因为它的开发者实验室专门有教.NET Core安装的,教程非常详细,地址是: https://cloud.tencent.com/developer/labs/lab/10347 没有条件买服务器的可以云那里学,每天有一次上机机会,一次45分钟。熟练的话走一遍流程应该没有问题。有条件当然买了。现阶段大学生一年的费用才100出头,对学生来说,同样的价钱阿里的是1核2G内存,腾讯的是1核1G内存,阿里更厚道啊。不过阿里的CentOS支不支持.NET Core就不得而知了,反正腾讯的肯定支持。不过我想,只要是CentOS,应该都会支持的吧。大学生有条件的话还是建议买一台吧,只要没毕业,每年都是这个价钱,我买的可就贵不少了。有服务器可以折腾不少东西,找工作的时候,个人网站可比个人简历管用多了。

操作系统的选择

本来用微软的东西,肯定选择windows操作系统了,但我这1核1G内存还是省省吧,选择Linux系的。ubuntu如果是个人PC使用,效果更好,如果做服务器,CentOS更好些吧。我也不懂,反正是听别人说的,所以这篇文章是针对CentOS 7.3 64位操作系统的。本来腾讯实验室有详细教程,但我这边装会稍有不同,写这篇文章也是为了以后我再装的时候回来参考。

添加dotnet 产品Feed

使用PuttySSH Secure Shell Client或直接在腾讯云官网控制台登录连接至你的主机,按顺序输入如下命令。不是输入,是一条条复制粘贴:

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[packages-microsoft-com-prod]
name=packages-microsoft-com-prod 
baseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'

效果如下图所示:

安装.NET Core

sudo yum update
sudo yum -y install libunwind libicu
sudo yum install dotnet-sdk-2.1.4

这三个命令运行时间非常长,可以泡杯茶慢慢等。这里需要注意的是第三条命令的2.1.4是我写这篇文章时的.NET Core最新版本。你按照这篇文章装的话,先确定你电脑上的.NET Core是什么版本,然后这里输入的数字和电脑一致,要不会出问题的。安装过程中如果停下来等你输入,一律输y。 安装完的最后效果如下图所示:

安装web服务器Jexus

在.NET Core在开发时使用Kestrel作为web服务,kestrel速度很快,但安全性和功能有欠缺,所以在发布时官网推荐使用Nginx、Apache或IIS。但腾讯教程中推荐使用Jexus,上网查了下,比Nginx快很多。所以我也用Jexus吧。设置上也比Nginx方便很多。不需要云专门设置反向代理。

输入如下命令安装Jexus:

curl https://jexus.org/release/x64/install.sh|sh

最终效果类似下图:

生成应用程序

该装的东西都装完了,现在打开上篇文章我们写的程序,在终端输入如下命令(确保当前路径在项目文件夹下,打开项目后再打vscode的终端默认会进入项目文件夹):

dotnet publish -c release

运行完命令后效果如下图所示: 注意:查看左边资源管理器,发现自动生成了release文件夹,我们需要发布的文件就生成在在/release/netcoreapp2.0/publish文件夹下。接下来我们要把它们拷贝到远程服务器上。

布署应用程序

接下来回到服务器终端,输入如下命令在var文件夹下创建www文件夹:

mkdir -p /var/www

我们生成的应用程序就发布到这个文件夹下面。拷贝东西到服务器上推荐使用SSH Secure File Transfer Client,直接鼠标拖就行了,非常方便。接下来把你电脑上的刚才生成的publish文件夹下的东西拷贝到远程服务器刚创建的www文件夹下,如下图所示,把左边的东西托到右边就行了,注意红框标识的路径要对。

更改Jexus配置

接下来更改Jexus配置文件,指定web服务器的根目录并启动我们发布的应用程序。Jexus配置文件为/usr/jexus/siteconf/default。首先输入以下命令进入配置文件所在文件夹:

cd /usr/jexus/siteconf

我们拷贝default文件创建一个新的配置文件:

cp default aspnetcore

然后用vi打开这个新的文件,当然也可以把文件拷贝到本地,改好再上传。vi实在难用。

vi aspnetcore

default文件实际只有4句代码,#号后面的都是注释,把带#的代码全删掉,剩下的就是下面几句

######################
# Web Site: aspnetcore
########################################

port=80
root=/ /var/www/ #指定根目录
hosts=*    #OR your.com,*.your.com

NoLog=true
AppHost={CmdLine=dotnet /var/www/api.dll;AppRoot=/var/www/;Port=0}

需要做更改的地方第一个是root后面的路径,指定为你的发布路径。 第二个,也是主要更改的地方就是Apphost。其中CmdLine后面的是你启动应用程序的命令,当然,路径和dll文件名称都要按实际情况写。AppRoot指定的是发布文件夹,按实际情况填写。Port写0就OK了,具体原因我引用一下腾讯实验里张善友写的文档:

配置的重点就在于AppHost中,需要注意的是在AppHost中的port(端口号)不代表Jexus对外服务的port(端口号),而是指要转发的 Asp.Net Core应用程序的端口号,如果在程序中使用了UsrUrls自定义端口则使用UsrUrls中填写的端口(不建议使用UsrUrls自定义端口),在没有使用UsrUrls自定义端口的情况下端口号设置为 0,Jexus会在运行时与Asp.Net Core进行"协商"具体使用的端口号,避免多个应用分配,端口的麻烦和冲突的风险。 简单来说就是会将外部的请求转发到这个端口,由这个端口对应的Asp.Net Core应用程序对请求进行处理。

设置完成后,要把原来的default文件删除掉,网站才能正常运行:

rm -rf /usr/jexus/siteconf/default 

启动Jexus

终于把工作都做完了,现在启动Jexus。Jexus如果已经启动,则使用重启命令:

sh /usr/jexus/jws restart

如果没有启动,则使用启动命令

sh /usr/jexus/jws start

最后,在你的浏览器中输入远程服务器IP地址或域名,成功访问网站。当然画面还是我上篇文章最后生成的画面,只是地址改变了,这里我就不再放了。

;

© 2018 - IOT小分队文章发布系统 v0.3