1. 程式人生 > >Linux使用Jexus托管Asp.Net Core應用程序

Linux使用Jexus托管Asp.Net Core應用程序

技術 文件目錄 只需要 true 沒有 repr tag 博文 env

第一步 安裝.Net Core環境

安裝 dotnet 環境參見官方網站 https://www.microsoft.com/net/core。

選擇對應的系統版本進行安裝。安裝完成過後 輸入命令查看版本,目前最新版為 1.04:

dotnet --version

此時已經可以發布Asp.Net Core應用程序到Linux上運行了

將Asp.Net Core程序發布到Linux服務器上,通過 dotnet 命令來運行,如:

dotnet /應用程序全路徑/應用程序名.dll 

成功運行後會顯示 :

Hosting environment: Production
Content root path: /應用程序全路徑/
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

(Asp.Net Core應用程序默認使用5000端口,可以在項目 Program.cs 中進行自定義端口,但不建議在Program.cs中進行自定義端口)

但是這個時候,只要關閉當前的 ssh 會話 那麽 Asp.Net Core應用程序就會結束運行。

那麽該怎麽辦呢?使用 Jexus ! (需要使用5.8.* 版本或更高版本的)

Jexus 官網地址: https://www.jexus.org/

Jexus 官網論壇: https://www.linuxdot.net

第二步 安裝Jexus

安裝 Jexus 直接使用一下命令即可(需要在root身份下執行):

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

安裝成功後會提示:OK, Jexus has been installed in /usr/jexus.

第三步 發布程序到Linux服務器

將的Asp.Net Core 應用程序文件夾 發布到Linux服務器的 /var/www/ 路徑下

(如果 www 文件夾不存在,則使用 mkdir /var/www/ 命令創建 www 文件夾)

此時,應用程序所在的完整路徑為 /var/www/應用程序文件夾/應用程序名稱.dll

第四步 配置Jexus運行Asp.Net Core應用程序

使用以下命令:

1、切換到Jexus配置文件目錄

cd /usr/jexus/siteconf

2、復制默認的配置文件為test

cp default test

3、編輯test配置文件

vi test

test文件默認內容為:

######################
# Web Site: Default 
########################################

port=80
root=/ /var/www/default
hosts=*    #OR your.com,*.your.com


# addr=0.0.0.0
# CheckQuery=false
NoLog=true
# AppHost={CmdLine=/usr/local/x/xx;AppRoot=/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 or  TLSv1.2...
# ssl.ciphers= 

# DenyFrom=192.168.0.233, 192.168.1.*, 192.168.2.0/24
# AllowFrom=192.168.*.*
# DenyDirs=~/cgi, ~/upfiles
# indexes=myindex.aspx
# rewrite=^/.+?\.(asp|php|cgi|pl|sh)$ /index.aspx
# reproxy=/bbs/ http://192.168.1.112/bbs/
# host.Redirect=abc.com www.abc.com  301
# ResponseHandler.Add=myKey:myValue


# 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

編輯完成後 test 的內容為(註意AppHost中的每一項結尾應該有英文半角的分號):

######################
# Web Site: test
########################################

port=8888                    
root=/ /var/www/應用程序文件夾/
hosts=*   #OR your.com,*.your.com 

AppHost={
  cmd=dotnet 應用程序名稱.dll;   
  root=/var/www/應用程序文件夾/;  
  port=0;       
}


# addr=0.0.0.0
# CheckQuery=false
NoLog=true
# AppHost={CmdLine=/usr/local/x/xx;AppRoot=/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 or  TLSv1.2...
# ssl.ciphers= 

# DenyFrom=192.168.0.233, 192.168.1.*, 192.168.2.0/24
# AllowFrom=192.168.*.*
# DenyDirs=~/cgi, ~/upfiles
# indexes=myindex.aspx
# rewrite=^/.+?\.(asp|php|cgi|pl|sh)$ /index.aspx
# reproxy=/bbs/ http://192.168.1.112/bbs/
# host.Redirect=abc.com www.abc.com  301
# ResponseHandler.Add=myKey:myValue


# 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

編輯完成後,在英文半角輸入法下 按 Esc 鍵 輸入 :wq 完成保存文件修改並退出 (以上修改會在下面進行詳細說明)

4、啟動/重啟 Jexus

當配置文件編輯完成後使用以下命令對Jexus進行 啟動/重啟

# 如果已啟動 Jexus:
sh /usr/jexus/jws restart

# 如果未啟動 Jexus:
sh /usr/jexus/jws start

啟動/重啟成功後,在瀏覽器中輸入 ip地址/域名:端口號 例如(192.168.1.1:8888 或 www.aspnetcore.com:8888 ) 即可訪問Asp.Net Core應用程序

以上即是Jexus托管Asp.Net Core應用程序的配置全過程

通過微軟官方的介紹,Asp.Net Core應用程序是運行在 Kestrel 服務器上的,

那麽Jexus和Kestrel之間的關系什麽呢?正如 Apache與Tomcat之間的關系.

Jexus作為Web服務器,Kestrel是應用服務器,Jexus會將瀏覽器發送的請求轉交給Kestrel,Kestrel 根據請求 交給Asp.Net Core應用程序 處理後將處理結果返回到到Jexus,再由Jexus響應到瀏覽器,如圖所示:

技術分享

通過上面的圖片我們可以看到一次完整的請求響應的過程。

那麽Jexus是怎麽將請求轉發到 Kestrel 服務器中的Asp.Net Core應用程序上的呢?

這裏不得不感嘆Jexus的強力與使用的便捷,只需要簡單的編輯配置文件即可。

在上面 第四步 配置Jexus運行Asp.Net Core應用程序 時,test文件編輯後的內容含義

port=8888                     # 外部訪問的端口號,可以改成你想要的端口號,外部訪問通過 ip/域名:端口號 即可訪問
root=/ /var/www/應用程序文件夾/  # 應用程序的工作根目錄(全路徑)
hosts=*                        #OR your.com,*.your.com # 如果為服務器設置了DNS解析,則可以填寫解析到服務器的域名,如:www.myweb.com

AppHost={                      # 最最最重要的配置
  cmd=dotnet 應用程序名稱.dll;   # 命令,啟動Asp.Net Core應用要執行的命令
root
=/var/www/應用程序文件夾/; # Asp.Net Core應用程序所在的全路徑
port
=0; # Asp.Net Core應用程序所使用的端口號,如果在程序中使用了UsrUrls自定義端口則使用UsrUrls中填寫的端口(不建議使用UsrUrls自定義端口),
# 在沒有使用UsrUrls自定義端口的情況下端口號設置為 0,Jexus會在運行時與Asp.Net Core進行"協商"具體使用的端口號,避免多個應用分配 # 端口的麻煩和沖突的風險。
}

配置的重點就在於AppHost中,需要註意的是在AppHost中的port(端口號)不代表Jexus對外服務的port(端口號),而是指要轉發的 Asp.Net Core應用程序的端口號,簡單來說就是會將外部的請求轉發到這個端口,由這個端口對應的Asp.Net Core應用程序對請求進行處理。

強烈推薦“協商端口”,而不是在Asp.Net Core中使用UsrUrls設置端口,避免多個應用分配端口的麻煩和沖突的風險

推薦博客:

宇內流雲的博客

張善友的技術博客

驚鴻哥的博客

衣明誌的技術博客

另推薦博文:

Jexus開機啟動

另感謝宇內流雲大佬的耐心指導。

(博文寫的菜,求大佬莫嫌棄 Orz.....)

Linux使用Jexus托管Asp.Net Core應用程序