启动时在 Linux 下运行 ASP.NET Core 应用程序

Posted

技术标签:

【中文标题】启动时在 Linux 下运行 ASP.NET Core 应用程序【英文标题】:run ASP.NET Core app under Linux on startup 【发布时间】:2018-12-23 14:10:35 【问题描述】:

我想在 linux 下运行我的 ASP.NET Core 解决方案,结果它在启动时运行。

来自 Microsoft docs,有两种方法:ApacheNginx

两种方法都涉及代理通行证,例如

阿帕奇:

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
    ....

nginx

server 
    listen        80;
    server_name   example.com *.example.com;
    location / 
        proxy_pass         http://localhost:5000;
        ...

由于 Apache 或 Nginx 仅充当代理 - 我是否正确地认为 我必须手动启动 dotnet 应用程序

我在文档中看不到某些内容可能会针对我的 WebApi 项目触发 dotnet run 命令。

显然,Apache 或 Nginx 不会处理触发 dotnet 应用程序 - 除非我错过了什么。

有没有办法在操作系统启动时自动启动应用程序

【问题讨论】:

【参考方案1】:

文档中的This section 描述了如何创建服务文件以自动启动您的 Asp.Net Core 应用程序。

创建服务定义文件:

sudo nano /etc/systemd/system/kestrel-hellomvc.service

以下是应用程序的示例服务文件:

[Unit]
Description=Example .NET Web API App running on Ubuntu

[Service]
WorkingDirectory=/var/aspnetcore/hellomvc
ExecStart=/usr/bin/dotnet /var/aspnetcore/hellomvc/hellomvc.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Development

[Install]
WantedBy=multi-user.target

保存文件并启用服务。

systemctl enable kestrel-hellomvc.service

启动服务并验证它是否正在运行。

systemctl start kestrel-hellomvc.service
systemctl status kestrel-hellomvc.service

您需要设置WorkingDirectory - 应用程序的文件夹路径和ExecStart - 应用程序dll 的路径。默认情况下就足够了。

从现在开始,您的应用将在操作系统启动时自动启动,并将尝试在崩溃后重新启动

【讨论】:

对于遇到我遇到的问题的其他人;如果您希望您的应用程序绑定在端口 上,则用户必须设置为 root 如果您不启用该服务,它将一直工作到系统下一次“重新启动”。

以上是关于启动时在 Linux 下运行 ASP.NET Core 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

linux下怎样运行asp.net+SqlServer

在Linux环境下使用Apache部署ASP.NET Core

如何在 http 和 https 之间共享 asp.net 会话

从 ASP.NET 启动进程 - 为啥进程会立即终止?

用户登录时在母版页中隐藏登录面板。(ASP.net)

排序时在 ASP.NET 2.0 中的高效自定义分页