gpt4 book ai didi

c# - 如何在Ubuntu上托管/发布.Net Core Web API?

转载 作者:太空狗 更新时间:2023-10-30 01:32:10 26 4
gpt4 key购买 nike

我正在学习.net核心。
我使用asp.net mvc开发了webapplication,因为它可以在本地iis上安装和运行。
在ubuntu和linux中托管/发布.net core webapi,而不是在5000这样的特定端口上运行,有什么相似的方法?
Docker对这种情况有帮助吗?如果是,那我怎么用呢?
是否可以在没有Docker的情况下托管/发布?如果没有Docker,我如何托管/发布?
我还阅读了下面的链接并实现了所有步骤。
Publish to a Linux Production Environment
在上面的链接中,我无法确定访问webapi的url是什么?

最佳答案

正如@pawel所指出的,推荐的托管.net core web api或asp.net core应用程序的方法是使用kestrel,它是内置在dotnet core工具中的web服务器。出于开发目的,您不需要另一个web服务器来启动和测试您的api。
您不需要docker来托管您的web应用程序/api,但应该考虑将其用于生产托管,因为这是一种干净、快速的自动化发布和隔离流程的方法。
Docker的流程结构是相同的—Docker只是托管和管理流程。你可以让Kestrel在一个Docker容器中运行你的API,而Nginx(在另一个容器中或安装在基本操作系统上)向它转发调用。
托管没有docker的api
在ubuntu上,使用nginx(或apache)提供您的公共https,并将其配置为将请求转发到kestrel服务器,kestrel服务器通常在端口5000上运行。如果服务器正在运行防火墙,请不要公开端口5000,而是打开该计算机上的端口443(https)。设置nginx将在您引用的文章中介绍。如前所述,不需要仅仅启动和测试web api。
Kestrel速度很快,但非常简单—例如,它不支持https(您应该将其用于公共API,因为您将需要身份验证,并且没有https就无法安全地进行身份验证。使用nginx/apache胜过kestrel还有很多其他原因——安全性、负载平衡、反向代理功能等。
在开发设置中运行api的简单步骤
确保在project.json中定义了适当的运行时

"runtimes": {
"win7-x64": {},
"win81-x64": {},
"ubuntu.14.04-x64": {},
"debian.8-x64": {}
}

确保project.json在 "emitEntryPoint": true部分定义了 buildOptions
为要部署到的平台构建项目: 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虚拟机或服务器,并添加应用程序需要运行的任何文件,如 appsettings.json
确保在Linux计算机上安装了适当的.NET Core框架。
打开一个终端窗口, sudo -i以获取管理权限, cd指向放置二进制文件的文件夹,并使用: dotnet MyWebApi.dll运行api,其中mywebapi.dll是生成过程的主要输出。
此时,红隼应该从通常的信息开始,说明它在监听哪个端口(比如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通常会为您处理这个问题。

关于c# - 如何在Ubuntu上托管/发布.Net Core Web API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38046289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com