.NET Core App部署Linux

.NET Core服務部署在Linux環境下的相關文檔可參考:

環境搭建

本服務部署在CentOS7.5上,需要.NET Core5.0運行時環境,可參照如下步驟執行:

步驟一 存儲庫

將Microsoft包簽名密鑰添加到受信任密鑰列表,並添加Microsoft包存儲庫,打開終端並運行以下命令:

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

若是報SSL connect error錯誤,可以嘗試執行:

sudo yum -y update nss ca-certificates curl openssl

步驟二 安裝SDK

.NET SDK 使你可以通過 .NET 開發應用。 如果安裝 .NET SDK,則無需安裝相應的運行時。 若要安裝 .NET SDK,請運行以下命令:

sudo yum install dotnet-sdk-5.0

但實際上,無論測試環境還是生產環境都只需要安裝運行時環境即可,所以如果只安裝運行時環境:

sudo yum install dotnet-runtime-5.0

如果服務器上需要同時兼容asp.net core,則需要使用這個命令:

sudo yum install dotnet-runtime-5.0

其他版本的安裝

如果需要安裝其他版本,只需要將安裝目標改爲合適的名稱即可,格式命名爲:{product}-{type}-{version}

代碼調整

引入包

Linux需要在Nuget中額外引入依賴Microsoft.Extensions.Hosting.Systemd,並在Program.cs中添加UseSystemd()代碼:

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseSystemd() //Linux 部署必須
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<Worker>();
                });
    }

關於服務相關拓展,請參考文檔:

服務器部署

發佈包

發佈方式有兩種:

  • 一種是直接在Visual Studio右鍵單擊項目,選擇發佈,選擇Linux環境。
  • 另一種時在.NET CLI中使用命令:
 dotnet publish -c Release -r linux-x64 -p:PublishSingleFile=true -o E:\Pub

註冊服務

  1. 將發佈內容複製到Linux主機的安裝文件夾中/usr/sbin/clearlog下。
  2. clearlog執行權限。
chmod 755 clearlog
  1. /etc/systemd/system中創建文件clearlog.service,修改文件:
[Unit]
Description= Clear log on the server.

[Service]
Type=notify
ExecStart=/usr/sbin/netcoreapp/clearlog

[Install]
WantedBy=multi-user.target

Type=notify屬性指示systemd應用程序在啓動和關閉時通知它,而WantedBy=multi-user.target設置將導致在Linux運行達到級別
2時啓動服務,這意味着非圖形、多用戶shell處於活動狀態。

當我們將服務名爲“XXX”時,對應systemd中的服務名就爲“XXX.service”。

  1. 重新加載服務,並查看其狀態確認應用程序已註冊成功,執行命令:
sudo systemctl daemon-reload
sudo systemctl status clearlog.service

如果服務配置正確,則會看到以下輸出:

[root@localhost system]# systemctl status clearlog.service
● clearlog.service - Clear log linux service
   Loaded: loaded (/etc/systemd/system/clearlog.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
  1. 啓用服務
sudo systemctl start clearlog.service

如需要系統啓動時自動啓動該服務,使用enable命令。

sudo systemctl enable clearlog.service

事件日誌

服務本身記錄的日誌,可根據log4net的配置查看,不過有時任需要查看事件日誌,Linux中等效Windows日誌的是journald中包含的結構化日誌系統服務systemd.
由 Linux 後臺程序寫入標準輸出的日誌消息將自動寫入到 journald 中,可通過如下命令查看日誌:

sudo journalctl -u clearlog.service

關於journalctl更多請查看:JOURNALCTL命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章