簡體   English   中英

如何在Ubuntu上托管/發布我的.Net Core WebAPI?

[英]How do I host/publish my .Net Core WebAPI on Ubuntu?

我正在學習.Net Core。

我使用ASP.Net MVC開發了WebApplication,因為它可以在本地IIS上安裝和運行。

在Ubuntu和Linux中托管/發布.Net Core WebApi的方式類似,而不是像5000這樣的特定端口運行?

docker對這種情況有幫助嗎? 如果是,那我該如何使用它?

是否可以在沒有docker的情況下托管/發布? 如何在沒有Docker的情況下主持/發布?

我還閱讀了以下鏈接並實施了所有步驟。 發布到Linux生產環境

在上面的鏈接中,我無法確定訪問webapi的URL是什么?

正如@Pawel所指出的,托管.NET Core Web API或ASP.NET Core應用程序的推薦方法是使用Kestrel,它是內置於dotnet核心工具中的Web服務器。 出於開發目的,您不需要另一個Web服務器來啟動和測試您的API。

您不需要Docker來托管您的Web應用程序/ API ,但應將其視為生產托管,因為它是一種干凈,快速的自動化版本和隔離進程的方法。

使用Docker,流程結構是相同的 - Docker只托管和管理流程。 您可以讓Kestrel在一個Docker容器中運行API,而Nginx(在另一個容器中或安裝在基本操作系統上)將調用轉發給它。

在沒有Docker的情況下托管您的API

  • 在Ubuntu上,使用Nginx(或Apache)提供公共HTTPS,並將其配置為將請求轉發到您的Kestrel服務器,該服務器通常在端口5000上運行。如果您的服務器運行防火牆,請不要公開端口5000,而是打開該計算機上的端口443(HTTPS)。 您引用的文章中介紹了如何設置Nginx。 如上所述,不僅僅需要啟動和測試Web API。
  • 紅隼很快但很簡單 - 例如。 它不支持HTTPS(您應該將其用於公共API,因為您需要身份驗證,並且無法在沒有HTTPS的情況下安全地進行身份驗證。使用Nginx / Apache而不是Kestrel還有許多其他原因 - 安全性,負載平衡,反向代理能力等

只需簡單的步驟即可在開發設置中運行API

  • 確保在project.json中定義適當的運行時

     "runtimes": { "win7-x64": {}, "win81-x64": {}, "ubuntu.14.04-x64": {}, "debian.8-x64": {} } 
  • 確保project.json在buildOptions部分中定義"emitEntryPoint": true
  • 為將部署到的平台構建項目: dotnet build -r ubuntu.14.04-x64 --build-profile Release
  • 發布您的平台項目: dotnet publish -r ubuntu.14.04-x64 --configuration Release -o ./bin/Release/Publish

使用命令行,如我所示,為Ubuntu構建和發布您的應用程序 - 我已經在VS 2015 Update 3中嘗試過,並且在為正確的運行時構建它時遇到了問題

  • 將Publish文件夾中的文件復制到Ubuntu VM或服務器,並添加應用程序需要運行的任何文件,例如appsettings.json
  • 確保Linux計算機上安裝了適當的.NET Core框架。
  • 打開一個終端窗口, sudo -i獲取管理員權限, cd到您放置二進制文件的文件夾並使用以下dotnet MyWebApi.dll運行您的api: dotnet MyWebApi.dll其中MyWebApi.dll是您構建過程的主要輸出。

此時,Kestrel應該從通常的消息開始,說明它正在偵聽的端口(例如,5000)。 如果它是無頭服務器,您應該能夠使用curl調用Web API:

    curl http://localhost:5000/whatever/your/api/needs/here

如果Ubuntu框具有GUI(Gnome等),您應該能夠使用瀏覽器連接到您的api。

如果您的Ubuntu服務器沒有運行防火牆,您應該能夠使用同一網絡上另一台計算機上的瀏覽器連接到Web API:

    http://<linux-ip-address>:5000/whatever/your/api/needs/here

您可以通過在終端窗口中鍵入ip addr show來獲取Ubuntu服務器的IP地址。

筆記

  • 管理防火牆取決於您的Linux發行版。 如果服務器是公共的,那么您必須運行一個並使用它來關閉對Kestrel服務的訪問。
  • 設置Docker更復雜,在這里添加太多了。 問一個單獨的問題,我將記錄我所做的事情。
  • 請注意,當您在Windows上的IIS下運行時,發生的情況完全相同:IIS將請求轉發到端口5000上的Kestrel或您指定的任何內容。 通常,IIS(通過您的發布生成的web.config文件)配置為在需要時啟動Kestrel並使其保持運行。 您可以使用dotnet MyWebApi.dll在Windows上手動啟動應用程序,並將IIS配置為轉發給它。
  • 正如我所描述的那樣運行在學習時很好,但是對於生產,你需要定義你的API作為Linux守護進程啟動並讓Linux重新啟動它如果它崩潰(Docker也可以為你做這個)。 IIS通常會為您處理此問題。

Asp.NET Core應用程序使用名為Kestrel的跨平台應用程序Web服務器。 您可以直接使用Kestrel運行您的應用程序(例如使用dotnet run - 在開發期間非常有用)但是不建議將Kestrel直接暴露給外部世界,因此在生產環境中,當您在Windows上運行時,您會將IIS放在應用程序前面或nginx在Linux上運行時。 你可以在這里找到一個示例nginx配置: https//github.com/aspnet/ServerTests/blob/dev/test/ServerComparison.FunctionalTests/nginx.conf

您可以像這樣指定url / port(在“Program.cs”文件中):

 public static void Main(string[] args) {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseUrls("http://192.168.0.0:8080")
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }

將“192.168.0.0”替換為UseUrls()方法中的實際ip或url。

在項目目錄中,只需打開一個終端/控制台窗口並運行“dotnet run”。

確保它顯示“正在收聽:192.168.0.0:8080”(或您輸入的url / ip)。

上面的示例假設您正在為啟動類使用Startup

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM