我正在尝试按照 this tutorial 中的说明在 Ubuntu Server 16.04 LTS 上托管 ASP.Net Core MVC 应用程序.
在 Linux 计算机上,我使用 git pull 来拉入我的项目。我使用 dotnet build
成功构建了它,这会触发包恢复。我使用 dotnetpublish -c Release -r linux-x64
成功发布了它。我将目录更改为 bin/Release/netcoreapp2.1
并运行 sudo cp ./*.*/var/aspnetcore/myapp/
将文件复制到我所在的目录中我正在主持该项目。我导航到该目录并输入 dotnet myapp.dll
- 该应用程序开始监听端口 5000 和 5001,并且从另一台计算机上,我可以在浏览器中输入我的域名并查看该网站,这意味着 Nginx 反向代理和 Kestrel 必须工作正常。
现在我想将应用程序作为服务运行,以便它随计算机启动,在崩溃时重新启动,记录错误等,但是当我输入 sudo systemctl start kestrel-myapp.service 时,它立即崩溃并尝试每 10 秒重新启动一次但失败。日志显示错误:未找到应用程序依赖项 list (myapp.deps.json) 中的程序集:包:'Microsoft.EntityFrameworkCore.Relational.Design',版本'1.1.5'路径:'lib/netstandard1.3/Microsoft.EntityFrameworkCore.Relational.Design.dll'主进程退出,code=exited,status=140/n/a
所以,1.1.5 版本看起来低得可疑,但我更新了所有 NuGet 包,它仍然想使用它。另外,我不明白为什么如果依赖项存在问题,它不会因 dotnet myapp.dll
崩溃。有人知道如何解决这个问题吗?
这是我的服务文件:
[Unit]
Description=myapp ASP.Net Core MVC Application
[Service]
WorkingDirectory=/var/aspnetcore/myapp
ExecStart=/usr/bin/dotnet /var/aspnetcore/myapp/myapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
SyslogIdentifier=myapp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
额外问题:我应该将带有静态文件的 wwwroot 文件夹复制到哪里?应用程序运行,但找不到我的任何 javascript 或 css 文件,并且我不确定它们属于哪里。
最佳答案
当您dotnetpublish -c Release -r linux-x64
时,它会创建几个目录。您想要使用 bin/Release/netcoreapp2.1/linux-x64/publish
目录。其他目录也包含构建,但这些构建假设它们将在开发系统上运行。只有 publish
目录包含应部署的位。其他目录包含假设它们在开发环境中运行的位。
当您运行 dotnet myapp.dll
时,它会起作用,因为您仍然以普通用户身份运行,并且它会看到您的本地开发 Assets ,包括 nuget 缓存。
当您通过systemctl
运行时,它以root
身份运行,它没有任何本地nuget缓存,并且无法使用开发(非publish
ed) 代码版本。
关于linux - Linux 上的 .Net Core 在 'dotnet myapp.dll' 下运行良好,但在 systemctl 下失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52281480/