我正在学习.Net Core.
我使用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核心工具中的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发布
>发布平台项目: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到您放置二进制文件的文件夹并使用以下命令运行您的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通常会为您处理此问题.