直接用dotnet xx.dll命令是可以部署asp.net core项目的,包括https也可实现。但是用jexus有以下几个好处:
1.jexus可以守护dotnet进程
2.同一服务器,同一端口,可以配置多个网站
3.操作简单
4.通过反向代理实现负载均衡(不过jexus一般通过端口转发方式实现asp.net core)
5.检测攻击(只是asp.net+mono方式,不适用asp.net core)
用 .net core 2.0作为目标框架做了一个网站,想部署到centos 6.5上,安装.net core时因为缺少openssl-lib而失败,而安装Openssl-lib又要安装一大堆依赖,最后不得不直接在阿里云后台重新更换到centos 7.4
一.安装.net sdk
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
sudo yum update
sudo yum install libunwind libicu
sudo yum install dotnet-sdk-2.1.200 //如果希望安装2.1的最新版,可把后面的.200小版本号去掉
//如果是.net core 3.1版本,就是 sudo yum install dotnet-sdk-3.1
如果后来需要卸载:sudo yum remove dotnet-sdk-2.1.200
安装后运行 dotnet --version 可以查看版本号,就说明成功了
( 2.1.3以后对应目标框架.net core 2.1, 2.1.200还是属于.net core 2.0 ) (截止目前,最新版本是2.1.504)
二.发布并运行.net core 项目
假设我的站点名称是mysite,创建一个 var/www/mysite 文件夹
在windows上的vs 2017中 publish .net core项目,生成publish文件夹,将文件夹下的文件传到var/www/mysite
进入该文件夹,运行 dotnet mysite.dll ,网站已经运行起来了
(注意 要进入网站目录后再运行dotnet,不要dotnet /var/www/..../mysite.dll, 否则会出问题,目前发现的是静态文件打不开,配置文件读不到)
执行 wget 127.0.0.1:5000 可以看到返回成功,说明网页已经可以本机打开了。
然而,这时候只能通过5000端口被访问,还不能通过外网访问,下面我们需要安装jexus来实现外网80端口访问
三.安装jexus
jexus 的原理就是把80端口的请求转发给5000端口,并且守护dotnet进程。
安装非常简单:
curl https://jexus.org/release/x64/install.sh|sudo sh
会自动把jexus安装到 usr/jexus 下,目前最新版本是5.8.3.10,从该版本开始支持.net core 2.1,
usr/jexus/siteconf 文件夹下
cd /usr/jexus/siteconf
这里已经有一个默认的名为default文件,这个文件对应的是一个网站,如果有多个网站,就可以设置多个文件
用vim 命令 修改default 文件,
vi default (也可以用mv default mysite 命令修改该文件名,或者新创建一个文件 vi mysite, 一般如果只有一个网站且使用80端口就用默认就好了)
添加以下内容
port=80
root=/ /var/www/mysite/
hosts=*
AppHost={
cmd=dotnet mysite.dll;
root=/var/www/mysite/;
port=0;
}
执行 /usr/jexus/./jws start 启动jexus服务
以后每次修改配置文件都要 执行 /usr/jexus/./jws restart 重启
在阿里云的安全规则里把80端口放行
现在在你的电脑上输入阿里云的外网ip就能打开网页了
四. 将jexus设置为开机自启
cd /etc/init.d/
vi jws
按i编辑模式,粘贴下面内容
#!/bin/bash
#chkconfig: 2345 80 05
#description:jws
#
. /etc/rc.d/init.d/functions
case "$1" in
start)
export ASPNETCORE_ENVIRONMENT=Product
export DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER=0
#
# 在centos7/debian上可以设为0,但是在centos8上不可以,centos8上设置为0,发送https消息会报错找不#到某dll文件
# 为0时,appsetting.json中general中的SslDifferent要为"true",否则,为"false"
#为0时,httpClient才可以访问我们自己网站的https,否则会超时
#这里设置环境变量。如果在etc/profile下面设置环境变量,加载会在程序启动之后
echo "Jexus Start.."
/usr/jexus/jws start
;;
stop)
echo "Jexus Stop.."
/usr/jexus/jws stop
;;
restart)
echo "Jexus Restart"
/usr/jexus/jws restart
;;
status)
/usr/jexus/jws status
;;
*)
exit 1
;;
esac
exit $RETVAL
需要注意:这里在程序启动之前要设置环境变量。如果在etc/profile下面设置环境变量,加载会在程序启动之后
按ESC后,输入:wq保存文件
把这个脚本作为“服务”加入
chmod 766 jws
chmod +x jws //增加jws的执行权限,华为云技术说可以代替766,下次可试试
chkconfig --add jws
chkconfig jws on //华为云技术建议添加,用来启用服务,但是似乎不用也行
五. 设置环境变量
在/etc/profile 最后面加入一句(如果你的程序依赖这个环境变量的话)
export ASPNETCORE_ENVIRONMENT=Product
export DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER=0; # 在centos7/debian上可以设为0,但是在centos8上不可以,centos8上设置为0,发送https消息会报错找不#到某dll文件 # 为0时,appsetting.json中general中的SslDifferent要为"true",否则,为"false" #为0时,httpClient才可以访问我们自己网站的https,否则会超时
如果没有这句,重新开机是没问题的,环境变量会从/etc/init.d/ 中读出,但是如果 中间执行 /usr/jexus/./jws restart,就读不到环境变量了,导致程序出错
注意:如果你增加一个mysite配置文件,设定端口为80,但是已经有一个default配置文件端口也是80,这会导致mysite起不来,要将default删除或者修改端口
至此,jexus已经在centos 7.4搭建成功。
六、centos下使用GDI
https://blog.csdn.net/soband_xiang/article/details/123905689
七、其他
1、httpWebRequest在centos下会报错(大致意思curl openssl版本不匹配),需要使用httpclient替代
经验总结:
1.centos 7以下系统库的版本太低,会导致安装失败。需要升级到centos 7.4
2. jexus一旦启动后,会自动启动dotnet,无需将dotnet加入开机启动。
3. jexus只是起到端口转发作用,核心功能还是由dotnet完成的。
关于如何配置https,开启gzip,请看另一篇 https://blog.csdn.net/soband_xiang/article/details/80757718