ZKEACMS Core 是基於 .net core 開發的,可以在 windows, linux, mac 上跨平臺運行,接下來我們來看看如何在 CentOS 上使用Jexus托管運行 ZKEACMS,通常我們在Linux部署ASP.NET Core應用,按照微軟的官方文檔,我們通常需要Nginx... ...
ZKEACMS Core 是基於 .net core 開發的,可以在 windows, linux, mac 上跨平臺運行,接下來我們來看看如何在 CentOS 上使用Jexus托管運行 ZKEACMS,通常我們在Linux部署ASP.NET Core應用,按照微軟的官方文檔,我們通常需要Nginx 搭配 Systemd (https://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction), Nginx並沒有接管Kestrel 進程,我們需要維護2個進程,增加了複雜度。如果你把asp.net core部署於windows上,我們可以用IIS來接管Kestrel進程,我們在Linux上也可以用Jexus來達到IIS一樣的體驗。
安裝 .Net Core 運行時
按照官方文檔https://www.microsoft.com/net/core#linuxcentos :運行以下命令,安裝 .Net Core Runtime
sudo yum install libunwind libicu curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=843421 sudo mkdir -p /usr/local/dotnet && sudo tar zxf dotnet.tar.gz -C /usr/local/dotnet sudo ln -s /usr/local/dotnet/dotnet /usr/local/bin
安裝 Jexus
按照《CentOS 7.2下安裝Mono 5.0》安裝好了Mono 5, 我這裡是安裝通用版的Jexus,通用版的Jeuxs 才能使用到我們自己安裝的最新版的Mono 5。安裝 Jexus 直接使用一下命令即可(需要在root身份下執行):
curl https://jexus.org/release/install | sh
安裝成功後會提示:OK, Jexus has been installed in /usr/jexus.
備註:
你可以直接安裝獨立版的Jexus,獨立版的Jexus自帶Mono,使用的是Mono的穩定版本4.8,安裝命令也是一個命令就可以搞定:curl https://jexus.org/release/x64/install.sh|sh
發佈 ZKEACMS.Core
資料庫 MySql
我使用的是騰訊雲的雲資料庫MySQL(Cloud Database for MySQL)是騰訊雲基於全球最受歡迎的開源資料庫MySQL專業打造的高性能分散式數據存儲服務,100%完全相容MySQL 協議,適用於面向關係型資料庫的場景。ZKEACMS Core 預設使用的是Oracle官方的Mysql驅動,由於Oracle官方的mysql驅動有很多問題,目前還是beta版本,最近也不見更新,我在生產環境使用的是Pomelo.EntityFrameworkCore.MySql ,我ZKEACMS的MySQL驅動更改為Pomelo.EntityFrameworkCore.MySql,經測試工作良好,我已經把相關修改pull 給ZKEACMS。 MySQL for .NET Core - Pomelo 擴展包系列 包括Pomelo.Data.MySql 和 Pomelo.EntityFrameworkCore.MySql ,推薦大家使用,經過了實際項目的檢驗。
ZKEACMS Core 的資料庫腳本只有SQL Server, 將SQL Server資料庫轉換為MySQL的工具非常多,這裡不做具體介紹了。
發佈 ZKEACMS.Core
發佈 ZKEACMS.Core 比較簡單,雙擊 Publish.cmd 即可
生成的文件在目錄 ZKEACMS.Core\src\ZKEACMS.WebHost\bin\Release\PublishOutput
修改連接字元串
打開 appsettings.json,加入 MySQL的資料庫連接字元串,結果如下
{
"ConnectionStrings": {
"DefaultConnection": "",
"Sqlite": "",
"MySql": "Server=10.66.241.199;Database=ZKEACMS_Core;User Id=root;Password=xxxxxxx;"
},
"ApplicationInsights": {
"InstrumentationKey": ""
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"CDN": {
"Enable": true,
"Url": "http://cdn.zkeasoft.com/core"
},
"Culture": "zh-CN"
}
上傳伺服器
我們將發佈好的程式同winscp 程式上傳到伺服器/var/www/csharpkit 目錄,具體操作可參考文章《使用WinSCP軟體在windows和Linux中進行文件傳輸》
配置Jexus運行ZKEACMS Core
定位到目錄,然後使用 dotnet 命令運行
cd /var/www/csharpkit
dotnet ZKEACMS.WebHost.dll
運行成功以後,就可以使用您伺服器的IP或者功能變數名稱訪問了,預設訪問的埠是5000 退出SSH遠程連接客戶端後,發現訪問不了,這是因為 dotnet 也退出了。下麵我們就通過Jexus來管理我們服務進程。
使用以下命令:
1、切換到Jexus配置文件目錄
cd /usr/jexus/siteconf
2、複製預設的配置文件為test
cp default csharpkit
3、編輯csharpkit配置文件
nano csharpkit
######################
# Web Site: csharpkit
########################################
port=80
root=/ /var/www/csharpkit
hosts=www.csharpkit.com #OR your.com,*.your.com
AppHost={
cmd=dotnet /var/www/csharpkit/ZKEACMS.WebHost.dll;
root=/var/www/csharpkit;
port=0;
}
配置的重點就在於AppHost中,需要註意的是在AppHost中的port(埠號)不代表Jexus對外服務的port(埠號),而是指要轉發的 Asp.Net Core應用程式的埠號,如果在程式中使用了UsrUrls自定義埠則使用UsrUrls中填寫的埠(不建議使用UsrUrls自定義埠),在沒有使用UsrUrls自定義埠的情況下埠號設置為 0,Jexus會在運行時與Asp.Net Core進行"協商"具體使用的埠號,避免多個應用分配,埠的麻煩和衝突的風險。 簡單來說就是會將外部的請求轉發到這個埠,由這個埠對應的Asp.Net Core應用程式對請求進行處理。
4、啟動/重啟 Jexus
當配置文件編輯完成後使用以下命令對Jexus進行 啟動/重啟
# 如果已啟動 Jexus: sh /usr/jexus/jws restart # 如果未啟動 Jexus: sh /usr/jexus/jws start
啟動/重啟成功後,在瀏覽器中輸入 ip地址/功能變數名稱:埠號 例如(http://www.csharpkit.com/) 即可訪問Asp.Net Core應用程式
以上即是Jexus托管Asp.Net Core應用程式的配置全過程