作者:陈广 日期:2018-2-6
上篇文章,我们创建了一个最简单的web程序。vscode帮我们一条龙搞定了发布、托管、布署,甚至浏览器都帮我们打开了,URL都帮你输入到地址栏了。名符其实的傻瓜相机,这样当然很不过瘾。所以今天我们就来把程序布署到远程网站上,完成我们的第一个ASP.NET Core网站的发布。
要发布到远程服务器,当然首先得要有服务器了,所以就要去买个服务器。国内比较出名的是阿里和腾讯。我买的是腾讯的,之所以选腾讯,是因为它的开发者实验室专门有教.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位操作系统的。本来腾讯实验室有详细教程,但我这边装会稍有不同,写这篇文章也是为了以后我再装的时候回来参考。
使用Putty或SSH 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'
效果如下图所示:
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
。
安装完的最后效果如下图所示:
在.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配置文件,指定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如果已经启动,则使用重启命令:
sh /usr/jexus/jws restart
如果没有启动,则使用启动命令
sh /usr/jexus/jws start
最后,在你的浏览器中输入远程服务器IP地址或域名,成功访问网站。当然画面还是我上篇文章最后生成的画面,只是地址改变了,这里我就不再放了。
;