首頁

目前文章總數:157 篇

  

最後更新:2024年 12月 07日

0079. 快速部署 .NET Aspire 於 Windows、Linux(Ubuntu) 伺服器的方法

日期:2024年 11月 30日

標籤: .Net Aspire Asp.NET Core Asp.NET Core Web MVC Redis Web MySQL Docker Linux Ubuntu Windows Forms

摘要:C# 學習筆記


範例所需: 1. Visual Studio 2022 Asp.net Core 版本 17.10.0 以上 (才支援 .Net Aspire)
      2. Ubuntu 22.04 版本以上
範例檔案:本篇範例代碼
相關參考:1. .Net Aspire 官方文件
     0076. 如何通過 Microsoft .NET Aspire 建立可觀察、具生產導向的分散式應用程式並與現有系統無縫整合
     0078. 配置 Microsoft .NET Aspire - 測試容器與實體容器的兼容切換流程
解決問題:如何將 AspireHost 佈署到 Windows Server 與 Ubuntu Server 上 (此篇是原生部署,而非將 .NET Aspire 先進行 DockerFile 轉 Image)
基本介紹:本篇分為二大部分。
第一部分:部署 Windows
第二部分:部署 Linux - Ubuntu






第一部分:部署 Windows

Step 1:拉取專案

Windows 上使用這範例代碼進行說明
先用 Git 拉取 Source Code

Step 2:進入 Aspire Host 專案

拉取完成後,進入 Aspire Host 專案,打開 Windows Command Line
※實務上此步驟開始可以轉為 Windows Service

Step 3:輸入啟動指令

輸入以下指令啟動 Aspire

dotnet run --project ./AspireIntegrationAppHostExample.csproj


可以觀察到啟動的 URL 如下:

https://localhost:17105



Step 4:啟動成功

接著就可以在瀏覽器上看到 Windows Server 已經可以運行 Aspire

Step 5:補充 - 需更新 SDK

可以用以下指令檢查是否有更新到最新的 Dotnet SDK
若無資訊,需先從 Windows 官網下載 SDK

dotnet --info




Step 6:補充 - 參考文獻

還有其他延伸的操作,可以參考Microsoft Aspire 部署文件



第二部分:部署 Linux - Ubuntu

Step 1:新建專案

上一個專案,有些功能不能在 Ubuntu 上執行(Windows Form 專案),因此新建一個 Aspire Host 空專案進行說明
如果是內部網域使用,新建專案時,可以只使用 Http 運行

Step 2:開啟 launchSettings.json

為了要能執行 Http ,需要在 Environment 的地方新增以下參數,讓 Aspire Host 可以正常執行

"ASPIRE_ALLOW_UNSECURED_TRANSPORT": "true"



Step 3:代碼結構

代碼結構很乾淨,只有 Aspire Host 沒有其他相依,請簽入到版控 (Git、Github、SVN…)

Step 4:Ubuntu 拉取代碼

登入 Ubuntu 主機,並且 Clone 代碼到一個路徑上,示意如下:

Step 5:輸入啟動指令

輸入以下指令啟動 Aspire

dotnet run --project ./AppHostForUbuntu.csproj


可以觀察到啟動的 URL 如下:

http://localhost:15091


※主機 IP : 192.168.51.188

Step 6:需配置反向代理

若直接用瀏覽器連到此路徑會出錯,需要進行 Nginx 的反向代理設定 (其他工具亦可)

http://192.168.51.188:15091



Step 7:新建 Nginx conf - 建檔

到 Ubuntu 上,安裝完 Nginx 後,可以到以下資料夾新建檔案,這邊新建了 aspirehost.conf 檔案

/etc/nginx/conf.d



Step 8:新建 Nginx conf - 內容

檔案內容如下,因為 15091 已經用在 Aspire Host 內部服務上,要對外我們建立了 15092 提供傾聽

server {
    listen 15092;
    server_name 192.168.51.188;

    location / {
        proxy_pass http://localhost:15091;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}


Step 9:重啟 Nginx

保存完成後,重啟 Nginx 服務

systemctl restart nginx


Step 10:再次連線

因為我們從外部訪問此站點(但仍在同網域下),而非使用 Localhost </br>因此 Aspire Host 儀錶板會要求輸入 Token

http://192.168.51.188:15092



Step 11:取得 Token

Token 位置就在 Ubuntu 啟動時顯示,只有擁有主機權限的管理者,才能看到此段資訊。
Microsoft 取得 Token 文件


輸入後 -> 登入

Step 12:成功登入

Ubuntu 也可以正常使用 Aspire Host ,若有相關的服務就可以進行繫結 (Windows Form 這種基於 Windows 的專案則不合適)



Step 13:補充 - 需更新 SDK

預設的 Ubuntu 也需要檢查是否有安裝 dotnet SDK

dotnet --info


若無,則可以輸入以下指令,開始下載 SDK

sudo apt-get update

sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-8.0

dotnet workload install aspire



其中 install aspire 是只有用到 Aspire 才會需要安裝。