Centos7 配置.Net Core 及Jexus服务器
2018-03-26

1.安装 .Net Core 2
第一步 添加dotnet源

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
可能由于网络原因,下载要耐心等待一段时间,下载完成后执行下面命令。 
1 sudo yum update2 sudo yum install libunwind libicu3 sudo yum install dotnet-sdk-2.1.4

(注意:centos6下gcc版本会提示过低,安装失败。解决方案:1.安装centos7(简单方便,帮瓦工之类的推荐);2.更新编译gcc(请自行搜索解决))

第三步 创建 Hello World测试程序

1 dotnet new console -o demo2 cd demo
3 dotnet run

2.写一个ASP.NET Core应用(官网链接)

## 创建 razor web应用

1 cd /home2 ///在当前目录下创建一个Web应用3 dotnet new razor -o aspnetcoreapp4 /// 运行应用程序5 cd aspnetcoreapp6 dotnet run

(ps:可能会Warn:“Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Error -99 EADDRNOTAVAIL address not available'”, 具体参考 https://github.com/aspnet/KestrelHttpServer/issues/2117。验证完后,退出当前应用,继续下面的内容。)

我们的Web应用程序默认运行在5000端口,通常我们对外提供的Web都在80,443端口。Windows上我会使用IIS来宿主ASP.NET Core,在Linux下可以用Nginx,Apache,Jexus 等,[微软的文档都有详细说明

## 安装 Jexus

上面我们已经完成.NET Core环境的安装,通常我们在Linux部署ASP.NET Core应用,按照微软的官方文档,我们通常需要Nginx 搭配 Systemd, Nginx并没有接管Kestrel 进程,我们需要维护2个进程,增加了复杂度。如果你把asp.net core部署于windows上,我们可以用IIS来接管Kestrel进程,我们在Linux上也可以用Jexus来达到IIS一样的体验。

直接安装独立版的Jexus,独立版的Jexus自带Mono,使用的是Mono的稳定版本4.8。安装 Jexus 直接使用一下命令即可(需要在root身份下执行):

安装独立版Jexus

curl https://jexus.org/release/x64/install.sh|sh
安装成功后会提示:OK, Jexus has been installed in /usr/jexus.

## 配置Jexus运行asp.net core

把asp.net core 应用部署到Jexus

mkdir -p /var/www/aspnetcore
cd /var/dotnet/aspnetcoreapp/dotnet publish -o /var/www/aspnetcore

然后使用下面的命令测试发布过后的程序是否运行正常

dotnet /var/www/aspnetcore/aspnetcoreapp.dl


## 配置jexus 网站:

/// 1、切换到Jexus配置文件目录cd /usr/jexus/siteconf/// 2、复制默认的配置文件为aspnetcorecp default aspnetcorevi aspnetcore

######################

# Web Site: aspnetcore

########################################

port=80

root=/ /var/www/aspnetcore

hosts= * #OR your.com,*.your.com


AppHost={CmdLine=dotnet /var/www/aspnetcore/aspnetcoreapp.dll;AppRoot=/var/www/aspnetcore/;Port=0}

配置的重点就在于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:
sh /usr/jexus/jws restart
/// 如果未启动 Jexus:
sh /usr/jexus/jws start