我正在学习.Net Core。
我使用ASP.Net MVC开发了WebApplication,因为它可以在本地IIS上安装和运行。
与Ubuntu和Linux中的主机/发布.Net Core WebApi类似的方式,而不是像5000这样的特定端口上运行?
docker是否对该上下文有帮助?如果是,那我该如何使用呢?
是否可以在没有泊坞窗的情况下托管/发布?如何在没有Docker的情况下主持/发布?
我还阅读了以下链接并实施了所有步骤。 Publish to a Linux Production Environment
在上面的链接中,我无法确定访问webapi的网址是什么?
答案 0 :(得分:2)
正如@Pawel所指出的,托管.NET Core Web API或ASP.NET Core应用程序的推荐方法是使用Kestrel,这是内置于dotnet核心工具中的Web服务器。出于开发目的,您不需要另一个Web服务器来启动和测试您的API。
您不需要Docker来托管您的Web应用程序/ API ,但是应该将其视为生产托管,因为它是一种干净,快速的自动化版本和隔离进程的方法。
使用Docker,流程结构是相同的 - Docker只托管和管理流程。您可以让Kestrel在一个Docker容器中运行API,而Nginx(在另一个容器中或安装在基本操作系统上)将调用转发给它。
让您在开发设置中运行API的简单步骤
确保在project.json
中定义适当的运行时"runtimes": {
"win7-x64": {},
"win81-x64": {},
"ubuntu.14.04-x64": {},
"debian.8-x64": {}
}
"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中尝试过,并且在为正确的运行时构建它时遇到了问题 < / p>
appsettings.json
。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地址。
dotnet MyWebApi.dll
在Windows上手动启动应用程序,并将IIS配置为转发给它。答案 1 :(得分:1)
Asp.NET Core应用程序使用名为Kestrel的跨平台应用程序Web服务器。您可以直接使用Kestrel运行您的应用程序(例如使用dotnet run
- 在开发期间非常有用)但是不建议将Kestrel直接暴露给外部世界,因此在生产环境中,您可以将IIS放在前面在Linux上运行时在Windows或nginx上运行时的应用程序。您可以在此处找到示例nginx配置:https://github.com/aspnet/ServerTests/blob/dev/test/ServerComparison.FunctionalTests/nginx.conf
答案 2 :(得分:0)
您可以像这样指定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”(或您输入的网址/ IP)。
上面的示例假设您使用的是startup class
的启动版