1.下载.net core运行时
将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
安装运行时
sudo yum install aspnetcore-runtime-3.1
2.安装jexus
Jexus“独立版”指的是自带.net运行时(mono),不需要在客户服务器安装mono就能正常运行的Jexus版本,该版本只支持 64位Linux操作系统。
X86_64系统 安装jexus独立版的命令是:
curl https://jexus.org/release/x64/install.sh|sh
ARM64系统 安装jexus独立版的命令是:
curl https://jexus.org/release/arm64/install.sh|sh
强调:运行上述安装命令,需要操作者有root权限。
Jexus的操作命令
Jexus包括如下操作命令(首先 cd /usr/jexus):
启动:sudo ./jws start
停止:sudo ./jws stop
重启:sudo ./jws restart
3.配置jexus
jexus的主要配置在/usr/jexus/siteconf/
目录下,该目录下的配置文件可以理解为一个配置文件对应iis中的一个站点。
jexus的默认配置是default,默认没有启用启用AppHost,内容如如下:
######################
# Web Site: Default
########################################
port=80 # 外部访问的端口
root=/ /var/www/default #程序工作目录
hosts=* #OR your.com,*.your.com
# User=www-data
# AspNet.Workers=2 # Set the number of asp.net worker processes. Defauit is 1.
# addr=0.0.0.0
# CheckQuery=false
NoLog=true
# AppHost={cmd=dotnet /usr/local/x/app.dll; root=/usr/local/x; port=5000}
# NoFile=/index.aspx
# Keep_Alive=false
# UseGZIP=false
# UseHttps=true
# ssl.certificate=/x/xxx.crt #or pem
# ssl.certificatekey=/x/xxx.key
# ssl.protocol=TLSv1.0 TLSv1.1 TLSv1.2
# ssl.ciphers=ECDHE-RSA-AES256-GCM-SHA384:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE
# ResponseHandler.Add=Strict-Transport-Security:max-age=15768000 #for HSTS
# DenyFrom=192.168.0.233, 192.168.1.*, 192.168.2.0/24
# AllowFrom=192.168.*.*
# DenyDirs=~/cgi, ~/upfiles
# indexes=myindex.aspx
# Deny asp ...
rewrite=^/.+?\.(asp|cgi|pl|sh|bash)(\?.*|)$ /.deny->$1
rewrite=.*/editor/.+ /.deny->editor
# reproxy=/bbs/ http://192.168.1.112/bbs/
# host.Redirect=abc.com www.abc.com 301
# ResponseHandler.Add=myKey:myValue
ResponseHandler.Add=X-Frame-Options:SAMEORIGIN
# Jexus php fastcgi address is '/var/run/jexus/phpsvr'
#######################################################
# fastcgi.add=php|socket:/var/run/jexus/phpsvr
# php-fpm listen address is '127.0.0.1:9000'
############################################
# fastcgi.add=php|tcp:127.0.0.1:9000
可以看到这个默认站点的工作目录是/var/www/default,这个目录在我们服务器默认是没有的,我们可以创建一个mkdir /var/www/default -p
,然后cd到此目录下,创建一个html文件
vi index.html
# 内容如下
<h1>hello jexus</h1>
启动jexus
cd /usr/jexus
./jws start
然后访问ip
我们主要修改port和AppHost这两个地方,复制一份默认配置文件为netcoreapp
cd /usr/jexus/siteconf
cp default netcoreapp
将其修改为:
需要将你发布后的项目放到/var/www下
port=8088 # 外部访问的端口
root=/ /var/www/aspnetcore #程序工作目录
hosts=* #OR your.com,*.your.com
NoLog=true
AppHost={cmd=dotnet /var/www/aspnetcore/myapp.dll; root=/var/www/aspnetcore; port=5000}
rewrite=^/.+?\.(asp|cgi|pl|sh|bash)(\?.*|)$ /.deny->$1
rewrite=.*/editor/.+ /.deny->editor
# reproxy=/bbs/ http://192.168.1.112/bbs/
# host.Redirect=abc.com www.abc.com 301
# ResponseHandler.Add=myKey:myValue
ResponseHandler.Add=X-Frame-Options:SAMEORIGIN
重启jexus,再通过ip+端口即可访问项目
启用AppHost的注意点:
port是执行dotnet命令运行项目后所暴露的内部端口,默认是5000,如果你的程序run起来后的端口是5001,那么就填5001。
我曾测试过这样做,将配置中cmd的路径故意写错,端口写5001,然后到项目下使用dotnet myapp.dll --urls=http://localhost:5001/
运行项目,再另开一个ssh连接,重启jexus然后访问ip+端口一样可以成功。他会将在8088端口接收到的请求转发给内部的5001。(但不建议这样使用,因为这样运行的程序并不是在后台运行的,一旦退出终端就无法再次访问了)
cmd表示启动这个web应用程序的命令(含参数)
root:必选项。表示这个应用程序的工作目录,如:AppRoot=/var/www/aspnetcore
port:可选项。表示这个应用程序的侦听端口,多个端口用英文逗号分隔
4.docker部署jexus
该命令会在宿主机root目录下创建对应的文件夹,但里面没有文件,需要我们手动创建
docker run -d --name=c_jexus -p 9527:80 \
-v /root/jexus/app:/var/www/jexus_app \
-v /root/jexus/siteconf:/usr/jexus/siteconf \
jexus/mono:latest
创建默认站点配置
cd /root/jexus/siteconf
vi default
粘贴以下代码
port=80 # 外部访问的端口
root=/ /var/www/jexus_app/default #程序工作目录
hosts=* #OR your.com,*.your.com
NoLog=true
AppHost={cmd=dotnet /var/www/aspnetcore/myapp.dll; root=/var/www/aspnetcore; port=5000}
rewrite=^/.+?\.(asp|cgi|pl|sh|bash)(\?.*|)$ /.deny->$1
rewrite=.*/editor/.+ /.deny->editor
ResponseHandler.Add=X-Frame-Options:SAMEORIGIN
再进入/root/jexus/app创建default的项目文件
cd /root/jexus/app
mkdir default
vi default/index.html
#内容如下
<h1>hello defalut jexus</h1>
然后重启容器,即可通过端口+ip访问
注意:为什么在配置文件的root写的是/var/www/jexus_app/default而我们在宿主机创建的文件却能够成功运行并被访问到,这里是docker数据卷的知识了,可以理解为双向绑定哈。
需要部署.net core的项目的话,只需要将项目上传到服务器的/root/jexus/app目录下即可,然后修改站点配置重新运行容器,如果需要部署多个项目,就再新建一个站点的配置以及项目文件,只不过启动容器时记得绑定多个端口。