將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