.Net Core API 運行於 Ubuntu (Linux)

  • 1027
  • 0
  • C#
  • 2022-02-13

將C# .Net Core API 部屬於 Ubuntu (Linux) 上,達到跨平台使用的目的,由於.Net Core 與 Ubuntu (Linux) 各自版本眾多,環境兼容上會出現很多的問題,因此需先將 Ubuntu (Linux) 的版本與.Net Core SDK 的版本確認好在進行環境的建置。

項目版本
Ubuntu(Linux)20.04.2.0
.Net Core SDK (安裝於Ubuntu上)6.0.100
.Net Core SDK (Visual Studio 開發版本)3.1.415
Oracle VirtualBox 6.1.14 r140239 (Qt5.6.2)

以下將會先以Ubuntu 20.04.2.0 與 .Net Core SDK 6.0.100作為解說。


 環境建置步驟:
1. 下載與安裝.Net Core SDK 
可參考官方文件:https://docs.microsoft.com/zh-tw/dotnet/core/install/linux-ubuntu#apt-troubleshooting
1.1. 下載 .Net core 安裝檔

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

1.2. 安裝 .Net core SDK

sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-6.0

以上如果沒有出現錯誤訊息的話,代表已經順利安裝成功,可以直接跳至步驟2。

1.3. PubKey Error 
作者本身會遇到下圖"NO_PUBKEY B02C46DF417A0893"的狀況,導致無法順利完成安裝。
 

因此我們需要手動進行新增PubKey B02C46DF417A0893

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B02C46DF417A0893

新增完成後,再重新執行步驟1.1與1.2即可成功安裝.Net Core SDK 6.0.100
參考:https://chrisjean.com/fix-apt-get-update-the-following-signatures-couldnt-be-verified-because-the-public-key-is-not-available/
 

2. 新增與部屬.Net Core Web API 於Ubuntu VM Server
2.1. 新增Web API

2.2. 命名專案名稱為UbuntuAPITest

2.3. 點選Create,完成建立新專案

2.4. 直接使用預設專案中的API "WeatherForecast",僅需於專案中的Program.cs 設定API運行的Port號,範例設定為5000

    public class Program
   {
       public static void Main(string[] args)
       {
           CreateHostBuilder(args).Build().Run();
       }
       public static IHostBuilder CreateHostBuilder(string[] args) =>
           Host.CreateDefaultBuilder(args)
               .ConfigureWebHostDefaults(webBuilder =>
               {
                   webBuilder.UseUrls("http://*:5000");  //強制使用5000 port 
                   webBuilder.UseStartup<Startup>();
               });
   }

2.5. 部署專案,於方案點右鍵進行Publish

2.6. 選擇Folder

2.7. 點選Publish

2.8. 將產出的Publish資料夾,加壓縮後複製到Ubuntu VM Server

2.9. 於Ubuntu資料夾中解壓縮,並刪除多餘的檔案

2.10. 啟用API Web,執行UbuntuAPITest.dll

dotnet UbuntuAPITest.dll

2.11. 測試API Web,確認是否成功啟用

http://localhost:5000/weatherForecast

3. 設定本機 Windows 連上 Ubuntu VM Server (這邊使用Oracle VirtualBox)

3.1. 點選設定

3.2. 網路→進階→連接埠轉送

3.3. 找出 VM 與 Windows 對應的IP與Port

於VM Terminal 使用 ifconfig 指令

ifconfig

會去得以下兩個IP位址10.0.2.15、192.168.56.102

透過本機 Windows CMD 使用ipconfig指令,來分辨出哪個IP是Windows 本機可以連到的對外IP

ipconfig

由上圖可知道,192.168.56.X 為 Windows 與 VM 共同存在的網段,因此歸類出以下的IP位址

Windows 對外IP位址 : 10.0.2.15
Windows 對內IP位址 : 192.168.56.1
VM對內IP位址 : 10.0.2.15
VM對外IP位址 : 192.168.56.102

3.4. 設定 VM 與 Windows 對應的IP與Port

3.5. 透過Postman 測試使否可連上VM Web API

取得Response,代表測試成功,同時代表已成功將.Net Core Web API 部署上 Ubuntu VM Server,恭喜你~


參考資料:
部署.Net Core API 專案到Ubuntu VM Server -
https://blog.txstudio.tw/2017/02/exec-aspnet-core-application-in-ubuntu.html
SDK 指定版本使用 - 
https://blog.miniasp.com/post/2018/04/19/How-to-switch-between-DotNet-SDK-versions